aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS.txt1
-rw-r--r--OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs1
-rw-r--r--OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs13
-rw-r--r--OpenSim/Addons/Groups/Service/GroupsService.cs21
-rw-r--r--OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs23
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs20
-rw-r--r--OpenSim/Capabilities/Handlers/AvatarPickerSearch/AvatarPickerSearchHandler.cs116
-rw-r--r--OpenSim/Capabilities/LLSDAvatarPicker.cs51
-rw-r--r--OpenSim/Data/IProfilesData.cs56
-rw-r--r--OpenSim/Data/MSSQL/Resources/RegionStore.migrations12
-rw-r--r--OpenSim/Data/MySQL/MySQLAssetData.cs22
-rw-r--r--OpenSim/Data/MySQL/MySQLOfflineIMData.cs7
-rw-r--r--OpenSim/Data/MySQL/MySQLUserProfilesData.cs1096
-rw-r--r--OpenSim/Data/MySQL/Resources/EstateStore.migrations6
-rw-r--r--OpenSim/Data/MySQL/Resources/UserProfiles.migrations83
-rw-r--r--OpenSim/Data/SQLite/Resources/EstateStore.migrations9
-rw-r--r--OpenSim/Framework/Animation.cs20
-rw-r--r--OpenSim/Framework/CachedTextureEventArg.cs46
-rw-r--r--OpenSim/Framework/Console/LocalConsole.cs15
-rw-r--r--OpenSim/Framework/EstateSettings.cs1
-rw-r--r--OpenSim/Framework/IClientAPI.cs7
-rw-r--r--OpenSim/Framework/IPeople.cs47
-rw-r--r--OpenSim/Framework/IScene.cs7
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs2
-rw-r--r--OpenSim/Framework/Servers/ServerBase.cs5
-rw-r--r--OpenSim/Framework/UserProfiles.cs117
-rw-r--r--OpenSim/Framework/Util.cs22
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs6
-rw-r--r--OpenSim/Region/ClientStack/IClientNetworkServer.cs15
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs139
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs80
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs12
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs4
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs59
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs16
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs93
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/Tests/InventoryTransferModuleTests.cs449
-rw-r--r--OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs1332
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs64
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/Tests/HGUserManagementModuleTests.cs76
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs187
-rw-r--r--OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs3
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs226
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs44
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs218
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs256
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs298
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs51
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs7
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Sound/SoundModule.cs9
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEstateModule.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/ISoundModule.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs110
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/DefaultAvatarAnimations.cs26
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs17
-rw-r--r--OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs108
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs16
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs91
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs20
-rw-r--r--OpenSim/Region/Framework/Scenes/SimStatsReporter.cs3
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs107
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs66
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs8
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs6
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs41
-rw-r--r--OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs579
-rw-r--r--OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs8
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs60
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs164
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs351
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs173
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs187
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs157
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs137
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs138
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActors.cs160
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs35
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs432
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs2
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs4
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSConstraintHinge.cs2
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs315
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs21
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs276
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs20
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSMotors.cs71
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSParam.cs304
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs336
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs645
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPrimDisplaced.cs22
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPrimLinkable.cs30
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs289
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs998
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSShapes.cs1111
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSTerrainHeightmap.cs30
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs93
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSTerrainMesh.cs56
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs48
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt28
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/Tests/BasicVehicles.cs12
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs249
-rw-r--r--OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs83
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs326
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs14
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs60
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs8
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs6
-rw-r--r--OpenSim/Server/Base/ServerUtils.cs1
-rw-r--r--OpenSim/Server/Base/ServicesServerBase.cs5
-rw-r--r--OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs8
-rw-r--r--OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs7
-rw-r--r--OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs7
-rw-r--r--OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs9
-rw-r--r--OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs114
-rw-r--r--OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs461
-rw-r--r--OpenSim/Server/Handlers/Simulation/AgentHandlers.cs2
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs193
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs25
-rw-r--r--OpenSim/Services/Interfaces/IBansService.cs48
-rw-r--r--OpenSim/Services/Interfaces/IUserProfilesService.cs75
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginResponse.cs20
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs7
-rw-r--r--OpenSim/Services/UserAccountService/GridUserService.cs2
-rw-r--r--OpenSim/Services/UserProfilesService/UserProfilesService.cs187
-rw-r--r--OpenSim/Services/UserProfilesService/UserProfilesServiceBase.cs86
-rw-r--r--OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs2
-rw-r--r--OpenSim/Tests/Common/Helpers/SceneHelpers.cs54
-rw-r--r--OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs41
-rw-r--r--OpenSim/Tests/Common/Mock/TestClient.cs48
-rw-r--r--OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs28
-rw-r--r--README.md1
-rw-r--r--ThirdParty/SmartThreadPool/AssemblyInfo.cs61
-rw-r--r--ThirdParty/SmartThreadPool/CallerThreadContext.cs309
-rw-r--r--ThirdParty/SmartThreadPool/CanceledWorkItemsGroup.cs14
-rw-r--r--ThirdParty/SmartThreadPool/EventWaitHandle.cs104
-rw-r--r--ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs82
-rw-r--r--ThirdParty/SmartThreadPool/Exceptions.cs82
-rw-r--r--ThirdParty/SmartThreadPool/Interfaces.cs703
-rw-r--r--ThirdParty/SmartThreadPool/InternalInterfaces.cs27
-rw-r--r--ThirdParty/SmartThreadPool/PriorityQueue.cs465
-rw-r--r--ThirdParty/SmartThreadPool/Properties/AssemblyInfo.cs23
-rw-r--r--ThirdParty/SmartThreadPool/SLExt.cs16
-rw-r--r--ThirdParty/SmartThreadPool/STPEventWaitHandle.cs62
-rw-r--r--ThirdParty/SmartThreadPool/STPPerformanceCounter.cs648
-rw-r--r--ThirdParty/SmartThreadPool/STPStartInfo.cs269
-rw-r--r--ThirdParty/SmartThreadPool/SmartThreadPool.ThreadEntry.cs60
-rw-r--r--ThirdParty/SmartThreadPool/SmartThreadPool.cs2559
-rw-r--r--ThirdParty/SmartThreadPool/SynchronizedDictionary.cs89
-rw-r--r--ThirdParty/SmartThreadPool/WIGStartInfo.cs218
-rw-r--r--ThirdParty/SmartThreadPool/WorkItem.WorkItemResult.cs190
-rw-r--r--ThirdParty/SmartThreadPool/WorkItem.cs659
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemFactory.cs628
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemInfo.cs145
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemResultTWrapper.cs128
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemsGroup.cs759
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemsGroupBase.cs471
-rw-r--r--ThirdParty/SmartThreadPool/WorkItemsQueue.cs973
-rw-r--r--bin/OpenMetaverse.Http.XML57
-rwxr-xr-xbin/OpenMetaverse.Rendering.Meshmerizer.dllbin24576 -> 24576 bytes
-rw-r--r--bin/OpenMetaverse.StructuredData.XML274
-rwxr-xr-xbin/OpenMetaverse.StructuredData.dllbin114688 -> 102400 bytes
-rw-r--r--bin/OpenMetaverse.XML32181
-rwxr-xr-xbin/OpenMetaverse.dllbin1925120 -> 1785856 bytes
-rw-r--r--bin/OpenMetaverse.dll.config8
-rw-r--r--bin/OpenMetaverseTypes.XML3115
-rwxr-xr-xbin/OpenMetaverseTypes.dllbin122880 -> 114688 bytes
-rw-r--r--bin/OpenSim.ini.example10
-rw-r--r--bin/OpenSimDefaults.ini83
-rwxr-xr-xbin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config2
-rw-r--r--bin/Robust.HG.ini.example45
-rw-r--r--bin/Robust.ini.example45
-rw-r--r--bin/config-include/StandaloneCommon.ini.example30
-rw-r--r--bin/config-include/StandaloneHypergrid.ini7
-rwxr-xr-xbin/lib32/BulletSim.dllbin570368 -> 982528 bytes
-rwxr-xr-xbin/lib32/libBulletSim.dylibbin0 -> 1181656 bytes
-rwxr-xr-xbin/lib32/libBulletSim.sobin1751260 -> 2271724 bytes
-rwxr-xr-xbin/lib64/BulletSim.dllbin720896 -> 1222656 bytes
-rwxr-xr-xbin/lib64/libBulletSim.sobin1908442 -> 2454796 bytes
-rw-r--r--bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686.sobin0 -> 140028 bytes
-rw-r--r--bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.sobin0 -> 149368 bytes
-rw-r--r--bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1.dylibbin0 -> 130560 bytes
-rw-r--r--prebuild.xml42
200 files changed, 35679 insertions, 25641 deletions
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 8ff55df..36b17be 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -101,6 +101,7 @@ what it is today.
101* jhurliman 101* jhurliman
102* John R Sohn (XenReborn) 102* John R Sohn (XenReborn)
103* jonc 103* jonc
104* Jon Cundill
104* Junta Kohime 105* Junta Kohime
105* Kayne 106* Kayne
106* Kevin Cozens 107* Kevin Cozens
diff --git a/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs
index f670272..7e0b112 100644
--- a/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs
+++ b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs
@@ -186,7 +186,6 @@ namespace OpenSim.Groups
186 public UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, 186 public UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment,
187 bool allowPublish, bool maturePublish, UUID founderID, out string reason) 187 bool allowPublish, bool maturePublish, UUID founderID, out string reason)
188 { 188 {
189 m_log.DebugFormat("[Groups]: Creating group {0}", name);
190 reason = string.Empty; 189 reason = string.Empty;
191 if (m_UserManagement.IsLocalGridUser(RequestingAgentID)) 190 if (m_UserManagement.IsLocalGridUser(RequestingAgentID))
192 return m_LocalGroupsConnector.CreateGroup(RequestingAgentID, name, charter, showInList, insigniaID, 191 return m_LocalGroupsConnector.CreateGroup(RequestingAgentID, name, charter, showInList, insigniaID,
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
index f991d01..28f7acc 100644
--- a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
+++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
@@ -170,11 +170,16 @@ namespace OpenSim.Groups
170 170
171 } 171 }
172 172
173 grec = m_GroupsService.GetGroupRecord(RequestingAgentID, grec.GroupID); 173 if (grec.GroupID != UUID.Zero)
174 if (grec == null) 174 {
175 NullResult(result, "Internal Error"); 175 grec = m_GroupsService.GetGroupRecord(RequestingAgentID, grec.GroupID);
176 if (grec == null)
177 NullResult(result, "Internal Error");
178 else
179 result["RESULT"] = GroupsDataUtils.GroupRecord(grec);
180 }
176 else 181 else
177 result["RESULT"] = GroupsDataUtils.GroupRecord(grec); 182 NullResult(result, reason);
178 } 183 }
179 184
180 string xmlString = ServerUtils.BuildXmlResponse(result); 185 string xmlString = ServerUtils.BuildXmlResponse(result);
diff --git a/OpenSim/Addons/Groups/Service/GroupsService.cs b/OpenSim/Addons/Groups/Service/GroupsService.cs
index 0668870..a2ef13a 100644
--- a/OpenSim/Addons/Groups/Service/GroupsService.cs
+++ b/OpenSim/Addons/Groups/Service/GroupsService.cs
@@ -130,6 +130,13 @@ namespace OpenSim.Groups
130 { 130 {
131 reason = string.Empty; 131 reason = string.Empty;
132 132
133 // Check if the group already exists
134 if (m_Database.RetrieveGroup(name) != null)
135 {
136 reason = "A group with that name already exists";
137 return UUID.Zero;
138 }
139
133 // Create the group 140 // Create the group
134 GroupData data = new GroupData(); 141 GroupData data = new GroupData();
135 data.GroupID = UUID.Random(); 142 data.GroupID = UUID.Random();
@@ -723,12 +730,12 @@ namespace OpenSim.Groups
723 730
724 #region Actions without permission checks 731 #region Actions without permission checks
725 732
726 private void _AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) 733 protected void _AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID)
727 { 734 {
728 _AddAgentToGroup(RequestingAgentID, AgentID, GroupID, RoleID, string.Empty); 735 _AddAgentToGroup(RequestingAgentID, AgentID, GroupID, RoleID, string.Empty);
729 } 736 }
730 737
731 public void _RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) 738 protected void _RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID)
732 { 739 {
733 // 1. Delete membership 740 // 1. Delete membership
734 m_Database.DeleteMember(GroupID, AgentID); 741 m_Database.DeleteMember(GroupID, AgentID);
@@ -780,7 +787,7 @@ namespace OpenSim.Groups
780 787
781 } 788 }
782 789
783 private bool _AddOrUpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, bool add) 790 protected bool _AddOrUpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, bool add)
784 { 791 {
785 RoleData data = m_Database.RetrieveRole(groupID, roleID); 792 RoleData data = m_Database.RetrieveRole(groupID, roleID);
786 793
@@ -810,12 +817,12 @@ namespace OpenSim.Groups
810 return m_Database.StoreRole(data); 817 return m_Database.StoreRole(data);
811 } 818 }
812 819
813 private void _RemoveGroupRole(UUID groupID, UUID roleID) 820 protected void _RemoveGroupRole(UUID groupID, UUID roleID)
814 { 821 {
815 m_Database.DeleteRole(groupID, roleID); 822 m_Database.DeleteRole(groupID, roleID);
816 } 823 }
817 824
818 private void _AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) 825 protected void _AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID)
819 { 826 {
820 RoleMembershipData data = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); 827 RoleMembershipData data = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID);
821 if (data != null) 828 if (data != null)
@@ -840,7 +847,7 @@ namespace OpenSim.Groups
840 847
841 } 848 }
842 849
843 private List<GroupRolesData> _GetGroupRoles(UUID groupID) 850 protected List<GroupRolesData> _GetGroupRoles(UUID groupID)
844 { 851 {
845 List<GroupRolesData> roles = new List<GroupRolesData>(); 852 List<GroupRolesData> roles = new List<GroupRolesData>();
846 853
@@ -865,7 +872,7 @@ namespace OpenSim.Groups
865 return roles; 872 return roles;
866 } 873 }
867 874
868 private List<ExtendedGroupRoleMembersData> _GetGroupRoleMembers(UUID GroupID, bool isInGroup) 875 protected List<ExtendedGroupRoleMembersData> _GetGroupRoleMembers(UUID GroupID, bool isInGroup)
869 { 876 {
870 List<ExtendedGroupRoleMembersData> rmembers = new List<ExtendedGroupRoleMembersData>(); 877 List<ExtendedGroupRoleMembersData> rmembers = new List<ExtendedGroupRoleMembersData>();
871 878
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
index fcb6991..1d63d26 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
@@ -115,6 +115,8 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
115 Environment.Exit(1); 115 Environment.Exit(1);
116 } 116 }
117 117
118 List<IScene> createdScenes = new List<IScene>();
119
118 for (int i = 0; i < regionsToLoad.Length; i++) 120 for (int i = 0; i < regionsToLoad.Length; i++)
119 { 121 {
120 IScene scene; 122 IScene scene;
@@ -123,17 +125,22 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
123 ")"); 125 ")");
124 126
125 bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]); 127 bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
128
126 m_openSim.CreateRegion(regionsToLoad[i], true, out scene); 129 m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
130 createdScenes.Add(scene);
131
127 if (changed) 132 if (changed)
128 regionsToLoad[i].EstateSettings.Save(); 133 regionsToLoad[i].EstateSettings.Save();
129 134 }
130 if (scene != null) 135
136 foreach (IScene scene in createdScenes)
137 {
138 scene.Start();
139
140 m_newRegionCreatedHandler = OnNewRegionCreated;
141 if (m_newRegionCreatedHandler != null)
131 { 142 {
132 m_newRegionCreatedHandler = OnNewRegionCreated; 143 m_newRegionCreatedHandler(scene);
133 if (m_newRegionCreatedHandler != null)
134 {
135 m_newRegionCreatedHandler(scene);
136 }
137 } 144 }
138 } 145 }
139 } 146 }
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index e50dac6..729667c 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -161,6 +161,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
161 availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd); 161 availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd);
162 availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove); 162 availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove);
163 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList); 163 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList);
164 availableMethods["admin_estate_reload"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcEstateReload);
164 165
165 // Misc 166 // Misc
166 availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch); 167 availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch);
@@ -831,6 +832,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
831 832
832 IScene newScene; 833 IScene newScene;
833 m_application.CreateRegion(region, out newScene); 834 m_application.CreateRegion(region, out newScene);
835 newScene.Start();
834 836
835 // If an access specification was provided, use it. 837 // If an access specification was provided, use it.
836 // Otherwise accept the default. 838 // Otherwise accept the default.
@@ -1225,7 +1227,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1225 { 1227 {
1226 GridUserInfo userInfo = m_application.SceneManager.CurrentOrFirstScene.GridUserService.GetGridUserInfo(account.PrincipalID.ToString()); 1228 GridUserInfo userInfo = m_application.SceneManager.CurrentOrFirstScene.GridUserService.GetGridUserInfo(account.PrincipalID.ToString());
1227 if (userInfo != null) 1229 if (userInfo != null)
1228 responseData["lastlogin"] = userInfo.Login; 1230 responseData["lastlogin"] = Util.ToUnixTime(userInfo.Login);
1229 else 1231 else
1230 responseData["lastlogin"] = 0; 1232 responseData["lastlogin"] = 0;
1231 1233
@@ -1902,6 +1904,22 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1902 m_log.Info("[RADMIN]: Access List List Request complete"); 1904 m_log.Info("[RADMIN]: Access List List Request complete");
1903 } 1905 }
1904 1906
1907 private void XmlRpcEstateReload(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
1908 {
1909 m_log.Info("[RADMIN]: Received Estate Reload Request");
1910
1911 Hashtable responseData = (Hashtable)response.Value;
1912// Hashtable requestData = (Hashtable)request.Params[0];
1913
1914 m_application.SceneManager.ForEachScene(s =>
1915 s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false)
1916 );
1917
1918 responseData["success"] = true;
1919
1920 m_log.Info("[RADMIN]: Estate Reload Request complete");
1921 }
1922
1905 private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 1923 private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
1906 { 1924 {
1907 Hashtable responseData = (Hashtable)response.Value; 1925 Hashtable responseData = (Hashtable)response.Value;
diff --git a/OpenSim/Capabilities/Handlers/AvatarPickerSearch/AvatarPickerSearchHandler.cs b/OpenSim/Capabilities/Handlers/AvatarPickerSearch/AvatarPickerSearchHandler.cs
new file mode 100644
index 0000000..4dca592
--- /dev/null
+++ b/OpenSim/Capabilities/Handlers/AvatarPickerSearch/AvatarPickerSearchHandler.cs
@@ -0,0 +1,116 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Collections.Specialized;
31using System.IO;
32using System.Reflection;
33using System.Web;
34using log4net;
35using Nini.Config;
36using OpenMetaverse;
37using OpenSim.Framework;
38using OpenSim.Framework.Capabilities;
39using OpenSim.Framework.Servers;
40using OpenSim.Framework.Servers.HttpServer;
41//using OpenSim.Region.Framework.Interfaces;
42using OpenSim.Services.Interfaces;
43using Caps = OpenSim.Framework.Capabilities.Caps;
44
45namespace OpenSim.Capabilities.Handlers
46{
47 public class AvatarPickerSearchHandler : BaseStreamHandler
48 {
49 private static readonly ILog m_log =
50 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
51 private IPeople m_PeopleService;
52
53 public AvatarPickerSearchHandler(string path, IPeople peopleService, string name, string description)
54 : base("GET", path, name, description)
55 {
56 m_PeopleService = peopleService;
57 }
58
59 public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
60 {
61 // Try to parse the texture ID from the request URL
62 NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
63 string names = query.GetOne("names");
64 string psize = query.GetOne("page_size");
65 string pnumber = query.GetOne("page");
66
67 if (m_PeopleService == null)
68 return FailureResponse(names, (int)System.Net.HttpStatusCode.InternalServerError, httpResponse);
69
70 if (string.IsNullOrEmpty(names) || names.Length < 3)
71 return FailureResponse(names, (int)System.Net.HttpStatusCode.BadRequest, httpResponse);
72
73 m_log.DebugFormat("[AVATAR PICKER SEARCH]: search for {0}", names);
74
75 int page_size = (string.IsNullOrEmpty(psize) ? 500 : Int32.Parse(psize));
76 int page_number = (string.IsNullOrEmpty(pnumber) ? 1 : Int32.Parse(pnumber));
77
78 // Full content request
79 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.OK;
80 //httpResponse.ContentLength = ??;
81 httpResponse.ContentType = "application/llsd+xml";
82
83 List<UserData> users = m_PeopleService.GetUserData(names, page_size, page_number);
84
85 LLSDAvatarPicker osdReply = new LLSDAvatarPicker();
86 osdReply.next_page_url = httpRequest.RawUrl;
87 foreach (UserData u in users)
88 osdReply.agents.Array.Add(ConvertUserData(u));
89
90 string reply = LLSDHelpers.SerialiseLLSDReply(osdReply);
91 return System.Text.Encoding.UTF8.GetBytes(reply);
92 }
93
94 private LLSDPerson ConvertUserData(UserData user)
95 {
96 LLSDPerson p = new LLSDPerson();
97 p.legacy_first_name = user.FirstName;
98 p.legacy_last_name = user.LastName;
99 p.display_name = user.FirstName + " " + user.LastName;
100 if (user.LastName.StartsWith("@"))
101 p.username = user.FirstName.ToLower() + user.LastName.ToLower();
102 else
103 p.username = user.FirstName.ToLower() + "." + user.LastName.ToLower();
104 p.id = user.Id;
105 p.is_display_name_default = false;
106 return p;
107 }
108
109 private byte[] FailureResponse(string names, int statuscode, IOSHttpResponse httpResponse)
110 {
111 m_log.Error("[AVATAR PICKER SEARCH]: Error searching for " + names);
112 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
113 return System.Text.Encoding.UTF8.GetBytes(string.Empty);
114 }
115 }
116} \ No newline at end of file
diff --git a/OpenSim/Capabilities/LLSDAvatarPicker.cs b/OpenSim/Capabilities/LLSDAvatarPicker.cs
new file mode 100644
index 0000000..d0b3f3a
--- /dev/null
+++ b/OpenSim/Capabilities/LLSDAvatarPicker.cs
@@ -0,0 +1,51 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenMetaverse;
29
30namespace OpenSim.Framework.Capabilities
31{
32 [OSDMap]
33 public class LLSDAvatarPicker
34 {
35 public string next_page_url;
36 // an array of LLSDPerson
37 public OSDArray agents = new OSDArray();
38 }
39
40 [OSDMap]
41 public class LLSDPerson
42 {
43 public string username;
44 public string display_name;
45 //'display_name_next_update':d"1970-01-01T00:00:00Z"
46 public string legacy_first_name;
47 public string legacy_last_name;
48 public UUID id;
49 public bool is_display_name_default;
50 }
51} \ No newline at end of file
diff --git a/OpenSim/Data/IProfilesData.cs b/OpenSim/Data/IProfilesData.cs
new file mode 100644
index 0000000..0de7f68
--- /dev/null
+++ b/OpenSim/Data/IProfilesData.cs
@@ -0,0 +1,56 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenMetaverse;
30using OpenMetaverse.StructuredData;
31using OpenSim.Framework;
32
33namespace OpenSim.Data
34{
35
36 public interface IProfilesData
37 {
38 OSDArray GetClassifiedRecords(UUID creatorId);
39 bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result);
40 bool DeleteClassifiedRecord(UUID recordId);
41 OSDArray GetAvatarPicks(UUID avatarId);
42 UserProfilePick GetPickInfo(UUID avatarId, UUID pickId);
43 bool UpdatePicksRecord(UserProfilePick pick);
44 bool DeletePicksRecord(UUID pickId);
45 bool GetAvatarNotes(ref UserProfileNotes note);
46 bool UpdateAvatarNotes(ref UserProfileNotes note, ref string result);
47 bool GetAvatarProperties(ref UserProfileProperties props, ref string result);
48 bool UpdateAvatarProperties(ref UserProfileProperties props, ref string result);
49 bool UpdateAvatarInterests(UserProfileProperties up, ref string result);
50 bool GetClassifiedInfo(ref UserClassifiedAdd ad, ref string result);
51 bool GetUserAppData(ref UserAppData props, ref string result);
52 bool SetUserAppData(UserAppData props, ref string result);
53 OSDArray GetUserImageAssets(UUID avatarId);
54 }
55}
56
diff --git a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
index b84c2a4..4549801 100644
--- a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
@@ -1153,7 +1153,7 @@ COMMIT
1153 1153
1154BEGIN TRANSACTION 1154BEGIN TRANSACTION
1155 1155
1156ALTER TABLE prims ADD COLUMN DynAttrs TEXT; 1156ALTER TABLE prims ADD DynAttrs TEXT;
1157 1157
1158COMMIT 1158COMMIT
1159 1159
@@ -1161,10 +1161,10 @@ COMMIT
1161 1161
1162BEGIN TRANSACTION 1162BEGIN TRANSACTION
1163 1163
1164ALTER TABLE prims ADD COLUMN `PhysicsShapeType` tinyint(4) NOT NULL default '0'; 1164ALTER TABLE prims ADD `PhysicsShapeType` tinyint(4) NOT NULL default '0';
1165ALTER TABLE prims ADD COLUMN `Density` double NOT NULL default '1000'; 1165ALTER TABLE prims ADD `Density` double NOT NULL default '1000';
1166ALTER TABLE prims ADD COLUMN `GravityModifier` double NOT NULL default '1'; 1166ALTER TABLE prims ADD `GravityModifier` double NOT NULL default '1';
1167ALTER TABLE prims ADD COLUMN `Friction` double NOT NULL default '0.6'; 1167ALTER TABLE prims ADD `Friction` double NOT NULL default '0.6';
1168ALTER TABLE prims ADD COLUMN `Restitution` double NOT NULL default '0.5'; 1168ALTER TABLE prims ADD `Restitution` double NOT NULL default '0.5';
1169 1169
1170COMMIT 1170COMMIT
diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs
index 21dd5aa..59cc22a 100644
--- a/OpenSim/Data/MySQL/MySQLAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLAssetData.cs
@@ -142,7 +142,8 @@ namespace OpenSim.Data.MySQL
142 } 142 }
143 catch (Exception e) 143 catch (Exception e)
144 { 144 {
145 m_log.Error("[ASSETS DB]: MySql failure fetching asset " + assetID + ": " + e.Message); 145 m_log.Error(
146 string.Format("[ASSETS DB]: MySql failure fetching asset {0}. Exception ", assetID), e);
146 } 147 }
147 } 148 }
148 } 149 }
@@ -243,10 +244,11 @@ namespace OpenSim.Data.MySQL
243 } 244 }
244 catch (Exception e) 245 catch (Exception e)
245 { 246 {
246 m_log.ErrorFormat( 247 m_log.Error(
247 "[ASSETS DB]: " + 248 string.Format(
248 "MySql failure updating access_time for asset {0} with name {1}" + Environment.NewLine + e.ToString() 249 "[ASSETS DB]: Failure updating access_time for asset {0} with name {1}. Exception ",
249 + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name); 250 asset.FullID, asset.Name),
251 e);
250 } 252 }
251 } 253 }
252 } 254 }
@@ -286,8 +288,8 @@ namespace OpenSim.Data.MySQL
286 } 288 }
287 catch (Exception e) 289 catch (Exception e)
288 { 290 {
289 m_log.ErrorFormat( 291 m_log.Error(
290 "[ASSETS DB]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString(), uuid); 292 string.Format("[ASSETS DB]: MySql failure fetching asset {0}. Exception ", uuid), e);
291 } 293 }
292 } 294 }
293 } 295 }
@@ -346,7 +348,11 @@ namespace OpenSim.Data.MySQL
346 } 348 }
347 catch (Exception e) 349 catch (Exception e)
348 { 350 {
349 m_log.Error("[ASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString()); 351 m_log.Error(
352 string.Format(
353 "[ASSETS DB]: MySql failure fetching asset set from {0}, count {1}. Exception ",
354 start, count),
355 e);
350 } 356 }
351 } 357 }
352 } 358 }
diff --git a/OpenSim/Data/MySQL/MySQLOfflineIMData.cs b/OpenSim/Data/MySQL/MySQLOfflineIMData.cs
index 252f358..bafd204 100644
--- a/OpenSim/Data/MySQL/MySQLOfflineIMData.cs
+++ b/OpenSim/Data/MySQL/MySQLOfflineIMData.cs
@@ -47,13 +47,10 @@ namespace OpenSim.Data.MySQL
47 47
48 public void DeleteOld() 48 public void DeleteOld()
49 { 49 {
50 uint now = (uint)Util.UnixTimeSinceEpoch();
51
52 using (MySqlCommand cmd = new MySqlCommand()) 50 using (MySqlCommand cmd = new MySqlCommand())
53 { 51 {
54 cmd.CommandText = String.Format("delete from {0} where TMStamp < ?tstamp", m_Realm); 52 cmd.CommandText = String.Format("delete from {0} where TMStamp < NOW() - INTERVAL 2 WEEK", m_Realm);
55 cmd.Parameters.AddWithValue("?tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old 53
56
57 ExecuteNonQuery(cmd); 54 ExecuteNonQuery(cmd);
58 } 55 }
59 56
diff --git a/OpenSim/Data/MySQL/MySQLUserProfilesData.cs b/OpenSim/Data/MySQL/MySQLUserProfilesData.cs
new file mode 100644
index 0000000..4c6c8e3
--- /dev/null
+++ b/OpenSim/Data/MySQL/MySQLUserProfilesData.cs
@@ -0,0 +1,1096 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Data;
30using System.Reflection;
31using OpenSim.Data;
32using OpenSim.Framework;
33using MySql.Data.MySqlClient;
34using OpenMetaverse;
35using OpenMetaverse.StructuredData;
36using log4net;
37
38namespace OpenSim.Data.MySQL
39{
40 public class UserProfilesData: IProfilesData
41 {
42 static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43
44 #region Properites
45 string ConnectionString
46 {
47 get; set;
48 }
49
50 protected object Lock
51 {
52 get; set;
53 }
54
55 protected virtual Assembly Assembly
56 {
57 get { return GetType().Assembly; }
58 }
59
60 #endregion Properties
61
62 #region class Member Functions
63 public UserProfilesData(string connectionString)
64 {
65 ConnectionString = connectionString;
66 Init();
67 }
68
69 void Init()
70 {
71 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
72 {
73 dbcon.Open();
74
75 Migration m = new Migration(dbcon, Assembly, "UserProfiles");
76 m.Update();
77 }
78 }
79 #endregion Member Functions
80
81 #region Classifieds Queries
82 /// <summary>
83 /// Gets the classified records.
84 /// </summary>
85 /// <returns>
86 /// Array of classified records
87 /// </returns>
88 /// <param name='creatorId'>
89 /// Creator identifier.
90 /// </param>
91 public OSDArray GetClassifiedRecords(UUID creatorId)
92 {
93 OSDArray data = new OSDArray();
94
95 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
96 {
97 string query = "SELECT classifieduuid, name FROM classifieds WHERE creatoruuid = ?Id";
98 dbcon.Open();
99 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
100 {
101 cmd.Parameters.AddWithValue("?Id", creatorId);
102 using( MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.Default))
103 {
104 if(reader.HasRows)
105 {
106 while (reader.Read())
107 {
108 OSDMap n = new OSDMap();
109 UUID Id = UUID.Zero;
110
111 string Name = null;
112 try
113 {
114 UUID.TryParse(Convert.ToString( reader["classifieduuid"]), out Id);
115 Name = Convert.ToString(reader["name"]);
116 }
117 catch (Exception e)
118 {
119 m_log.DebugFormat("[PROFILES_DATA]" +
120 ": UserAccount exception {0}", e.Message);
121 }
122 n.Add("classifieduuid", OSD.FromUUID(Id));
123 n.Add("name", OSD.FromString(Name));
124 data.Add(n);
125 }
126 }
127 }
128 }
129 }
130 return data;
131 }
132
133 public bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result)
134 {
135 string query = string.Empty;
136
137
138 query += "INSERT INTO classifieds (";
139 query += "`classifieduuid`,";
140 query += "`creatoruuid`,";
141 query += "`creationdate`,";
142 query += "`expirationdate`,";
143 query += "`category`,";
144 query += "`name`,";
145 query += "`description`,";
146 query += "`parceluuid`,";
147 query += "`parentestate`,";
148 query += "`snapshotuuid`,";
149 query += "`simname`,";
150 query += "`posglobal`,";
151 query += "`parcelname`,";
152 query += "`classifiedflags`,";
153 query += "`priceforlisting`) ";
154 query += "VALUES (";
155 query += "?ClassifiedId,";
156 query += "?CreatorId,";
157 query += "?CreatedDate,";
158 query += "?ExpirationDate,";
159 query += "?Category,";
160 query += "?Name,";
161 query += "?Description,";
162 query += "?ParcelId,";
163 query += "?ParentEstate,";
164 query += "?SnapshotId,";
165 query += "?SimName,";
166 query += "?GlobalPos,";
167 query += "?ParcelName,";
168 query += "?Flags,";
169 query += "?ListingPrice ) ";
170 query += "ON DUPLICATE KEY UPDATE ";
171 query += "category=?Category, ";
172 query += "expirationdate=?ExpirationDate, ";
173 query += "name=?Name, ";
174 query += "description=?Description, ";
175 query += "parentestate=?ParentEstate, ";
176 query += "posglobal=?GlobalPos, ";
177 query += "parcelname=?ParcelName, ";
178 query += "classifiedflags=?Flags, ";
179 query += "priceforlisting=?ListingPrice, ";
180 query += "snapshotuuid=?SnapshotId";
181
182 if(string.IsNullOrEmpty(ad.ParcelName))
183 ad.ParcelName = "Unknown";
184 if(ad.ParcelId == null)
185 ad.ParcelId = UUID.Zero;
186 if(string.IsNullOrEmpty(ad.Description))
187 ad.Description = "No Description";
188
189 DateTime epoch = new DateTime(1970, 1, 1);
190 DateTime now = DateTime.Now;
191 TimeSpan epochnow = now - epoch;
192 TimeSpan duration;
193 DateTime expiration;
194 TimeSpan epochexp;
195
196 if(ad.Flags == 2)
197 {
198 duration = new TimeSpan(7,0,0,0);
199 expiration = now.Add(duration);
200 epochexp = expiration - epoch;
201 }
202 else
203 {
204 duration = new TimeSpan(365,0,0,0);
205 expiration = now.Add(duration);
206 epochexp = expiration - epoch;
207 }
208 ad.CreationDate = (int)epochnow.TotalSeconds;
209 ad.ExpirationDate = (int)epochexp.TotalSeconds;
210
211 try
212 {
213 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
214 {
215 dbcon.Open();
216 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
217 {
218 cmd.Parameters.AddWithValue("?ClassifiedId", ad.ClassifiedId.ToString());
219 cmd.Parameters.AddWithValue("?CreatorId", ad.CreatorId.ToString());
220 cmd.Parameters.AddWithValue("?CreatedDate", ad.CreationDate.ToString());
221 cmd.Parameters.AddWithValue("?ExpirationDate", ad.ExpirationDate.ToString());
222 cmd.Parameters.AddWithValue("?Category", ad.Category.ToString());
223 cmd.Parameters.AddWithValue("?Name", ad.Name.ToString());
224 cmd.Parameters.AddWithValue("?Description", ad.Description.ToString());
225 cmd.Parameters.AddWithValue("?ParcelId", ad.ParcelId.ToString());
226 cmd.Parameters.AddWithValue("?ParentEstate", ad.ParentEstate.ToString());
227 cmd.Parameters.AddWithValue("?SnapshotId", ad.SnapshotId.ToString ());
228 cmd.Parameters.AddWithValue("?SimName", ad.SimName.ToString());
229 cmd.Parameters.AddWithValue("?GlobalPos", ad.GlobalPos.ToString());
230 cmd.Parameters.AddWithValue("?ParcelName", ad.ParcelName.ToString());
231 cmd.Parameters.AddWithValue("?Flags", ad.Flags.ToString());
232 cmd.Parameters.AddWithValue("?ListingPrice", ad.Price.ToString ());
233
234 cmd.ExecuteNonQuery();
235 }
236 }
237 }
238 catch (Exception e)
239 {
240 m_log.DebugFormat("[PROFILES_DATA]" +
241 ": ClassifiedesUpdate exception {0}", e.Message);
242 result = e.Message;
243 return false;
244 }
245 return true;
246 }
247
248 public bool DeleteClassifiedRecord(UUID recordId)
249 {
250 string query = string.Empty;
251
252 query += "DELETE FROM classifieds WHERE ";
253 query += "classifieduuid = ?ClasifiedId";
254
255 try
256 {
257 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
258 {
259 dbcon.Open();
260
261 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
262 {
263 cmd.Parameters.AddWithValue("?ClassifiedId", recordId.ToString());
264
265 lock(Lock)
266 {
267 cmd.ExecuteNonQuery();
268 }
269 }
270 }
271 }
272 catch (Exception e)
273 {
274 m_log.DebugFormat("[PROFILES_DATA]" +
275 ": DeleteClassifiedRecord exception {0}", e.Message);
276 return false;
277 }
278 return true;
279 }
280
281 public bool GetClassifiedInfo(ref UserClassifiedAdd ad, ref string result)
282 {
283 string query = string.Empty;
284
285 query += "SELECT * FROM classifieds WHERE ";
286 query += "classifieduuid = ?AdId";
287
288 try
289 {
290 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
291 {
292 dbcon.Open();
293 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
294 {
295 cmd.Parameters.AddWithValue("?AdId", ad.ClassifiedId.ToString());
296
297 using (MySqlDataReader reader = cmd.ExecuteReader())
298 {
299 if(reader.Read ())
300 {
301 ad.CreatorId = new UUID(reader.GetGuid("creatoruuid"));
302 ad.ParcelId = new UUID(reader.GetGuid("parceluuid"));
303 ad.SnapshotId = new UUID(reader.GetGuid("snapshotuuid"));
304 ad.CreationDate = Convert.ToInt32(reader["creationdate"]);
305 ad.ExpirationDate = Convert.ToInt32(reader["expirationdate"]);
306 ad.ParentEstate = Convert.ToInt32(reader["parentestate"]);
307 ad.Flags = (byte)reader.GetUInt32("classifiedflags");
308 ad.Category = reader.GetInt32("category");
309 ad.Price = reader.GetInt16("priceforlisting");
310 ad.Name = reader.GetString("name");
311 ad.Description = reader.GetString("description");
312 ad.SimName = reader.GetString("simname");
313 ad.GlobalPos = reader.GetString("posglobal");
314 ad.ParcelName = reader.GetString("parcelname");
315
316 }
317 }
318 }
319 dbcon.Close();
320 }
321 }
322 catch (Exception e)
323 {
324 m_log.DebugFormat("[PROFILES_DATA]" +
325 ": GetPickInfo exception {0}", e.Message);
326 }
327 return true;
328 }
329 #endregion Classifieds Queries
330
331 #region Picks Queries
332 public OSDArray GetAvatarPicks(UUID avatarId)
333 {
334 string query = string.Empty;
335
336 query += "SELECT `pickuuid`,`name` FROM userpicks WHERE ";
337 query += "creatoruuid = ?Id";
338 OSDArray data = new OSDArray();
339
340 try
341 {
342 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
343 {
344 dbcon.Open();
345 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
346 {
347 cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
348
349 using (MySqlDataReader reader = cmd.ExecuteReader())
350 {
351 if(reader.HasRows)
352 {
353 while (reader.Read())
354 {
355 OSDMap record = new OSDMap();
356
357 record.Add("pickuuid",OSD.FromString((string)reader["pickuuid"]));
358 record.Add("name",OSD.FromString((string)reader["name"]));
359 data.Add(record);
360 }
361 }
362 }
363 }
364 }
365 }
366 catch (Exception e)
367 {
368 m_log.DebugFormat("[PROFILES_DATA]" +
369 ": GetAvatarPicks exception {0}", e.Message);
370 }
371 return data;
372 }
373
374 public UserProfilePick GetPickInfo(UUID avatarId, UUID pickId)
375 {
376 string query = string.Empty;
377 UserProfilePick pick = new UserProfilePick();
378
379 query += "SELECT * FROM userpicks WHERE ";
380 query += "creatoruuid = ?CreatorId AND ";
381 query += "pickuuid = ?PickId";
382
383 try
384 {
385 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
386 {
387 dbcon.Open();
388 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
389 {
390 cmd.Parameters.AddWithValue("?CreatorId", avatarId.ToString());
391 cmd.Parameters.AddWithValue("?PickId", pickId.ToString());
392
393 using (MySqlDataReader reader = cmd.ExecuteReader())
394 {
395 if(reader.HasRows)
396 {
397 reader.Read();
398
399 string description = (string)reader["description"];
400
401 if (string.IsNullOrEmpty(description))
402 description = "No description given.";
403
404 UUID.TryParse((string)reader["pickuuid"], out pick.PickId);
405 UUID.TryParse((string)reader["creatoruuid"], out pick.CreatorId);
406 UUID.TryParse((string)reader["parceluuid"], out pick.ParcelId);
407 UUID.TryParse((string)reader["snapshotuuid"], out pick.SnapshotId);
408 pick.GlobalPos = (string)reader["posglobal"];
409 bool.TryParse((string)reader["toppick"], out pick.TopPick);
410 bool.TryParse((string)reader["enabled"], out pick.Enabled);
411 pick.Name = (string)reader["name"];
412 pick.Desc = description;
413 pick.User = (string)reader["user"];
414 pick.OriginalName = (string)reader["originalname"];
415 pick.SimName = (string)reader["simname"];
416 pick.SortOrder = (int)reader["sortorder"];
417 }
418 }
419 }
420 dbcon.Close();
421 }
422 }
423 catch (Exception e)
424 {
425 m_log.DebugFormat("[PROFILES_DATA]" +
426 ": GetPickInfo exception {0}", e.Message);
427 }
428 return pick;
429 }
430
431 public bool UpdatePicksRecord(UserProfilePick pick)
432 {
433 string query = string.Empty;
434
435 query += "INSERT INTO userpicks VALUES (";
436 query += "?PickId,";
437 query += "?CreatorId,";
438 query += "?TopPick,";
439 query += "?ParcelId,";
440 query += "?Name,";
441 query += "?Desc,";
442 query += "?SnapshotId,";
443 query += "?User,";
444 query += "?Original,";
445 query += "?SimName,";
446 query += "?GlobalPos,";
447 query += "?SortOrder,";
448 query += "?Enabled) ";
449 query += "ON DUPLICATE KEY UPDATE ";
450 query += "parceluuid=?ParcelId,";
451 query += "name=?Name,";
452 query += "description=?Desc,";
453 query += "snapshotuuid=?SnapshotId,";
454 query += "pickuuid=?PickId,";
455 query += "posglobal=?GlobalPos";
456
457 try
458 {
459 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
460 {
461 dbcon.Open();
462 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
463 {
464 cmd.Parameters.AddWithValue("?PickId", pick.PickId.ToString());
465 cmd.Parameters.AddWithValue("?CreatorId", pick.CreatorId.ToString());
466 cmd.Parameters.AddWithValue("?TopPick", pick.TopPick.ToString());
467 cmd.Parameters.AddWithValue("?ParcelId", pick.ParcelId.ToString());
468 cmd.Parameters.AddWithValue("?Name", pick.Name.ToString());
469 cmd.Parameters.AddWithValue("?Desc", pick.Desc.ToString());
470 cmd.Parameters.AddWithValue("?SnapshotId", pick.SnapshotId.ToString());
471 cmd.Parameters.AddWithValue("?User", pick.User.ToString());
472 cmd.Parameters.AddWithValue("?Original", pick.OriginalName.ToString());
473 cmd.Parameters.AddWithValue("?SimName",pick.SimName.ToString());
474 cmd.Parameters.AddWithValue("?GlobalPos", pick.GlobalPos);
475 cmd.Parameters.AddWithValue("?SortOrder", pick.SortOrder.ToString ());
476 cmd.Parameters.AddWithValue("?Enabled", pick.Enabled.ToString());
477
478 cmd.ExecuteNonQuery();
479 }
480 }
481 }
482 catch (Exception e)
483 {
484 m_log.DebugFormat("[PROFILES_DATA]" +
485 ": UpdateAvatarNotes exception {0}", e.Message);
486 return false;
487 }
488 return true;
489 }
490
491 public bool DeletePicksRecord(UUID pickId)
492 {
493 string query = string.Empty;
494
495 query += "DELETE FROM userpicks WHERE ";
496 query += "pickuuid = ?PickId";
497
498 try
499 {
500 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
501 {
502 dbcon.Open();
503
504 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
505 {
506 cmd.Parameters.AddWithValue("?PickId", pickId.ToString());
507
508 cmd.ExecuteNonQuery();
509 }
510 }
511 }
512 catch (Exception e)
513 {
514 m_log.DebugFormat("[PROFILES_DATA]" +
515 ": DeleteUserPickRecord exception {0}", e.Message);
516 return false;
517 }
518 return true;
519 }
520 #endregion Picks Queries
521
522 #region Avatar Notes Queries
523 public bool GetAvatarNotes(ref UserProfileNotes notes)
524 { // WIP
525 string query = string.Empty;
526
527 query += "SELECT `notes` FROM usernotes WHERE ";
528 query += "useruuid = ?Id AND ";
529 query += "targetuuid = ?TargetId";
530 OSDArray data = new OSDArray();
531
532 try
533 {
534 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
535 {
536 dbcon.Open();
537 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
538 {
539 cmd.Parameters.AddWithValue("?Id", notes.UserId.ToString());
540 cmd.Parameters.AddWithValue("?TargetId", notes.TargetId.ToString());
541
542 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
543 {
544 if(reader.HasRows)
545 {
546 reader.Read();
547 notes.Notes = OSD.FromString((string)reader["notes"]);
548 }
549 }
550 }
551 }
552 }
553 catch (Exception e)
554 {
555 m_log.DebugFormat("[PROFILES_DATA]" +
556 ": GetAvatarNotes exception {0}", e.Message);
557 }
558 return true;
559 }
560
561 public bool UpdateAvatarNotes(ref UserProfileNotes note, ref string result)
562 {
563 string query = string.Empty;
564 bool remove;
565
566 if(string.IsNullOrEmpty(note.Notes))
567 {
568 remove = true;
569 query += "DELETE FROM usernotes WHERE ";
570 query += "useruuid=?UserId AND ";
571 query += "targetuuid=?TargetId";
572 }
573 else
574 {
575 remove = false;
576 query += "INSERT INTO usernotes VALUES ( ";
577 query += "?UserId,";
578 query += "?TargetId,";
579 query += "?Notes )";
580 query += "ON DUPLICATE KEY ";
581 query += "UPDATE ";
582 query += "notes=?Notes";
583 }
584
585 try
586 {
587 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
588 {
589 dbcon.Open();
590 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
591 {
592 if(!remove)
593 cmd.Parameters.AddWithValue("?Notes", note.Notes);
594 cmd.Parameters.AddWithValue("?TargetId", note.TargetId.ToString ());
595 cmd.Parameters.AddWithValue("?UserId", note.UserId.ToString());
596
597 cmd.ExecuteNonQuery();
598 }
599 }
600 }
601 catch (Exception e)
602 {
603 m_log.DebugFormat("[PROFILES_DATA]" +
604 ": UpdateAvatarNotes exception {0}", e.Message);
605 return false;
606 }
607 return true;
608
609 }
610 #endregion Avatar Notes Queries
611
612 #region Avatar Properties
613 public bool GetAvatarProperties(ref UserProfileProperties props, ref string result)
614 {
615 string query = string.Empty;
616
617 query += "SELECT * FROM userprofile WHERE ";
618 query += "useruuid = ?Id";
619
620 try
621 {
622 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
623 {
624 dbcon.Open();
625 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
626 {
627 cmd.Parameters.AddWithValue("?Id", props.UserId.ToString());
628
629 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
630 {
631 if(reader.HasRows)
632 {
633 m_log.DebugFormat("[PROFILES_DATA]" +
634 ": Getting data for {0}.", props.UserId);
635 reader.Read();
636 props.WebUrl = (string)reader["profileURL"];
637 UUID.TryParse((string)reader["profileImage"], out props.ImageId);
638 props.AboutText = (string)reader["profileAboutText"];
639 UUID.TryParse((string)reader["profileFirstImage"], out props.FirstLifeImageId);
640 props.FirstLifeText = (string)reader["profileFirstText"];
641 UUID.TryParse((string)reader["profilePartner"], out props.PartnerId);
642 props.WantToMask = (int)reader["profileWantToMask"];
643 props.WantToText = (string)reader["profileWantToText"];
644 props.SkillsMask = (int)reader["profileSkillsMask"];
645 props.SkillsText = (string)reader["profileSkillsText"];
646 props.Language = (string)reader["profileLanguages"];
647 }
648 else
649 {
650 m_log.DebugFormat("[PROFILES_DATA]" +
651 ": No data for {0}", props.UserId);
652
653 props.WebUrl = string.Empty;
654 props.ImageId = UUID.Zero;
655 props.AboutText = string.Empty;
656 props.FirstLifeImageId = UUID.Zero;
657 props.FirstLifeText = string.Empty;
658 props.PartnerId = UUID.Zero;
659 props.WantToMask = 0;
660 props.WantToText = string.Empty;
661 props.SkillsMask = 0;
662 props.SkillsText = string.Empty;
663 props.Language = string.Empty;
664 props.PublishProfile = false;
665 props.PublishMature = false;
666
667 query = "INSERT INTO userprofile (";
668 query += "useruuid, ";
669 query += "profilePartner, ";
670 query += "profileAllowPublish, ";
671 query += "profileMaturePublish, ";
672 query += "profileURL, ";
673 query += "profileWantToMask, ";
674 query += "profileWantToText, ";
675 query += "profileSkillsMask, ";
676 query += "profileSkillsText, ";
677 query += "profileLanguages, ";
678 query += "profileImage, ";
679 query += "profileAboutText, ";
680 query += "profileFirstImage, ";
681 query += "profileFirstText) VALUES (";
682 query += "?userId, ";
683 query += "?profilePartner, ";
684 query += "?profileAllowPublish, ";
685 query += "?profileMaturePublish, ";
686 query += "?profileURL, ";
687 query += "?profileWantToMask, ";
688 query += "?profileWantToText, ";
689 query += "?profileSkillsMask, ";
690 query += "?profileSkillsText, ";
691 query += "?profileLanguages, ";
692 query += "?profileImage, ";
693 query += "?profileAboutText, ";
694 query += "?profileFirstImage, ";
695 query += "?profileFirstText)";
696
697 dbcon.Close();
698 dbcon.Open();
699
700 using (MySqlCommand put = new MySqlCommand(query, dbcon))
701 {
702 put.Parameters.AddWithValue("?userId", props.UserId.ToString());
703 put.Parameters.AddWithValue("?profilePartner", props.PartnerId.ToString());
704 put.Parameters.AddWithValue("?profileAllowPublish", props.PublishProfile);
705 put.Parameters.AddWithValue("?profileMaturePublish", props.PublishMature);
706 put.Parameters.AddWithValue("?profileURL", props.WebUrl);
707 put.Parameters.AddWithValue("?profileWantToMask", props.WantToMask);
708 put.Parameters.AddWithValue("?profileWantToText", props.WantToText);
709 put.Parameters.AddWithValue("?profileSkillsMask", props.SkillsMask);
710 put.Parameters.AddWithValue("?profileSkillsText", props.SkillsText);
711 put.Parameters.AddWithValue("?profileLanguages", props.Language);
712 put.Parameters.AddWithValue("?profileImage", props.ImageId.ToString());
713 put.Parameters.AddWithValue("?profileAboutText", props.AboutText);
714 put.Parameters.AddWithValue("?profileFirstImage", props.FirstLifeImageId.ToString());
715 put.Parameters.AddWithValue("?profileFirstText", props.FirstLifeText);
716
717 put.ExecuteNonQuery();
718 }
719 }
720 }
721 }
722 }
723 }
724 catch (Exception e)
725 {
726 m_log.DebugFormat("[PROFILES_DATA]" +
727 ": Requst properties exception {0}", e.Message);
728 result = e.Message;
729 return false;
730 }
731 return true;
732 }
733
734 public bool UpdateAvatarProperties(ref UserProfileProperties props, ref string result)
735 {
736 string query = string.Empty;
737
738 query += "UPDATE userprofile SET ";
739 query += "profilePartner=?profilePartner, ";
740 query += "profileURL=?profileURL, ";
741 query += "profileImage=?image, ";
742 query += "profileAboutText=?abouttext,";
743 query += "profileFirstImage=?firstlifeimage,";
744 query += "profileFirstText=?firstlifetext ";
745 query += "WHERE useruuid=?uuid";
746
747 try
748 {
749 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
750 {
751 dbcon.Open();
752 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
753 {
754 cmd.Parameters.AddWithValue("?profileURL", props.WebUrl);
755 cmd.Parameters.AddWithValue("?profilePartner", props.PartnerId.ToString());
756 cmd.Parameters.AddWithValue("?image", props.ImageId.ToString());
757 cmd.Parameters.AddWithValue("?abouttext", props.AboutText);
758 cmd.Parameters.AddWithValue("?firstlifeimage", props.FirstLifeImageId.ToString());
759 cmd.Parameters.AddWithValue("?firstlifetext", props.FirstLifeText);
760 cmd.Parameters.AddWithValue("?uuid", props.UserId.ToString());
761
762 cmd.ExecuteNonQuery();
763 }
764 }
765 }
766 catch (Exception e)
767 {
768 m_log.DebugFormat("[PROFILES_DATA]" +
769 ": AgentPropertiesUpdate exception {0}", e.Message);
770
771 return false;
772 }
773 return true;
774 }
775 #endregion Avatar Properties
776
777 #region Avatar Interests
778 public bool UpdateAvatarInterests(UserProfileProperties up, ref string result)
779 {
780 string query = string.Empty;
781
782 query += "UPDATE userprofile SET ";
783 query += "profileWantToMask=?WantMask, ";
784 query += "profileWantToText=?WantText,";
785 query += "profileSkillsMask=?SkillsMask,";
786 query += "profileSkillsText=?SkillsText, ";
787 query += "profileLanguages=?Languages ";
788 query += "WHERE useruuid=?uuid";
789
790 try
791 {
792 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
793 {
794 dbcon.Open();
795 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
796 {
797 cmd.Parameters.AddWithValue("?WantMask", up.WantToMask);
798 cmd.Parameters.AddWithValue("?WantText", up.WantToText);
799 cmd.Parameters.AddWithValue("?SkillsMask", up.SkillsMask);
800 cmd.Parameters.AddWithValue("?SkillsText", up.SkillsText);
801 cmd.Parameters.AddWithValue("?Languages", up.Language);
802 cmd.Parameters.AddWithValue("?uuid", up.UserId.ToString());
803
804 cmd.ExecuteNonQuery();
805 }
806 }
807 }
808 catch (Exception e)
809 {
810 m_log.DebugFormat("[PROFILES_DATA]" +
811 ": AgentInterestsUpdate exception {0}", e.Message);
812 result = e.Message;
813 return false;
814 }
815 return true;
816 }
817 #endregion Avatar Interests
818
819 public OSDArray GetUserImageAssets(UUID avatarId)
820 {
821 OSDArray data = new OSDArray();
822 string query = "SELECT `snapshotuuid` FROM {0} WHERE `creatoruuid` = ?Id";
823
824 // Get classified image assets
825
826
827 try
828 {
829 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
830 {
831 dbcon.Open();
832
833 using (MySqlCommand cmd = new MySqlCommand(string.Format (query,"`classifieds`"), dbcon))
834 {
835 cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
836
837 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
838 {
839 if(reader.HasRows)
840 {
841 while (reader.Read())
842 {
843 data.Add(new OSDString((string)reader["snapshotuuid"].ToString ()));
844 }
845 }
846 }
847 }
848
849 dbcon.Close();
850 dbcon.Open();
851
852 using (MySqlCommand cmd = new MySqlCommand(string.Format (query,"`userpicks`"), dbcon))
853 {
854 cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
855
856 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
857 {
858 if(reader.HasRows)
859 {
860 while (reader.Read())
861 {
862 data.Add(new OSDString((string)reader["snapshotuuid"].ToString ()));
863 }
864 }
865 }
866 }
867
868 dbcon.Close();
869 dbcon.Open();
870
871 query = "SELECT `profileImage`, `profileFirstImage` FROM `userprofile` WHERE `useruuid` = ?Id";
872
873 using (MySqlCommand cmd = new MySqlCommand(string.Format (query,"`userpicks`"), dbcon))
874 {
875 cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
876
877 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
878 {
879 if(reader.HasRows)
880 {
881 while (reader.Read())
882 {
883 data.Add(new OSDString((string)reader["profileImage"].ToString ()));
884 data.Add(new OSDString((string)reader["profileFirstImage"].ToString ()));
885 }
886 }
887 }
888 }
889 }
890 }
891 catch (Exception e)
892 {
893 m_log.DebugFormat("[PROFILES_DATA]" +
894 ": GetAvatarNotes exception {0}", e.Message);
895 }
896 return data;
897 }
898
899 #region User Preferences
900 public OSDArray GetUserPreferences(UUID avatarId)
901 {
902 string query = string.Empty;
903
904 query += "SELECT imviaemail,visible,email FROM ";
905 query += "usersettings WHERE ";
906 query += "useruuid = ?Id";
907
908 OSDArray data = new OSDArray();
909
910 try
911 {
912 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
913 {
914 dbcon.Open();
915 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
916 {
917 cmd.Parameters.AddWithValue("?Id", avatarId.ToString());
918
919 using (MySqlDataReader reader = cmd.ExecuteReader())
920 {
921 if(reader.HasRows)
922 {
923 reader.Read();
924 OSDMap record = new OSDMap();
925
926 record.Add("imviaemail",OSD.FromString((string)reader["imviaemail"]));
927 record.Add("visible",OSD.FromString((string)reader["visible"]));
928 record.Add("email",OSD.FromString((string)reader["email"]));
929 data.Add(record);
930 }
931 else
932 {
933 using (MySqlCommand put = new MySqlCommand(query, dbcon))
934 {
935 query = "INSERT INTO usersettings VALUES ";
936 query += "(?Id,'false','false', '')";
937
938 lock(Lock)
939 {
940 put.ExecuteNonQuery();
941 }
942 }
943 }
944 }
945 }
946 }
947 }
948 catch (Exception e)
949 {
950 m_log.DebugFormat("[PROFILES_DATA]" +
951 ": Get preferences exception {0}", e.Message);
952 }
953 return data;
954 }
955
956 public bool UpdateUserPreferences(bool emailIm, bool visible, UUID avatarId )
957 {
958 string query = string.Empty;
959
960 query += "UPDATE userpsettings SET ";
961 query += "imviaemail=?ImViaEmail, ";
962 query += "visible=?Visible,";
963 query += "WHERE useruuid=?uuid";
964
965 try
966 {
967 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
968 {
969 dbcon.Open();
970 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
971 {
972 cmd.Parameters.AddWithValue("?ImViaEmail", emailIm.ToString().ToLower ());
973 cmd.Parameters.AddWithValue("?WantText", visible.ToString().ToLower ());
974 cmd.Parameters.AddWithValue("?uuid", avatarId.ToString());
975
976 lock(Lock)
977 {
978 cmd.ExecuteNonQuery();
979 }
980 }
981 }
982 }
983 catch (Exception e)
984 {
985 m_log.DebugFormat("[PROFILES_DATA]" +
986 ": AgentInterestsUpdate exception {0}", e.Message);
987 return false;
988 }
989 return true;
990 }
991 #endregion User Preferences
992
993 #region Integration
994 public bool GetUserAppData(ref UserAppData props, ref string result)
995 {
996 string query = string.Empty;
997
998 query += "SELECT * FROM `userdata` WHERE ";
999 query += "UserId = ?Id AND ";
1000 query += "TagId = ?TagId";
1001
1002 try
1003 {
1004 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
1005 {
1006 dbcon.Open();
1007 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
1008 {
1009 cmd.Parameters.AddWithValue("?Id", props.UserId.ToString());
1010 cmd.Parameters.AddWithValue ("?TagId", props.TagId.ToString());
1011
1012 using (MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
1013 {
1014 if(reader.HasRows)
1015 {
1016 reader.Read();
1017 props.DataKey = (string)reader["DataKey"];
1018 props.DataVal = (string)reader["DataVal"];
1019 }
1020 else
1021 {
1022 query += "INSERT INTO userdata VALUES ( ";
1023 query += "?UserId,";
1024 query += "?TagId,";
1025 query += "?DataKey,";
1026 query += "?DataVal) ";
1027
1028 using (MySqlCommand put = new MySqlCommand(query, dbcon))
1029 {
1030 put.Parameters.AddWithValue("?Id", props.UserId.ToString());
1031 put.Parameters.AddWithValue("?TagId", props.TagId.ToString());
1032 put.Parameters.AddWithValue("?DataKey", props.DataKey.ToString());
1033 put.Parameters.AddWithValue("?DataVal", props.DataVal.ToString());
1034
1035 lock(Lock)
1036 {
1037 put.ExecuteNonQuery();
1038 }
1039 }
1040 }
1041 }
1042 }
1043 }
1044 }
1045 catch (Exception e)
1046 {
1047 m_log.DebugFormat("[PROFILES_DATA]" +
1048 ": Requst application data exception {0}", e.Message);
1049 result = e.Message;
1050 return false;
1051 }
1052 return true;
1053 }
1054
1055 public bool SetUserAppData(UserAppData props, ref string result)
1056 {
1057 string query = string.Empty;
1058
1059 query += "UPDATE userdata SET ";
1060 query += "TagId = ?TagId, ";
1061 query += "DataKey = ?DataKey, ";
1062 query += "DataVal = ?DataVal WHERE ";
1063 query += "UserId = ?UserId AND ";
1064 query += "TagId = ?TagId";
1065
1066 try
1067 {
1068 using (MySqlConnection dbcon = new MySqlConnection(ConnectionString))
1069 {
1070 dbcon.Open();
1071 using (MySqlCommand cmd = new MySqlCommand(query, dbcon))
1072 {
1073 cmd.Parameters.AddWithValue("?UserId", props.UserId.ToString());
1074 cmd.Parameters.AddWithValue("?TagId", props.TagId.ToString ());
1075 cmd.Parameters.AddWithValue("?DataKey", props.DataKey.ToString ());
1076 cmd.Parameters.AddWithValue("?DataVal", props.DataKey.ToString ());
1077
1078 lock(Lock)
1079 {
1080 cmd.ExecuteNonQuery();
1081 }
1082 }
1083 }
1084 }
1085 catch (Exception e)
1086 {
1087 m_log.DebugFormat("[PROFILES_DATA]" +
1088 ": SetUserData exception {0}", e.Message);
1089 return false;
1090 }
1091 return true;
1092 }
1093 #endregion Integration
1094 }
1095}
1096
diff --git a/OpenSim/Data/MySQL/Resources/EstateStore.migrations b/OpenSim/Data/MySQL/Resources/EstateStore.migrations
index df82a2e..2d1c2b5 100644
--- a/OpenSim/Data/MySQL/Resources/EstateStore.migrations
+++ b/OpenSim/Data/MySQL/Resources/EstateStore.migrations
@@ -77,5 +77,11 @@ BEGIN;
77ALTER TABLE estate_settings AUTO_INCREMENT = 100; 77ALTER TABLE estate_settings AUTO_INCREMENT = 100;
78COMMIT; 78COMMIT;
79 79
80:VERSION 33 #---------------------
80 81
82BEGIN;
83ALTER TABLE estate_settings ADD COLUMN `AllowLandmark` tinyint(4) NOT NULL default '1';
84ALTER TABLE estate_settings ADD COLUMN `AllowParcelChanges` tinyint(4) NOT NULL default '1';
85ALTER TABLE estate_settings ADD COLUMN `AllowSetHome` tinyint(4) NOT NULL default '1';
86COMMIT;
81 87
diff --git a/OpenSim/Data/MySQL/Resources/UserProfiles.migrations b/OpenSim/Data/MySQL/Resources/UserProfiles.migrations
new file mode 100644
index 0000000..c29f1ab
--- /dev/null
+++ b/OpenSim/Data/MySQL/Resources/UserProfiles.migrations
@@ -0,0 +1,83 @@
1:VERSION 1 # -------------------------------
2
3begin;
4
5CREATE TABLE IF NOT EXISTS `classifieds` (
6 `classifieduuid` char(36) NOT NULL,
7 `creatoruuid` char(36) NOT NULL,
8 `creationdate` int(20) NOT NULL,
9 `expirationdate` int(20) NOT NULL,
10 `category` varchar(20) NOT NULL,
11 `name` varchar(255) NOT NULL,
12 `description` text NOT NULL,
13 `parceluuid` char(36) NOT NULL,
14 `parentestate` int(11) NOT NULL,
15 `snapshotuuid` char(36) NOT NULL,
16 `simname` varchar(255) NOT NULL,
17 `posglobal` varchar(255) NOT NULL,
18 `parcelname` varchar(255) NOT NULL,
19 `classifiedflags` int(8) NOT NULL,
20 `priceforlisting` int(5) NOT NULL,
21 PRIMARY KEY (`classifieduuid`)
22) ENGINE=InnoDB DEFAULT CHARSET=latin1;
23
24
25CREATE TABLE IF NOT EXISTS `usernotes` (
26 `useruuid` varchar(36) NOT NULL,
27 `targetuuid` varchar(36) NOT NULL,
28 `notes` text NOT NULL,
29 UNIQUE KEY `useruuid` (`useruuid`,`targetuuid`)
30) ENGINE=MyISAM DEFAULT CHARSET=latin1;
31
32
33CREATE TABLE IF NOT EXISTS `userpicks` (
34 `pickuuid` varchar(36) NOT NULL,
35 `creatoruuid` varchar(36) NOT NULL,
36 `toppick` enum('true','false') NOT NULL,
37 `parceluuid` varchar(36) NOT NULL,
38 `name` varchar(255) NOT NULL,
39 `description` text NOT NULL,
40 `snapshotuuid` varchar(36) NOT NULL,
41 `user` varchar(255) NOT NULL,
42 `originalname` varchar(255) NOT NULL,
43 `simname` varchar(255) NOT NULL,
44 `posglobal` varchar(255) NOT NULL,
45 `sortorder` int(2) NOT NULL,
46 `enabled` enum('true','false') NOT NULL,
47 PRIMARY KEY (`pickuuid`)
48) ENGINE=MyISAM DEFAULT CHARSET=latin1;
49
50
51CREATE TABLE IF NOT EXISTS `userprofile` (
52 `useruuid` varchar(36) NOT NULL,
53 `profilePartner` varchar(36) NOT NULL,
54 `profileAllowPublish` binary(1) NOT NULL,
55 `profileMaturePublish` binary(1) NOT NULL,
56 `profileURL` varchar(255) NOT NULL,
57 `profileWantToMask` int(3) NOT NULL,
58 `profileWantToText` text NOT NULL,
59 `profileSkillsMask` int(3) NOT NULL,
60 `profileSkillsText` text NOT NULL,
61 `profileLanguages` text NOT NULL,
62 `profileImage` varchar(36) NOT NULL,
63 `profileAboutText` text NOT NULL,
64 `profileFirstImage` varchar(36) NOT NULL,
65 `profileFirstText` text NOT NULL,
66 PRIMARY KEY (`useruuid`)
67) ENGINE=MyISAM DEFAULT CHARSET=latin1;
68
69commit;
70
71:VERSION 2 # -------------------------------
72
73begin;
74CREATE TABLE IF NOT EXISTS `userdata` (
75 `UserId` char(36) NOT NULL,
76 `TagId` varchar(64) NOT NULL,
77 `DataKey` varchar(255),
78 `DataVal` varchar(255),
79 PRIMARY KEY (`UserId`,`TagId`)
80) ENGINE=MyISAM DEFAULT CHARSET=latin1;
81
82commit;
83
diff --git a/OpenSim/Data/SQLite/Resources/EstateStore.migrations b/OpenSim/Data/SQLite/Resources/EstateStore.migrations
index 62f6464..0aec49b 100644
--- a/OpenSim/Data/SQLite/Resources/EstateStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/EstateStore.migrations
@@ -86,3 +86,12 @@ begin;
86alter table estate_settings add column DenyMinors tinyint not null default 0; 86alter table estate_settings add column DenyMinors tinyint not null default 0;
87 87
88commit; 88commit;
89
90:VERSION 9
91
92begin;
93alter table estate_settings add column AllowLandmark tinyint not null default '1';
94alter table estate_settings add column AllowParcelChanges tinyint not null default '1';
95alter table estate_settings add column AllowSetHome tinyint not null default '1';
96commit;
97
diff --git a/OpenSim/Framework/Animation.cs b/OpenSim/Framework/Animation.cs
index 232f5a1..8bdf8f4 100644
--- a/OpenSim/Framework/Animation.cs
+++ b/OpenSim/Framework/Animation.cs
@@ -120,5 +120,25 @@ namespace OpenSim.Framework
120 sequenceNum = args["seq_num"].AsInteger(); 120 sequenceNum = args["seq_num"].AsInteger();
121 } 121 }
122 122
123 public override bool Equals(object obj)
124 {
125 Animation other = obj as Animation;
126 if (other != null)
127 {
128 return (other.AnimID == this.AnimID
129 && other.SequenceNum == this.SequenceNum
130 && other.ObjectID == this.ObjectID);
131 }
132
133 return base.Equals(obj);
134 }
135
136 public override string ToString()
137 {
138 return "AnimID=" + AnimID.ToString()
139 + "/seq=" + SequenceNum.ToString()
140 + "/objID=" + ObjectID.ToString();
141 }
142
123 } 143 }
124} 144}
diff --git a/OpenSim/Framework/CachedTextureEventArg.cs b/OpenSim/Framework/CachedTextureEventArg.cs
new file mode 100644
index 0000000..239fc56
--- /dev/null
+++ b/OpenSim/Framework/CachedTextureEventArg.cs
@@ -0,0 +1,46 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Text;
30using OpenMetaverse;
31
32namespace OpenSim.Framework
33{
34 public class CachedTextureRequestArg
35 {
36 public int BakedTextureIndex;
37 public UUID WearableHashID;
38 }
39
40 public class CachedTextureResponseArg
41 {
42 public int BakedTextureIndex;
43 public UUID BakedTextureID;
44 public String HostName;
45 }
46}
diff --git a/OpenSim/Framework/Console/LocalConsole.cs b/OpenSim/Framework/Console/LocalConsole.cs
index d41481f..a967db6 100644
--- a/OpenSim/Framework/Console/LocalConsole.cs
+++ b/OpenSim/Framework/Console/LocalConsole.cs
@@ -426,6 +426,21 @@ namespace OpenSim.Framework.Console
426 System.Console.Write("{0}", prompt); 426 System.Console.Write("{0}", prompt);
427 427
428 break; 428 break;
429 case ConsoleKey.Delete:
430 if (m_cursorXPosition == m_commandLine.Length)
431 break;
432
433 m_commandLine.Remove(m_cursorXPosition, 1);
434
435 SetCursorLeft(0);
436 m_cursorYPosition = SetCursorTop(m_cursorYPosition);
437
438 if (m_echo)
439 System.Console.Write("{0}{1} ", prompt, m_commandLine);
440 else
441 System.Console.Write("{0}", prompt);
442
443 break;
429 case ConsoleKey.End: 444 case ConsoleKey.End:
430 m_cursorXPosition = m_commandLine.Length; 445 m_cursorXPosition = m_commandLine.Length;
431 break; 446 break;
diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs
index e03750b..5ddbd61 100644
--- a/OpenSim/Framework/EstateSettings.cs
+++ b/OpenSim/Framework/EstateSettings.cs
@@ -430,6 +430,5 @@ namespace OpenSim.Framework
430 { 430 {
431 return l_EstateGroups.Contains(groupID); 431 return l_EstateGroups.Contains(groupID);
432 } 432 }
433
434 } 433 }
435} 434}
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index ad3471a..6c9e7c9 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -65,6 +65,7 @@ namespace OpenSim.Framework
65 public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes); 65 public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes);
66 66
67 public delegate void SetAppearance(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 AvSize, WearableCacheItem[] CacheItems); 67 public delegate void SetAppearance(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 AvSize, WearableCacheItem[] CacheItems);
68 public delegate void CachedTextureRequest(IClientAPI remoteClient, int serial, List<CachedTextureRequestArg> cachedTextureRequest);
68 69
69 public delegate void StartAnim(IClientAPI remoteClient, UUID animID); 70 public delegate void StartAnim(IClientAPI remoteClient, UUID animID);
70 71
@@ -789,6 +790,7 @@ namespace OpenSim.Framework
789 event EstateChangeInfo OnEstateChangeInfo; 790 event EstateChangeInfo OnEstateChangeInfo;
790 event EstateManageTelehub OnEstateManageTelehub; 791 event EstateManageTelehub OnEstateManageTelehub;
791 // [Obsolete("LLClientView Specific.")] 792 // [Obsolete("LLClientView Specific.")]
793 event CachedTextureRequest OnCachedTextureRequest;
792 event SetAppearance OnSetAppearance; 794 event SetAppearance OnSetAppearance;
793 // [Obsolete("LLClientView Specific - Replace and rename OnAvatarUpdate. Difference from SetAppearance?")] 795 // [Obsolete("LLClientView Specific - Replace and rename OnAvatarUpdate. Difference from SetAppearance?")]
794 event AvatarNowWearing OnAvatarNowWearing; 796 event AvatarNowWearing OnAvatarNowWearing;
@@ -1100,14 +1102,15 @@ namespace OpenSim.Framework
1100 /// <param name="textureEntry"></param> 1102 /// <param name="textureEntry"></param>
1101 void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry); 1103 void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry);
1102 1104
1105 void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures);
1106
1103 void SendStartPingCheck(byte seq); 1107 void SendStartPingCheck(byte seq);
1104 1108
1105 /// <summary> 1109 /// <summary>
1106 /// Tell the client that an object has been deleted 1110 /// Tell the client that an object has been deleted
1107 /// </summary> 1111 /// </summary>
1108 /// <param name="regionHandle"></param>
1109 /// <param name="localID"></param> 1112 /// <param name="localID"></param>
1110 void SendKillObject(ulong regionHandle, List<uint> localID); 1113 void SendKillObject(List<uint> localID);
1111 1114
1112 void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); 1115 void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
1113 void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); 1116 void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args);
diff --git a/OpenSim/Framework/IPeople.cs b/OpenSim/Framework/IPeople.cs
new file mode 100644
index 0000000..b88e103
--- /dev/null
+++ b/OpenSim/Framework/IPeople.cs
@@ -0,0 +1,47 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31
32namespace OpenSim.Framework
33{
34 public class UserData
35 {
36 public UUID Id { get; set; }
37 public string FirstName { get; set; }
38 public string LastName { get; set; }
39 public string HomeURL { get; set; }
40 public Dictionary<string, object> ServerURLs { get; set; }
41 }
42
43 public interface IPeople
44 {
45 List<UserData> GetUserData(string query, int page_size, int page_number);
46 }
47} \ No newline at end of file
diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs
index 87ec99e..8164f41 100644
--- a/OpenSim/Framework/IScene.cs
+++ b/OpenSim/Framework/IScene.cs
@@ -136,5 +136,10 @@ namespace OpenSim.Framework
136 ISceneObject DeserializeObject(string representation); 136 ISceneObject DeserializeObject(string representation);
137 137
138 bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); 138 bool CheckClient(UUID agentID, System.Net.IPEndPoint ep);
139
140 /// <summary>
141 /// Start the scene and associated scripts within it.
142 /// </summary>
143 void Start();
139 } 144 }
140} 145} \ No newline at end of file
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 97035e3..74954cc 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -454,7 +454,7 @@ namespace OpenSim.Framework.Servers.HttpServer
454 } 454 }
455 455
456 OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); 456 OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context);
457 457 resp.ReuseContext = true;
458 HandleRequest(req, resp); 458 HandleRequest(req, resp);
459 459
460 460
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 1ff8aca..b9e3c18 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -76,6 +76,11 @@ namespace OpenSim.Framework.Servers
76 76
77 protected void CreatePIDFile(string path) 77 protected void CreatePIDFile(string path)
78 { 78 {
79 if (File.Exists(path))
80 m_log.ErrorFormat(
81 "[SERVER BASE]: Previous pid file {0} still exists on startup. Possibly previously unclean shutdown.",
82 path);
83
79 try 84 try
80 { 85 {
81 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); 86 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
diff --git a/OpenSim/Framework/UserProfiles.cs b/OpenSim/Framework/UserProfiles.cs
new file mode 100644
index 0000000..6133591
--- /dev/null
+++ b/OpenSim/Framework/UserProfiles.cs
@@ -0,0 +1,117 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenMetaverse;
30
31namespace OpenSim.Framework
32{
33 public class UserClassifiedAdd
34 {
35 public UUID ClassifiedId = UUID.Zero;
36 public UUID CreatorId = UUID.Zero;
37 public int CreationDate = 0;
38 public int ExpirationDate = 0;
39 public int Category = 0;
40 public string Name = string.Empty;
41 public string Description = string.Empty;
42 public UUID ParcelId = UUID.Zero;
43 public int ParentEstate = 0;
44 public UUID SnapshotId = UUID.Zero;
45 public string SimName = string.Empty;
46 public string GlobalPos = "<0,0,0>";
47 public string ParcelName = string.Empty;
48 public byte Flags = 0;
49 public int Price = 0;
50 }
51
52 public class UserProfileProperties
53 {
54 public UUID UserId = UUID.Zero;
55 public UUID PartnerId = UUID.Zero;
56 public bool PublishProfile = false;
57 public bool PublishMature = false;
58 public string WebUrl = string.Empty;
59 public int WantToMask = 0;
60 public string WantToText = string.Empty;
61 public int SkillsMask = 0;
62 public string SkillsText = string.Empty;
63 public string Language = string.Empty;
64 public UUID ImageId = UUID.Zero;
65 public string AboutText = string.Empty;
66 public UUID FirstLifeImageId = UUID.Zero;
67 public string FirstLifeText = string.Empty;
68 }
69
70 public class UserProfilePick
71 {
72 public UUID PickId = UUID.Zero;
73 public UUID CreatorId = UUID.Zero;
74 public bool TopPick = false;
75 public string Name = string.Empty;
76 public string OriginalName = string.Empty;
77 public string Desc = string.Empty;
78 public UUID ParcelId = UUID.Zero;
79 public UUID SnapshotId = UUID.Zero;
80 public string User = string.Empty;
81 public string SimName = string.Empty;
82 public string GlobalPos = "<0,0,0>";
83 public int SortOrder = 0;
84 public bool Enabled = false;
85 }
86
87 public class UserProfileNotes
88 {
89 public UUID UserId;
90 public UUID TargetId;
91 public string Notes;
92 }
93
94 public class UserAccountProperties
95 {
96 public string EmailAddress = string.Empty;
97 public string Firstname = string.Empty;
98 public string LastName = string.Empty;
99 public string Password = string.Empty;
100 public string UserId = string.Empty;
101 }
102
103 public class UserAccountAuth
104 {
105 public string UserId = UUID.Zero.ToString();
106 public string Password = string.Empty;
107 }
108
109 public class UserAppData
110 {
111 public string TagId = string.Empty;
112 public string DataKey = string.Empty;
113 public string UserId = UUID.Zero.ToString();
114 public string DataVal = string.Empty;
115 }
116}
117
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 557f38e..0852b49 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1852,7 +1852,7 @@ namespace OpenSim.Framework
1852 case FireAndForgetMethod.SmartThreadPool: 1852 case FireAndForgetMethod.SmartThreadPool:
1853 if (m_ThreadPool == null) 1853 if (m_ThreadPool == null)
1854 InitThreadPool(15); 1854 InitThreadPool(15);
1855 m_ThreadPool.QueueWorkItem(SmartThreadPoolCallback, new object[] { realCallback, obj }); 1855 m_ThreadPool.QueueWorkItem((cb, o) => cb(o), realCallback, obj);
1856 break; 1856 break;
1857 case FireAndForgetMethod.Thread: 1857 case FireAndForgetMethod.Thread:
1858 Thread thread = new Thread(delegate(object o) { realCallback(o); }); 1858 Thread thread = new Thread(delegate(object o) { realCallback(o); });
@@ -1922,15 +1922,15 @@ namespace OpenSim.Framework
1922 return sb.ToString(); 1922 return sb.ToString();
1923 } 1923 }
1924 1924
1925 private static object SmartThreadPoolCallback(object o) 1925// private static object SmartThreadPoolCallback(object o)
1926 { 1926// {
1927 object[] array = (object[])o; 1927// object[] array = (object[])o;
1928 WaitCallback callback = (WaitCallback)array[0]; 1928// WaitCallback callback = (WaitCallback)array[0];
1929 object obj = array[1]; 1929// object obj = array[1];
1930 1930//
1931 callback(obj); 1931// callback(obj);
1932 return null; 1932// return null;
1933 } 1933// }
1934 1934
1935 #endregion FireAndForget Threading Pattern 1935 #endregion FireAndForget Threading Pattern
1936 1936
@@ -2148,7 +2148,7 @@ namespace OpenSim.Framework
2148 /// <param name="secret">the secret part</param> 2148 /// <param name="secret">the secret part</param>
2149 public static bool ParseUniversalUserIdentifier(string value, out UUID uuid, out string url, out string firstname, out string lastname, out string secret) 2149 public static bool ParseUniversalUserIdentifier(string value, out UUID uuid, out string url, out string firstname, out string lastname, out string secret)
2150 { 2150 {
2151 uuid = UUID.Zero; url = string.Empty; firstname = "Unknown"; lastname = "User"; secret = string.Empty; 2151 uuid = UUID.Zero; url = string.Empty; firstname = "Unknown"; lastname = "UserUPUUI"; secret = string.Empty;
2152 2152
2153 string[] parts = value.Split(';'); 2153 string[] parts = value.Split(';');
2154 if (parts.Length >= 1) 2154 if (parts.Length >= 1)
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 7361f50..0ed85b8 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -504,9 +504,6 @@ namespace OpenSim
504 scene.SnmpService.LinkUp(scene); 504 scene.SnmpService.LinkUp(scene);
505 } 505 }
506 506
507 scene.Start();
508 scene.StartScripts();
509
510 return clientServers; 507 return clientServers;
511 } 508 }
512 509
@@ -821,7 +818,7 @@ namespace OpenSim
821 818
822 if (foundClientServer) 819 if (foundClientServer)
823 { 820 {
824 m_clientServers[clientServerElement].NetworkStop(); 821 m_clientServers[clientServerElement].Stop();
825 m_clientServers.RemoveAt(clientServerElement); 822 m_clientServers.RemoveAt(clientServerElement);
826 } 823 }
827 } 824 }
@@ -835,6 +832,7 @@ namespace OpenSim
835 ShutdownClientServer(whichRegion); 832 ShutdownClientServer(whichRegion);
836 IScene scene; 833 IScene scene;
837 CreateRegion(whichRegion, true, out scene); 834 CreateRegion(whichRegion, true, out scene);
835 scene.Start();
838 } 836 }
839 837
840 # region Setup methods 838 # region Setup methods
diff --git a/OpenSim/Region/ClientStack/IClientNetworkServer.cs b/OpenSim/Region/ClientStack/IClientNetworkServer.cs
index 54a441b..bb7e6d0 100644
--- a/OpenSim/Region/ClientStack/IClientNetworkServer.cs
+++ b/OpenSim/Region/ClientStack/IClientNetworkServer.cs
@@ -38,11 +38,22 @@ namespace OpenSim.Region.ClientStack
38 IPAddress _listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, 38 IPAddress _listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource,
39 AgentCircuitManager authenticateClass); 39 AgentCircuitManager authenticateClass);
40 40
41 void NetworkStop();
42 bool HandlesRegion(Location x); 41 bool HandlesRegion(Location x);
43 void AddScene(IScene x);
44 42
43 /// <summary>
44 /// Add the given scene to be handled by this IClientNetworkServer.
45 /// </summary>
46 /// <param name='scene'></param>
47 void AddScene(IScene scene);
48
49 /// <summary>
50 /// Start sending and receiving data.
51 /// </summary>
45 void Start(); 52 void Start();
53
54 /// <summary>
55 /// Stop sending and receiving data.
56 /// </summary>
46 void Stop(); 57 void Stop();
47 } 58 }
48} 59}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs
new file mode 100644
index 0000000..9f2aed0
--- /dev/null
+++ b/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs
@@ -0,0 +1,139 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Specialized;
31using System.Drawing;
32using System.Drawing.Imaging;
33using System.Reflection;
34using System.IO;
35using System.Web;
36using log4net;
37using Nini.Config;
38using Mono.Addins;
39using OpenMetaverse;
40using OpenMetaverse.StructuredData;
41using OpenSim.Framework;
42using OpenSim.Framework.Servers;
43using OpenSim.Framework.Servers.HttpServer;
44using OpenSim.Region.Framework.Interfaces;
45using OpenSim.Region.Framework.Scenes;
46using OpenSim.Services.Interfaces;
47using Caps = OpenSim.Framework.Capabilities.Caps;
48using OpenSim.Capabilities.Handlers;
49
50namespace OpenSim.Region.ClientStack.Linden
51{
52
53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AvatarPickerSearchModule")]
54 public class AvatarPickerSearchModule : INonSharedRegionModule
55 {
56 private static readonly ILog m_log =
57 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
58
59 private Scene m_scene;
60 private IPeople m_People;
61 private bool m_Enabled = false;
62
63 private string m_URL;
64
65 #region ISharedRegionModule Members
66
67 public void Initialise(IConfigSource source)
68 {
69 IConfig config = source.Configs["ClientStack.LindenCaps"];
70 if (config == null)
71 return;
72
73 m_URL = config.GetString("Cap_AvatarPickerSearch", string.Empty);
74 // Cap doesn't exist
75 if (m_URL != string.Empty)
76 m_Enabled = true;
77 }
78
79 public void AddRegion(Scene s)
80 {
81 if (!m_Enabled)
82 return;
83
84 m_scene = s;
85 }
86
87 public void RemoveRegion(Scene s)
88 {
89 if (!m_Enabled)
90 return;
91
92 m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
93 m_scene = null;
94 }
95
96 public void RegionLoaded(Scene s)
97 {
98 if (!m_Enabled)
99 return;
100
101 m_People = m_scene.RequestModuleInterface<IPeople>();
102 m_scene.EventManager.OnRegisterCaps += RegisterCaps;
103 }
104
105 public void PostInitialise()
106 {
107 }
108
109 public void Close() { }
110
111 public string Name { get { return "AvatarPickerSearchModule"; } }
112
113 public Type ReplaceableInterface
114 {
115 get { return null; }
116 }
117
118 #endregion
119
120 public void RegisterCaps(UUID agentID, Caps caps)
121 {
122 UUID capID = UUID.Random();
123
124 if (m_URL == "localhost")
125 {
126 m_log.DebugFormat("[AVATAR PICKER SEARCH]: /CAPS/{0} in region {1}", capID, m_scene.RegionInfo.RegionName);
127 caps.RegisterHandler(
128 "AvatarPickerSearch",
129 new AvatarPickerSearchHandler("/CAPS/" + capID + "/", m_People, "AvatarPickerSearch", "Search for avatars by name"));
130 }
131 else
132 {
133 // m_log.DebugFormat("[AVATAR PICKER SEARCH]: {0} in region {1}", m_URL, m_scene.RegionInfo.RegionName);
134 caps.RegisterHandler("AvatarPickerSearch", m_URL);
135 }
136 }
137
138 }
139}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs
index 3995620..dfc4419 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs
@@ -429,7 +429,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
429 if (!assetServerURL.EndsWith("/") && !assetServerURL.EndsWith("=")) 429 if (!assetServerURL.EndsWith("/") && !assetServerURL.EndsWith("="))
430 assetServerURL = assetServerURL + "/"; 430 assetServerURL = assetServerURL + "/";
431 431
432 m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", assetServerURL + id); 432// m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", assetServerURL + id);
433 AssetService.Get(assetServerURL + id, InventoryAccessModule, AssetReceived); 433 AssetService.Get(assetServerURL + id, InventoryAccessModule, AssetReceived);
434 return; 434 return;
435 } 435 }
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index eebb8ae..c78d552 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -84,6 +84,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
84 public event ModifyTerrain OnModifyTerrain; 84 public event ModifyTerrain OnModifyTerrain;
85 public event Action<IClientAPI> OnRegionHandShakeReply; 85 public event Action<IClientAPI> OnRegionHandShakeReply;
86 public event GenericCall1 OnRequestWearables; 86 public event GenericCall1 OnRequestWearables;
87 public event CachedTextureRequest OnCachedTextureRequest;
87 public event SetAppearance OnSetAppearance; 88 public event SetAppearance OnSetAppearance;
88 public event AvatarNowWearing OnAvatarNowWearing; 89 public event AvatarNowWearing OnAvatarNowWearing;
89 public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv; 90 public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
@@ -820,12 +821,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
820 handshake.RegionInfo3.ProductName = Util.StringToBytes256(regionInfo.RegionType); 821 handshake.RegionInfo3.ProductName = Util.StringToBytes256(regionInfo.RegionType);
821 handshake.RegionInfo3.ProductSKU = Utils.EmptyBytes; 822 handshake.RegionInfo3.ProductSKU = Utils.EmptyBytes;
822 823
823 handshake.RegionInfo4 = new RegionHandshakePacket.RegionInfo4Block[0]; 824 handshake.RegionInfo4 = new RegionHandshakePacket.RegionInfo4Block[1];
824// OutPacket(handshake, ThrottleOutPacketType.Task); 825 handshake.RegionInfo4[0] = new RegionHandshakePacket.RegionInfo4Block();
825 // use same as MoveAgentIntoRegion (both should be task ) 826 handshake.RegionInfo4[0].RegionFlagsExtended = args.regionFlags;
827 handshake.RegionInfo4[0].RegionProtocols = 0; // 1 here would indicate that SSB is supported
828
826 OutPacket(handshake, ThrottleOutPacketType.Unknown); 829 OutPacket(handshake, ThrottleOutPacketType.Unknown);
827 } 830 }
828 831
832
829 public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) 833 public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look)
830 { 834 {
831 AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete); 835 AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete);
@@ -1580,7 +1584,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1580 OutPacket(pc, ThrottleOutPacketType.Unknown); 1584 OutPacket(pc, ThrottleOutPacketType.Unknown);
1581 } 1585 }
1582 1586
1583 public void SendKillObject(ulong regionHandle, List<uint> localIDs) 1587 public void SendKillObject(List<uint> localIDs)
1584 { 1588 {
1585// foreach (uint id in localIDs) 1589// foreach (uint id in localIDs)
1586// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle); 1590// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle);
@@ -11717,8 +11721,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11717 } 11721 }
11718 11722
11719 /// <summary> 11723 /// <summary>
11720 /// Send a response back to a client when it asks the asset server (via the region server) if it has
11721 /// its appearance texture cached.
11722 /// </summary> 11724 /// </summary>
11723 /// <remarks> 11725 /// <remarks>
11724 /// At the moment, we always reply that there is no cached texture. 11726 /// At the moment, we always reply that there is no cached texture.
@@ -11726,6 +11728,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11726 /// <param name="simclient"></param> 11728 /// <param name="simclient"></param>
11727 /// <param name="packet"></param> 11729 /// <param name="packet"></param>
11728 /// <returns></returns> 11730 /// <returns></returns>
11731 // TODO: Convert old handler to use new method
11732 /*protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
11733 {
11734 AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet;
11735
11736 if (cachedtex.AgentData.SessionID != SessionId)
11737 return false;
11738
11739
11740 List<CachedTextureRequestArg> requestArgs = new List<CachedTextureRequestArg>();
11741
11742 for (int i = 0; i < cachedtex.WearableData.Length; i++)
11743 {
11744 CachedTextureRequestArg arg = new CachedTextureRequestArg();
11745 arg.BakedTextureIndex = cachedtex.WearableData[i].TextureIndex;
11746 arg.WearableHashID = cachedtex.WearableData[i].ID;
11747
11748 requestArgs.Add(arg);
11749 }
11750
11751 CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest;
11752 if (handlerCachedTextureRequest != null)
11753 {
11754 handlerCachedTextureRequest(simclient,cachedtex.AgentData.SerialNum,requestArgs);
11755 }
11756
11757 return true;
11758 }*/
11759
11729 protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) 11760 protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
11730 { 11761 {
11731 //m_log.Debug("texture cached: " + packet.ToString()); 11762 //m_log.Debug("texture cached: " + packet.ToString());
@@ -11884,6 +11915,40 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11884 return true; 11915 return true;
11885 } 11916 }
11886 11917
11918 /// <summary>
11919 /// Send a response back to a client when it asks the asset server (via the region server) if it has
11920 /// its appearance texture cached.
11921 /// </summary>
11922 /// <param name="avatar"></param>
11923 /// <param name="serial"></param>
11924 /// <param name="cachedTextures"></param>
11925 /// <returns></returns>
11926 public void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures)
11927 {
11928 ScenePresence presence = avatar as ScenePresence;
11929 if (presence == null)
11930 return;
11931
11932 AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
11933
11934 // TODO: don't create new blocks if recycling an old packet
11935 cachedresp.AgentData.AgentID = m_agentId;
11936 cachedresp.AgentData.SessionID = m_sessionId;
11937 cachedresp.AgentData.SerialNum = serial;
11938 cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[cachedTextures.Count];
11939
11940 for (int i = 0; i < cachedTextures.Count; i++)
11941 {
11942 cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
11943 cachedresp.WearableData[i].TextureIndex = (byte)cachedTextures[i].BakedTextureIndex;
11944 cachedresp.WearableData[i].TextureID = cachedTextures[i].BakedTextureID;
11945 cachedresp.WearableData[i].HostName = new byte[0];
11946 }
11947
11948 cachedresp.Header.Zerocoded = true;
11949 OutPacket(cachedresp, ThrottleOutPacketType.Task);
11950 }
11951
11887 protected bool HandleMultipleObjUpdate(IClientAPI simClient, Packet packet) 11952 protected bool HandleMultipleObjUpdate(IClientAPI simClient, Packet packet)
11888 { 11953 {
11889 MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; 11954 MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet;
@@ -11909,8 +11974,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11909 if (part == null) 11974 if (part == null)
11910 { 11975 {
11911 // It's a ghost! tell the client to delete it from view. 11976 // It's a ghost! tell the client to delete it from view.
11912 simClient.SendKillObject(Scene.RegionInfo.RegionHandle, 11977 simClient.SendKillObject(new List<uint> { localId });
11913 new List<uint> { localId });
11914 } 11978 }
11915 else 11979 else
11916 { 11980 {
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 4154ef2..d008702 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -62,11 +62,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
62 m_udpServer = new LLUDPServer(listenIP, ref port, proxyPortOffsetParm, allow_alternate_port, configSource, circuitManager); 62 m_udpServer = new LLUDPServer(listenIP, ref port, proxyPortOffsetParm, allow_alternate_port, configSource, circuitManager);
63 } 63 }
64 64
65 public void NetworkStop()
66 {
67 m_udpServer.Stop();
68 }
69
70 public void AddScene(IScene scene) 65 public void AddScene(IScene scene)
71 { 66 {
72 m_udpServer.AddScene(scene); 67 m_udpServer.AddScene(scene);
@@ -1421,7 +1416,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1421 1416
1422 // We only want to send initial data to new clients, not ones which are being converted from child to root. 1417 // We only want to send initial data to new clients, not ones which are being converted from child to root.
1423 if (client != null) 1418 if (client != null)
1424 client.SceneAgent.SendInitialDataToMe(); 1419 {
1420 AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
1421 bool tp = (aCircuit.teleportFlags > 0);
1422 if (!tp)
1423 client.SceneAgent.SendInitialDataToMe();
1424 }
1425 1425
1426 // Now we know we can handle more data 1426 // Now we know we can handle more data
1427 Thread.Sleep(200); 1427 Thread.Sleep(200);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs
index 7d9f581..a0e0078 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs
@@ -75,6 +75,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
75 [SetUp] 75 [SetUp]
76 public void SetUp() 76 public void SetUp()
77 { 77 {
78 base.SetUp();
79
78 UUID userId = TestHelpers.ParseTail(0x3); 80 UUID userId = TestHelpers.ParseTail(0x3);
79 81
80 J2KDecoderModule j2kdm = new J2KDecoderModule(); 82 J2KDecoderModule j2kdm = new J2KDecoderModule();
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index cb724aa..0f03ad0 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -841,7 +841,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
841 m_scene.ForEachClient( 841 m_scene.ForEachClient(
842 client => 842 client =>
843 { if (client.AgentId != so.AttachedAvatar) 843 { if (client.AgentId != so.AttachedAvatar)
844 client.SendKillObject(m_scene.RegionInfo.RegionHandle, new List<uint>() { so.LocalId }); 844 client.SendKillObject(new List<uint>() { so.LocalId });
845 }); 845 });
846 } 846 }
847 847
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
index 1a38619..8f9b17e 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
@@ -833,11 +833,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
833 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); 833 UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1);
834 834
835 AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); 835 AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID);
836 TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); 836 TestClient tc = new TestClient(acd, sceneA);
837 List<TestClient> destinationTestClients = new List<TestClient>(); 837 List<TestClient> destinationTestClients = new List<TestClient>();
838 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); 838 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
839 839
840 ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); 840 ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
841 beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); 841 beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32);
842 842
843 InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); 843 InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20);
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index bc79944..09cc998 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -55,6 +55,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
55 55
56 private int m_savetime = 5; // seconds to wait before saving changed appearance 56 private int m_savetime = 5; // seconds to wait before saving changed appearance
57 private int m_sendtime = 2; // seconds to wait before sending changed appearance 57 private int m_sendtime = 2; // seconds to wait before sending changed appearance
58 private bool m_reusetextures = false;
58 59
59 private int m_checkTime = 500; // milliseconds to wait between checks for appearance updates 60 private int m_checkTime = 500; // milliseconds to wait between checks for appearance updates
60 private System.Timers.Timer m_updateTimer = new System.Timers.Timer(); 61 private System.Timers.Timer m_updateTimer = new System.Timers.Timer();
@@ -73,6 +74,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
73 { 74 {
74 m_savetime = Convert.ToInt32(appearanceConfig.GetString("DelayBeforeAppearanceSave",Convert.ToString(m_savetime))); 75 m_savetime = Convert.ToInt32(appearanceConfig.GetString("DelayBeforeAppearanceSave",Convert.ToString(m_savetime)));
75 m_sendtime = Convert.ToInt32(appearanceConfig.GetString("DelayBeforeAppearanceSend",Convert.ToString(m_sendtime))); 76 m_sendtime = Convert.ToInt32(appearanceConfig.GetString("DelayBeforeAppearanceSend",Convert.ToString(m_sendtime)));
77 m_reusetextures = appearanceConfig.GetBoolean("ReuseTextures",m_reusetextures);
78
76 // m_log.InfoFormat("[AVFACTORY] configured for {0} save and {1} send",m_savetime,m_sendtime); 79 // m_log.InfoFormat("[AVFACTORY] configured for {0} save and {1} send",m_savetime,m_sendtime);
77 } 80 }
78 81
@@ -131,6 +134,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
131 client.OnRequestWearables += Client_OnRequestWearables; 134 client.OnRequestWearables += Client_OnRequestWearables;
132 client.OnSetAppearance += Client_OnSetAppearance; 135 client.OnSetAppearance += Client_OnSetAppearance;
133 client.OnAvatarNowWearing += Client_OnAvatarNowWearing; 136 client.OnAvatarNowWearing += Client_OnAvatarNowWearing;
137 client.OnCachedTextureRequest += Client_OnCachedTextureRequest;
134 } 138 }
135 139
136 #endregion 140 #endregion
@@ -1068,6 +1072,61 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
1068 QueueAppearanceSave(client.AgentId); 1072 QueueAppearanceSave(client.AgentId);
1069 } 1073 }
1070 } 1074 }
1075
1076 /// <summary>
1077 /// Respond to the cached textures request from the client
1078 /// </summary>
1079 /// <param name="client"></param>
1080 /// <param name="serial"></param>
1081 /// <param name="cachedTextureRequest"></param>
1082 private void Client_OnCachedTextureRequest(IClientAPI client, int serial, List<CachedTextureRequestArg> cachedTextureRequest)
1083 {
1084 // m_log.WarnFormat("[AVFACTORY]: Client_OnCachedTextureRequest called for {0} ({1})", client.Name, client.AgentId);
1085 ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
1086
1087 List<CachedTextureResponseArg> cachedTextureResponse = new List<CachedTextureResponseArg>();
1088 foreach (CachedTextureRequestArg request in cachedTextureRequest)
1089 {
1090 UUID texture = UUID.Zero;
1091 int index = request.BakedTextureIndex;
1092
1093 if (m_reusetextures)
1094 {
1095 // this is the most insanely dumb way to do this... however it seems to
1096 // actually work. if the appearance has been reset because wearables have
1097 // changed then the texture entries are zero'd out until the bakes are
1098 // uploaded. on login, if the textures exist in the cache (eg if you logged
1099 // into the simulator recently, then the appearance will pull those and send
1100 // them back in the packet and you won't have to rebake. if the textures aren't
1101 // in the cache then the intial makeroot() call in scenepresence will zero
1102 // them out.
1103 //
1104 // a better solution (though how much better is an open question) is to
1105 // store the hashes in the appearance and compare them. Thats's coming.
1106
1107 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[index];
1108 if (face != null)
1109 texture = face.TextureID;
1110
1111 // m_log.WarnFormat("[AVFACTORY]: reuse texture {0} for index {1}",texture,index);
1112 }
1113
1114 CachedTextureResponseArg response = new CachedTextureResponseArg();
1115 response.BakedTextureIndex = index;
1116 response.BakedTextureID = texture;
1117 response.HostName = null;
1118
1119 cachedTextureResponse.Add(response);
1120 }
1121
1122 // m_log.WarnFormat("[AVFACTORY]: serial is {0}",serial);
1123 // The serial number appears to be used to match requests and responses
1124 // in the texture transaction. We just send back the serial number
1125 // that was provided in the request. The viewer bumps this for us.
1126 client.SendCachedTextureResponse(sp, serial, cachedTextureResponse);
1127 }
1128
1129
1071 #endregion 1130 #endregion
1072 1131
1073 public void WriteBakedTexturesReport(IScenePresence sp, ReportOutputAction outputAction) 1132 public void WriteBakedTexturesReport(IScenePresence sp, ReportOutputAction outputAction)
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 8056030..4613344 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -371,7 +371,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
371 foreach (string fid in outstanding) 371 foreach (string fid in outstanding)
372 { 372 {
373 UUID fromAgentID; 373 UUID fromAgentID;
374 string firstname = "Unknown", lastname = "User"; 374 string firstname = "Unknown", lastname = "UserFMSFOIN";
375 if (!GetAgentInfo(client.Scene.RegionInfo.ScopeID, fid, out fromAgentID, out firstname, out lastname)) 375 if (!GetAgentInfo(client.Scene.RegionInfo.ScopeID, fid, out fromAgentID, out firstname, out lastname))
376 { 376 {
377 m_log.DebugFormat("[FRIENDS MODULE]: skipping malformed friend {0}", fid); 377 m_log.DebugFormat("[FRIENDS MODULE]: skipping malformed friend {0}", fid);
@@ -397,7 +397,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
397 397
398 protected virtual bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last) 398 protected virtual bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last)
399 { 399 {
400 first = "Unknown"; last = "User"; 400 first = "Unknown"; last = "UserFMGAI";
401 if (!UUID.TryParse(fid, out agentID)) 401 if (!UUID.TryParse(fid, out agentID))
402 return false; 402 return false;
403 403
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
index bf5c0bb..b3e3aa2 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
@@ -293,7 +293,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
293 293
294 protected override bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last) 294 protected override bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last)
295 { 295 {
296 first = "Unknown"; last = "User"; 296 first = "Unknown"; last = "UserHGGAI";
297 if (base.GetAgentInfo(scopeID, fid, out agentID, out first, out last)) 297 if (base.GetAgentInfo(scopeID, fid, out agentID, out first, out last))
298 return true; 298 return true;
299 299
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
index fa8c3f3..5b12ecb 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -26,27 +26,25 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Collections.Generic;
30using Nini.Config;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Region.Framework.Scenes;
34using OpenSim.Region.Framework.Interfaces;
35using System;
36using System.Reflection;
37using System.Collections; 29using System.Collections;
30using System.Collections.Generic;
38using System.Collections.Specialized; 31using System.Collections.Specialized;
39using System.Reflection;
40using System.IO; 32using System.IO;
33using System.Reflection;
41using System.Web; 34using System.Web;
42using System.Xml; 35using System.Xml;
43using log4net; 36using log4net;
44using Mono.Addins; 37using Mono.Addins;
38using Nini.Config;
39using OpenMetaverse;
45using OpenMetaverse.Messages.Linden; 40using OpenMetaverse.Messages.Linden;
46using OpenMetaverse.StructuredData; 41using OpenMetaverse.StructuredData;
42using OpenSim.Framework;
47using OpenSim.Framework.Capabilities; 43using OpenSim.Framework.Capabilities;
48using OpenSim.Framework.Servers; 44using OpenSim.Framework.Servers;
49using OpenSim.Framework.Servers.HttpServer; 45using OpenSim.Framework.Servers.HttpServer;
46using OpenSim.Region.Framework.Scenes;
47using OpenSim.Region.Framework.Interfaces;
50using Caps = OpenSim.Framework.Capabilities.Caps; 48using Caps = OpenSim.Framework.Capabilities.Caps;
51using OSDArray = OpenMetaverse.StructuredData.OSDArray; 49using OSDArray = OpenMetaverse.StructuredData.OSDArray;
52using OSDMap = OpenMetaverse.StructuredData.OSDMap; 50using OSDMap = OpenMetaverse.StructuredData.OSDMap;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index f122d00..e285f21 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -47,10 +47,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
47 47
48 /// <summary> 48 /// <summary>
49 private List<Scene> m_Scenelist = new List<Scene>(); 49 private List<Scene> m_Scenelist = new List<Scene>();
50// private Dictionary<UUID, Scene> m_AgentRegions =
51// new Dictionary<UUID, Scene>();
52 50
53 private IMessageTransferModule m_TransferModule = null; 51 private IMessageTransferModule m_TransferModule;
54 private bool m_Enabled = true; 52 private bool m_Enabled = true;
55 53
56 #region Region Module interface 54 #region Region Module interface
@@ -81,9 +79,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
81// scene.RegisterModuleInterface<IInventoryTransferModule>(this); 79// scene.RegisterModuleInterface<IInventoryTransferModule>(this);
82 80
83 scene.EventManager.OnNewClient += OnNewClient; 81 scene.EventManager.OnNewClient += OnNewClient;
84// scene.EventManager.OnClientClosed += ClientLoggedOut;
85 scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; 82 scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
86// scene.EventManager.OnSetRootAgentScene += OnSetRootAgentScene;
87 } 83 }
88 84
89 public void RegionLoaded(Scene scene) 85 public void RegionLoaded(Scene scene)
@@ -96,11 +92,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
96 m_log.Error("[INVENTORY TRANSFER]: No Message transfer module found, transfers will be local only"); 92 m_log.Error("[INVENTORY TRANSFER]: No Message transfer module found, transfers will be local only");
97 m_Enabled = false; 93 m_Enabled = false;
98 94
99 m_Scenelist.Clear(); 95// m_Scenelist.Clear();
100 scene.EventManager.OnNewClient -= OnNewClient; 96// scene.EventManager.OnNewClient -= OnNewClient;
101// scene.EventManager.OnClientClosed -= ClientLoggedOut;
102 scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; 97 scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage;
103// scene.EventManager.OnSetRootAgentScene -= OnSetRootAgentScene;
104 } 98 }
105 } 99 }
106 } 100 }
@@ -108,9 +102,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
108 public void RemoveRegion(Scene scene) 102 public void RemoveRegion(Scene scene)
109 { 103 {
110 scene.EventManager.OnNewClient -= OnNewClient; 104 scene.EventManager.OnNewClient -= OnNewClient;
111// scene.EventManager.OnClientClosed -= ClientLoggedOut;
112 scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; 105 scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage;
113// scene.EventManager.OnSetRootAgentScene -= OnSetRootAgentScene;
114 m_Scenelist.Remove(scene); 106 m_Scenelist.Remove(scene);
115 } 107 }
116 108
@@ -139,11 +131,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
139 // Inventory giving is conducted via instant message 131 // Inventory giving is conducted via instant message
140 client.OnInstantMessage += OnInstantMessage; 132 client.OnInstantMessage += OnInstantMessage;
141 } 133 }
142
143// protected void OnSetRootAgentScene(UUID id, Scene scene)
144// {
145// m_AgentRegions[id] = scene;
146// }
147 134
148 private Scene FindClientScene(UUID agentId) 135 private Scene FindClientScene(UUID agentId)
149 { 136 {
@@ -188,9 +175,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
188 { 175 {
189 UUID folderID = new UUID(im.binaryBucket, 1); 176 UUID folderID = new UUID(im.binaryBucket, 1);
190 177
191 m_log.DebugFormat("[INVENTORY TRANSFER]: Inserting original folder {0} "+ 178 m_log.DebugFormat(
192 "into agent {1}'s inventory", 179 "[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory",
193 folderID, new UUID(im.toAgentID)); 180 folderID, new UUID(im.toAgentID));
194 181
195 InventoryFolderBase folderCopy 182 InventoryFolderBase folderCopy
196 = scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero); 183 = scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero);
@@ -213,7 +200,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
213 user.ControllingClient.SendBulkUpdateInventory(folderCopy); 200 user.ControllingClient.SendBulkUpdateInventory(folderCopy);
214 201
215 // HACK!! 202 // HACK!!
216 // Insert the ID of the copied item into the IM so that we know which item to move to trash if it 203 // Insert the ID of the copied folder into the IM so that we know which item to move to trash if it
217 // is rejected. 204 // is rejected.
218 // XXX: This is probably a misuse of the session ID slot. 205 // XXX: This is probably a misuse of the session ID slot.
219 im.imSessionID = copyID.Guid; 206 im.imSessionID = copyID.Guid;
@@ -425,7 +412,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
425 { 412 {
426 folder = new InventoryFolderBase(inventoryID, client.AgentId); 413 folder = new InventoryFolderBase(inventoryID, client.AgentId);
427 folder = invService.GetFolder(folder); 414 folder = invService.GetFolder(folder);
428 415
429 if (folder != null & trashFolder != null) 416 if (folder != null & trashFolder != null)
430 { 417 {
431 previousParentFolderID = folder.ParentID; 418 previousParentFolderID = folder.ParentID;
@@ -477,70 +464,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
477 } 464 }
478 } 465 }
479 466
480// public bool NeedSceneCacheClear(UUID agentID, Scene scene)
481// {
482// if (!m_AgentRegions.ContainsKey(agentID))
483// {
484// // Since we can get here two ways, we need to scan
485// // the scenes here. This is somewhat more expensive
486// // but helps avoid a nasty bug
487// //
488//
489// foreach (Scene s in m_Scenelist)
490// {
491// ScenePresence presence;
492//
493// if (s.TryGetScenePresence(agentID, out presence))
494// {
495// // If the agent is in this scene, then we
496// // are being called twice in a single
497// // teleport. This is wasteful of cycles
498// // but harmless due to this 2nd level check
499// //
500// // If the agent is found in another scene
501// // then the list wasn't current
502// //
503// // If the agent is totally unknown, then what
504// // are we even doing here??
505// //
506// if (s == scene)
507// {
508// //m_log.Debug("[INVTRANSFERMOD]: s == scene. Returning true in " + scene.RegionInfo.RegionName);
509// return true;
510// }
511// else
512// {
513// //m_log.Debug("[INVTRANSFERMOD]: s != scene. Returning false in " + scene.RegionInfo.RegionName);
514// return false;
515// }
516// }
517// }
518// //m_log.Debug("[INVTRANSFERMOD]: agent not in scene. Returning true in " + scene.RegionInfo.RegionName);
519// return true;
520// }
521//
522// // The agent is left in current Scene, so we must be
523// // going to another instance
524// //
525// if (m_AgentRegions[agentID] == scene)
526// {
527// //m_log.Debug("[INVTRANSFERMOD]: m_AgentRegions[agentID] == scene. Returning true in " + scene.RegionInfo.RegionName);
528// m_AgentRegions.Remove(agentID);
529// return true;
530// }
531//
532// // Another region has claimed the agent
533// //
534// //m_log.Debug("[INVTRANSFERMOD]: last resort. Returning false in " + scene.RegionInfo.RegionName);
535// return false;
536// }
537//
538// public void ClientLoggedOut(UUID agentID, Scene scene)
539// {
540// if (m_AgentRegions.ContainsKey(agentID))
541// m_AgentRegions.Remove(agentID);
542// }
543
544 /// <summary> 467 /// <summary>
545 /// 468 ///
546 /// </summary> 469 /// </summary>
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/Tests/InventoryTransferModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/Tests/InventoryTransferModuleTests.cs
new file mode 100644
index 0000000..162a0c3
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/Tests/InventoryTransferModuleTests.cs
@@ -0,0 +1,449 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using log4net.Config;
32using Nini.Config;
33using NUnit.Framework;
34using OpenMetaverse;
35using OpenMetaverse.Assets;
36using OpenSim.Framework;
37using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces;
41using OpenSim.Tests.Common;
42using OpenSim.Tests.Common.Mock;
43
44namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer.Tests
45{
46 [TestFixture]
47 public class InventoryTransferModuleTests : OpenSimTestCase
48 {
49 protected TestScene m_scene;
50
51 [SetUp]
52 public override void SetUp()
53 {
54 base.SetUp();
55
56 IConfigSource config = new IniConfigSource();
57 config.AddConfig("Messaging");
58 config.Configs["Messaging"].Set("InventoryTransferModule", "InventoryTransferModule");
59
60 m_scene = new SceneHelpers().SetupScene();
61 SceneHelpers.SetupSceneModules(m_scene, config, new InventoryTransferModule());
62 }
63
64 [Test]
65 public void TestAcceptGivenItem()
66 {
67// TestHelpers.EnableLogging();
68
69 UUID initialSessionId = TestHelpers.ParseTail(0x10);
70 UUID itemId = TestHelpers.ParseTail(0x100);
71 UUID assetId = TestHelpers.ParseTail(0x200);
72
73 UserAccount ua1
74 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
75 UserAccount ua2
76 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
77
78 ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
79 TestClient giverClient = (TestClient)giverSp.ControllingClient;
80
81 ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
82 TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
83
84 // Create the object to test give
85 InventoryItemBase originalItem
86 = UserInventoryHelpers.CreateInventoryItem(
87 m_scene, "givenObj", itemId, assetId, giverSp.UUID, InventoryType.Object);
88
89 byte[] giveImBinaryBucket = new byte[17];
90 byte[] itemIdBytes = itemId.GetBytes();
91 Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
92
93 GridInstantMessage giveIm
94 = new GridInstantMessage(
95 m_scene,
96 giverSp.UUID,
97 giverSp.Name,
98 receiverSp.UUID,
99 (byte)InstantMessageDialog.InventoryOffered,
100 false,
101 "inventory offered msg",
102 initialSessionId,
103 false,
104 Vector3.Zero,
105 giveImBinaryBucket,
106 true);
107
108 giverClient.HandleImprovedInstantMessage(giveIm);
109
110 // These details might not all be correct.
111 GridInstantMessage acceptIm
112 = new GridInstantMessage(
113 m_scene,
114 receiverSp.UUID,
115 receiverSp.Name,
116 giverSp.UUID,
117 (byte)InstantMessageDialog.InventoryAccepted,
118 false,
119 "inventory accepted msg",
120 initialSessionId,
121 false,
122 Vector3.Zero,
123 null,
124 true);
125
126 receiverClient.HandleImprovedInstantMessage(acceptIm);
127
128 // Test for item remaining in the giver's inventory (here we assume a copy item)
129 // TODO: Test no-copy items.
130 InventoryItemBase originalItemAfterGive
131 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
132
133 Assert.That(originalItemAfterGive, Is.Not.Null);
134 Assert.That(originalItemAfterGive.ID, Is.EqualTo(originalItem.ID));
135
136 // Test for item successfully making it into the receiver's inventory
137 InventoryItemBase receivedItem
138 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, receiverSp.UUID, "Objects/givenObj");
139
140 Assert.That(receivedItem, Is.Not.Null);
141 Assert.That(receivedItem.ID, Is.Not.EqualTo(originalItem.ID));
142
143 // Test that on a delete, item still exists and is accessible for the giver.
144 m_scene.InventoryService.DeleteItems(receiverSp.UUID, new List<UUID>() { receivedItem.ID });
145
146 InventoryItemBase originalItemAfterDelete
147 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
148
149 Assert.That(originalItemAfterDelete, Is.Not.Null);
150
151 // TODO: Test scenario where giver deletes their item first.
152 }
153
154 /// <summary>
155 /// Test user rejection of a given item.
156 /// </summary>
157 /// <remarks>
158 /// A rejected item still ends up in the user's trash folder.
159 /// </remarks>
160 [Test]
161 public void TestRejectGivenItem()
162 {
163// TestHelpers.EnableLogging();
164
165 UUID initialSessionId = TestHelpers.ParseTail(0x10);
166 UUID itemId = TestHelpers.ParseTail(0x100);
167 UUID assetId = TestHelpers.ParseTail(0x200);
168
169 UserAccount ua1
170 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
171 UserAccount ua2
172 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
173
174 ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
175 TestClient giverClient = (TestClient)giverSp.ControllingClient;
176
177 ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
178 TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
179
180 // Create the object to test give
181 InventoryItemBase originalItem
182 = UserInventoryHelpers.CreateInventoryItem(
183 m_scene, "givenObj", itemId, assetId, giverSp.UUID, InventoryType.Object);
184
185 GridInstantMessage receivedIm = null;
186 receiverClient.OnReceivedInstantMessage += im => receivedIm = im;
187
188 byte[] giveImBinaryBucket = new byte[17];
189 byte[] itemIdBytes = itemId.GetBytes();
190 Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
191
192 GridInstantMessage giveIm
193 = new GridInstantMessage(
194 m_scene,
195 giverSp.UUID,
196 giverSp.Name,
197 receiverSp.UUID,
198 (byte)InstantMessageDialog.InventoryOffered,
199 false,
200 "inventory offered msg",
201 initialSessionId,
202 false,
203 Vector3.Zero,
204 giveImBinaryBucket,
205 true);
206
207 giverClient.HandleImprovedInstantMessage(giveIm);
208
209 // These details might not all be correct.
210 // Session ID is now the created item ID (!)
211 GridInstantMessage rejectIm
212 = new GridInstantMessage(
213 m_scene,
214 receiverSp.UUID,
215 receiverSp.Name,
216 giverSp.UUID,
217 (byte)InstantMessageDialog.InventoryDeclined,
218 false,
219 "inventory declined msg",
220 new UUID(receivedIm.imSessionID),
221 false,
222 Vector3.Zero,
223 null,
224 true);
225
226 receiverClient.HandleImprovedInstantMessage(rejectIm);
227
228 // Test for item remaining in the giver's inventory (here we assume a copy item)
229 // TODO: Test no-copy items.
230 InventoryItemBase originalItemAfterGive
231 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
232
233 Assert.That(originalItemAfterGive, Is.Not.Null);
234 Assert.That(originalItemAfterGive.ID, Is.EqualTo(originalItem.ID));
235
236 // Test for item successfully making it into the receiver's inventory
237 InventoryItemBase receivedItem
238 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, receiverSp.UUID, "Trash/givenObj");
239
240 InventoryFolderBase trashFolder
241 = m_scene.InventoryService.GetFolderForType(receiverSp.UUID, AssetType.TrashFolder);
242
243 Assert.That(receivedItem, Is.Not.Null);
244 Assert.That(receivedItem.ID, Is.Not.EqualTo(originalItem.ID));
245 Assert.That(receivedItem.Folder, Is.EqualTo(trashFolder.ID));
246
247 // Test that on a delete, item still exists and is accessible for the giver.
248 m_scene.InventoryService.PurgeFolder(trashFolder);
249
250 InventoryItemBase originalItemAfterDelete
251 = UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
252
253 Assert.That(originalItemAfterDelete, Is.Not.Null);
254 }
255
256 [Test]
257 public void TestAcceptGivenFolder()
258 {
259 TestHelpers.InMethod();
260// TestHelpers.EnableLogging();
261
262 UUID initialSessionId = TestHelpers.ParseTail(0x10);
263 UUID folderId = TestHelpers.ParseTail(0x100);
264
265 UserAccount ua1
266 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
267 UserAccount ua2
268 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
269
270 ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
271 TestClient giverClient = (TestClient)giverSp.ControllingClient;
272
273 ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
274 TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
275
276 InventoryFolderBase originalFolder
277 = UserInventoryHelpers.CreateInventoryFolder(
278 m_scene.InventoryService, giverSp.UUID, folderId, "f1", true);
279
280 byte[] giveImBinaryBucket = new byte[17];
281 giveImBinaryBucket[0] = (byte)AssetType.Folder;
282 byte[] itemIdBytes = folderId.GetBytes();
283 Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
284
285 GridInstantMessage giveIm
286 = new GridInstantMessage(
287 m_scene,
288 giverSp.UUID,
289 giverSp.Name,
290 receiverSp.UUID,
291 (byte)InstantMessageDialog.InventoryOffered,
292 false,
293 "inventory offered msg",
294 initialSessionId,
295 false,
296 Vector3.Zero,
297 giveImBinaryBucket,
298 true);
299
300 giverClient.HandleImprovedInstantMessage(giveIm);
301
302 // These details might not all be correct.
303 GridInstantMessage acceptIm
304 = new GridInstantMessage(
305 m_scene,
306 receiverSp.UUID,
307 receiverSp.Name,
308 giverSp.UUID,
309 (byte)InstantMessageDialog.InventoryAccepted,
310 false,
311 "inventory accepted msg",
312 initialSessionId,
313 false,
314 Vector3.Zero,
315 null,
316 true);
317
318 receiverClient.HandleImprovedInstantMessage(acceptIm);
319
320 // Test for item remaining in the giver's inventory (here we assume a copy item)
321 // TODO: Test no-copy items.
322 InventoryFolderBase originalFolderAfterGive
323 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, giverSp.UUID, "f1");
324
325 Assert.That(originalFolderAfterGive, Is.Not.Null);
326 Assert.That(originalFolderAfterGive.ID, Is.EqualTo(originalFolder.ID));
327
328 // Test for item successfully making it into the receiver's inventory
329 InventoryFolderBase receivedFolder
330 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, receiverSp.UUID, "f1");
331
332 Assert.That(receivedFolder, Is.Not.Null);
333 Assert.That(receivedFolder.ID, Is.Not.EqualTo(originalFolder.ID));
334
335 // Test that on a delete, item still exists and is accessible for the giver.
336 m_scene.InventoryService.DeleteFolders(receiverSp.UUID, new List<UUID>() { receivedFolder.ID });
337
338 InventoryFolderBase originalFolderAfterDelete
339 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, giverSp.UUID, "f1");
340
341 Assert.That(originalFolderAfterDelete, Is.Not.Null);
342
343 // TODO: Test scenario where giver deletes their item first.
344 }
345
346 /// <summary>
347 /// Test user rejection of a given item.
348 /// </summary>
349 /// <remarks>
350 /// A rejected item still ends up in the user's trash folder.
351 /// </remarks>
352 [Test]
353 public void TestRejectGivenFolder()
354 {
355 TestHelpers.InMethod();
356// TestHelpers.EnableLogging();
357
358 UUID initialSessionId = TestHelpers.ParseTail(0x10);
359 UUID folderId = TestHelpers.ParseTail(0x100);
360
361 UserAccount ua1
362 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
363 UserAccount ua2
364 = UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
365
366 ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
367 TestClient giverClient = (TestClient)giverSp.ControllingClient;
368
369 ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
370 TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
371
372 // Create the folder to test give
373 InventoryFolderBase originalFolder
374 = UserInventoryHelpers.CreateInventoryFolder(
375 m_scene.InventoryService, giverSp.UUID, folderId, "f1", true);
376
377 GridInstantMessage receivedIm = null;
378 receiverClient.OnReceivedInstantMessage += im => receivedIm = im;
379
380 byte[] giveImBinaryBucket = new byte[17];
381 giveImBinaryBucket[0] = (byte)AssetType.Folder;
382 byte[] itemIdBytes = folderId.GetBytes();
383 Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
384
385 GridInstantMessage giveIm
386 = new GridInstantMessage(
387 m_scene,
388 giverSp.UUID,
389 giverSp.Name,
390 receiverSp.UUID,
391 (byte)InstantMessageDialog.InventoryOffered,
392 false,
393 "inventory offered msg",
394 initialSessionId,
395 false,
396 Vector3.Zero,
397 giveImBinaryBucket,
398 true);
399
400 giverClient.HandleImprovedInstantMessage(giveIm);
401
402 // These details might not all be correct.
403 // Session ID is now the created item ID (!)
404 GridInstantMessage rejectIm
405 = new GridInstantMessage(
406 m_scene,
407 receiverSp.UUID,
408 receiverSp.Name,
409 giverSp.UUID,
410 (byte)InstantMessageDialog.InventoryDeclined,
411 false,
412 "inventory declined msg",
413 new UUID(receivedIm.imSessionID),
414 false,
415 Vector3.Zero,
416 null,
417 true);
418
419 receiverClient.HandleImprovedInstantMessage(rejectIm);
420
421 // Test for item remaining in the giver's inventory (here we assume a copy item)
422 // TODO: Test no-copy items.
423 InventoryFolderBase originalFolderAfterGive
424 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, giverSp.UUID, "f1");
425
426 Assert.That(originalFolderAfterGive, Is.Not.Null);
427 Assert.That(originalFolderAfterGive.ID, Is.EqualTo(originalFolder.ID));
428
429 // Test for folder successfully making it into the receiver's inventory
430 InventoryFolderBase receivedFolder
431 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, receiverSp.UUID, "Trash/f1");
432
433 InventoryFolderBase trashFolder
434 = m_scene.InventoryService.GetFolderForType(receiverSp.UUID, AssetType.TrashFolder);
435
436 Assert.That(receivedFolder, Is.Not.Null);
437 Assert.That(receivedFolder.ID, Is.Not.EqualTo(originalFolder.ID));
438 Assert.That(receivedFolder.ParentID, Is.EqualTo(trashFolder.ID));
439
440 // Test that on a delete, item still exists and is accessible for the giver.
441 m_scene.InventoryService.PurgeFolder(trashFolder);
442
443 InventoryFolderBase originalFolderAfterDelete
444 = UserInventoryHelpers.GetInventoryFolder(m_scene.InventoryService, giverSp.UUID, "f1");
445
446 Assert.That(originalFolderAfterDelete, Is.Not.Null);
447 }
448 }
449} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
new file mode 100644
index 0000000..a97c9b4
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
@@ -0,0 +1,1332 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.IO;
30using System.Text;
31using System.Collections;
32using System.Collections.Generic;
33using System.Globalization;
34using System.Net;
35using System.Net.Sockets;
36using System.Reflection;
37using System.Xml;
38using OpenMetaverse;
39using OpenMetaverse.StructuredData;
40using log4net;
41using Nini.Config;
42using Nwc.XmlRpc;
43using OpenSim.Framework;
44using OpenSim.Region.Framework.Interfaces;
45using OpenSim.Region.Framework.Scenes;
46using OpenSim.Services.Interfaces;
47using Mono.Addins;
48using OpenSim.Services.Connectors.Hypergrid;
49
50namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
51{
52 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UserProfilesModule")]
53 public class UserProfileModule : IProfileModule, INonSharedRegionModule
54 {
55 /// <summary>
56 /// Logging
57 /// </summary>
58 static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
59
60 // The pair of Dictionaries are used to handle the switching of classified ads
61 // by maintaining a cache of classified id to creator id mappings and an interest
62 // count. The entries are removed when the interest count reaches 0.
63 Dictionary<UUID,UUID> classifiedCache = new Dictionary<UUID, UUID>();
64 Dictionary<UUID,int> classifiedInterest = new Dictionary<UUID, int>();
65
66 public Scene Scene
67 {
68 get; private set;
69 }
70
71 /// <summary>
72 /// Gets or sets the ConfigSource.
73 /// </summary>
74 /// <value>
75 /// The configuration
76 /// </value>
77 public IConfigSource Config {
78 get;
79 set;
80 }
81
82 /// <summary>
83 /// Gets or sets the URI to the profile server.
84 /// </summary>
85 /// <value>
86 /// The profile server URI.
87 /// </value>
88 public string ProfileServerUri {
89 get;
90 set;
91 }
92
93 IProfileModule ProfileModule
94 {
95 get; set;
96 }
97
98 IUserManagement UserManagementModule
99 {
100 get; set;
101 }
102
103 /// <summary>
104 /// Gets or sets a value indicating whether this
105 /// <see cref="BlueWall.SlipStream.ProfileModule.UserProfileModule"/> is enabled.
106 /// </summary>
107 /// <value>
108 /// <c>true</c> if enabled; otherwise, <c>false</c>.
109 /// </value>
110 public bool Enabled {
111 get;
112 set;
113 }
114
115 #region IRegionModuleBase implementation
116 /// <summary>
117 /// This is called to initialize the region module. For shared modules, this is called exactly once, after
118 /// creating the single (shared) instance. For non-shared modules, this is called once on each instance, after
119 /// the instace for the region has been created.
120 /// </summary>
121 /// <param name='source'>
122 /// Source.
123 /// </param>
124 public void Initialise(IConfigSource source)
125 {
126 Config = source;
127 ReplaceableInterface = typeof(IProfileModule);
128
129 IConfig profileConfig = Config.Configs["UserProfiles"];
130
131 if (profileConfig == null)
132 {
133 Enabled = false;
134 return;
135 }
136
137 // If we find ProfileURL then we configure for FULL support
138 // else we setup for BASIC support
139 ProfileServerUri = profileConfig.GetString("ProfileServiceURL", "");
140 if (ProfileServerUri == "")
141 {
142 Enabled = false;
143 return;
144 }
145
146 m_log.Debug("[PROFILES]: Full Profiles Enabled");
147 ReplaceableInterface = null;
148 Enabled = true;
149 }
150
151 /// <summary>
152 /// Adds the region.
153 /// </summary>
154 /// <param name='scene'>
155 /// Scene.
156 /// </param>
157 public void AddRegion(Scene scene)
158 {
159 if(!Enabled)
160 return;
161
162 Scene = scene;
163 Scene.RegisterModuleInterface<IProfileModule>(this);
164 Scene.EventManager.OnNewClient += OnNewClient;
165 Scene.EventManager.OnMakeRootAgent += HandleOnMakeRootAgent;
166
167 UserManagementModule = Scene.RequestModuleInterface<IUserManagement>();
168 }
169
170 void HandleOnMakeRootAgent (ScenePresence obj)
171 {
172 if(obj.PresenceType == PresenceType.Npc)
173 return;
174
175 GetImageAssets(((IScenePresence)obj).UUID);
176 }
177
178 /// <summary>
179 /// Removes the region.
180 /// </summary>
181 /// <param name='scene'>
182 /// Scene.
183 /// </param>
184 public void RemoveRegion(Scene scene)
185 {
186 if(!Enabled)
187 return;
188 }
189
190 /// <summary>
191 /// This will be called once for every scene loaded. In a shared module this will be multiple times in one
192 /// instance, while a nonshared module instance will only be called once. This method is called after AddRegion
193 /// has been called in all modules for that scene, providing an opportunity to request another module's
194 /// interface, or hook an event from another module.
195 /// </summary>
196 /// <param name='scene'>
197 /// Scene.
198 /// </param>
199 public void RegionLoaded(Scene scene)
200 {
201 if(!Enabled)
202 return;
203 }
204
205 /// <summary>
206 /// If this returns non-null, it is the type of an interface that this module intends to register. This will
207 /// cause the loader to defer loading of this module until all other modules have been loaded. If no other
208 /// module has registered the interface by then, this module will be activated, else it will remain inactive,
209 /// letting the other module take over. This should return non-null ONLY in modules that are intended to be
210 /// easily replaceable, e.g. stub implementations that the developer expects to be replaced by third party
211 /// provided modules.
212 /// </summary>
213 /// <value>
214 /// The replaceable interface.
215 /// </value>
216 public Type ReplaceableInterface
217 {
218 get; private set;
219 }
220
221 /// <summary>
222 /// Called as the instance is closed.
223 /// </summary>
224 public void Close()
225 {
226 }
227
228 /// <value>
229 /// The name of the module
230 /// </value>
231 /// <summary>
232 /// Gets the module name.
233 /// </summary>
234 public string Name
235 {
236 get { return "UserProfileModule"; }
237 }
238 #endregion IRegionModuleBase implementation
239
240 #region Region Event Handlers
241 /// <summary>
242 /// Raises the new client event.
243 /// </summary>
244 /// <param name='client'>
245 /// Client.
246 /// </param>
247 void OnNewClient(IClientAPI client)
248 {
249 //Profile
250 client.OnRequestAvatarProperties += RequestAvatarProperties;
251 client.OnUpdateAvatarProperties += AvatarPropertiesUpdate;
252 client.OnAvatarInterestUpdate += AvatarInterestsUpdate;
253
254 // Classifieds
255 client.AddGenericPacketHandler("avatarclassifiedsrequest", ClassifiedsRequest);
256 client.OnClassifiedInfoUpdate += ClassifiedInfoUpdate;
257 client.OnClassifiedInfoRequest += ClassifiedInfoRequest;
258 client.OnClassifiedDelete += ClassifiedDelete;
259
260 // Picks
261 client.AddGenericPacketHandler("avatarpicksrequest", PicksRequest);
262 client.AddGenericPacketHandler("pickinforequest", PickInfoRequest);
263 client.OnPickInfoUpdate += PickInfoUpdate;
264 client.OnPickDelete += PickDelete;
265
266 // Notes
267 client.AddGenericPacketHandler("avatarnotesrequest", NotesRequest);
268 client.OnAvatarNotesUpdate += NotesUpdate;
269 }
270 #endregion Region Event Handlers
271
272 #region Classified
273 ///
274 /// <summary>
275 /// Handles the avatar classifieds request.
276 /// </summary>
277 /// <param name='sender'>
278 /// Sender.
279 /// </param>
280 /// <param name='method'>
281 /// Method.
282 /// </param>
283 /// <param name='args'>
284 /// Arguments.
285 /// </param>
286 public void ClassifiedsRequest(Object sender, string method, List<String> args)
287 {
288 if (!(sender is IClientAPI))
289 return;
290
291 IClientAPI remoteClient = (IClientAPI)sender;
292
293 UUID targetID;
294 UUID.TryParse(args[0], out targetID);
295
296 // Can't handle NPC yet...
297 ScenePresence p = FindPresence(targetID);
298
299 if (null != p)
300 {
301 if (p.PresenceType == PresenceType.Npc)
302 return;
303 }
304
305 string serverURI = string.Empty;
306 bool foreign = GetUserProfileServerURI(targetID, out serverURI);
307 UUID creatorId = UUID.Zero;
308
309 OSDMap parameters= new OSDMap();
310 UUID.TryParse(args[0], out creatorId);
311 parameters.Add("creatorId", OSD.FromUUID(creatorId));
312 OSD Params = (OSD)parameters;
313 if(!JsonRpcRequest(ref Params, "avatarclassifiedsrequest", serverURI, UUID.Random().ToString()))
314 {
315 // Error Handling here!
316 // if(parameters.ContainsKey("message")
317 }
318
319 parameters = (OSDMap)Params;
320
321 OSDArray list = (OSDArray)parameters["result"];
322
323 Dictionary<UUID, string> classifieds = new Dictionary<UUID, string>();
324
325 foreach(OSD map in list)
326 {
327 OSDMap m = (OSDMap)map;
328 UUID cid = m["classifieduuid"].AsUUID();
329 string name = m["name"].AsString();
330
331 classifieds[cid] = name;
332
333 if(!classifiedCache.ContainsKey(cid))
334 {
335 lock(classifiedCache)
336 classifiedCache.Add(cid,creatorId);
337 lock(classifiedInterest)
338 classifiedInterest.Add(cid, 0);
339 }
340
341 lock(classifiedInterest)
342 classifiedInterest[cid] ++;
343 }
344
345 remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds);
346 }
347
348 public void ClassifiedInfoRequest(UUID queryClassifiedID, IClientAPI remoteClient)
349 {
350 UUID target = remoteClient.AgentId;
351 UserClassifiedAdd ad = new UserClassifiedAdd();
352 ad.ClassifiedId = queryClassifiedID;
353
354 if(classifiedCache.ContainsKey(queryClassifiedID))
355 {
356 target = classifiedCache[queryClassifiedID];
357
358 lock(classifiedInterest)
359 classifiedInterest[queryClassifiedID] --;
360
361 if(classifiedInterest[queryClassifiedID] == 0)
362 {
363 lock(classifiedInterest)
364 classifiedInterest.Remove(queryClassifiedID);
365 lock(classifiedCache)
366 classifiedCache.Remove(queryClassifiedID);
367 }
368 }
369
370 string serverURI = string.Empty;
371 bool foreign = GetUserProfileServerURI(target, out serverURI);
372
373 object Ad = (object)ad;
374 if(!JsonRpcRequest(ref Ad, "classifieds_info_query", serverURI, UUID.Random().ToString()))
375 {
376 remoteClient.SendAgentAlertMessage(
377 "Error getting classified info", false);
378 return;
379 }
380 ad = (UserClassifiedAdd) Ad;
381
382 if(ad.CreatorId == UUID.Zero)
383 return;
384
385 Vector3 globalPos = new Vector3();
386 Vector3.TryParse(ad.GlobalPos, out globalPos);
387
388 remoteClient.SendClassifiedInfoReply(ad.ClassifiedId, ad.CreatorId, (uint)ad.CreationDate, (uint)ad.ExpirationDate,
389 (uint)ad.Category, ad.Name, ad.Description, ad.ParcelId, (uint)ad.ParentEstate,
390 ad.SnapshotId, ad.SimName, globalPos, ad.ParcelName, ad.Flags, ad.Price);
391
392 }
393
394 /// <summary>
395 /// Classifieds info update.
396 /// </summary>
397 /// <param name='queryclassifiedID'>
398 /// Queryclassified I.
399 /// </param>
400 /// <param name='queryCategory'>
401 /// Query category.
402 /// </param>
403 /// <param name='queryName'>
404 /// Query name.
405 /// </param>
406 /// <param name='queryDescription'>
407 /// Query description.
408 /// </param>
409 /// <param name='queryParcelID'>
410 /// Query parcel I.
411 /// </param>
412 /// <param name='queryParentEstate'>
413 /// Query parent estate.
414 /// </param>
415 /// <param name='querySnapshotID'>
416 /// Query snapshot I.
417 /// </param>
418 /// <param name='queryGlobalPos'>
419 /// Query global position.
420 /// </param>
421 /// <param name='queryclassifiedFlags'>
422 /// Queryclassified flags.
423 /// </param>
424 /// <param name='queryclassifiedPrice'>
425 /// Queryclassified price.
426 /// </param>
427 /// <param name='remoteClient'>
428 /// Remote client.
429 /// </param>
430 public void ClassifiedInfoUpdate(UUID queryclassifiedID, uint queryCategory, string queryName, string queryDescription, UUID queryParcelID,
431 uint queryParentEstate, UUID querySnapshotID, Vector3 queryGlobalPos, byte queryclassifiedFlags,
432 int queryclassifiedPrice, IClientAPI remoteClient)
433 {
434 UserClassifiedAdd ad = new UserClassifiedAdd();
435
436 Scene s = (Scene) remoteClient.Scene;
437 Vector3 pos = remoteClient.SceneAgent.AbsolutePosition;
438 ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y);
439 ScenePresence p = FindPresence(remoteClient.AgentId);
440 Vector3 avaPos = p.AbsolutePosition;
441
442 string serverURI = string.Empty;
443 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
444
445 if (land == null)
446 {
447 ad.ParcelName = string.Empty;
448 }
449 else
450 {
451 ad.ParcelName = land.LandData.Name;
452 }
453
454 ad.CreatorId = remoteClient.AgentId;
455 ad.ClassifiedId = queryclassifiedID;
456 ad.Category = Convert.ToInt32(queryCategory);
457 ad.Name = queryName;
458 ad.Description = queryDescription;
459 ad.ParentEstate = Convert.ToInt32(queryParentEstate);
460 ad.SnapshotId = querySnapshotID;
461 ad.SimName = remoteClient.Scene.RegionInfo.RegionName;
462 ad.GlobalPos = queryGlobalPos.ToString ();
463 ad.Flags = queryclassifiedFlags;
464 ad.Price = queryclassifiedPrice;
465 ad.ParcelId = p.currentParcelUUID;
466
467 object Ad = ad;
468
469 OSD X = OSD.SerializeMembers(Ad);
470
471 if(!JsonRpcRequest(ref Ad, "classified_update", serverURI, UUID.Random().ToString()))
472 {
473 remoteClient.SendAgentAlertMessage(
474 "Error updating classified", false);
475 }
476 }
477
478 /// <summary>
479 /// Classifieds delete.
480 /// </summary>
481 /// <param name='queryClassifiedID'>
482 /// Query classified I.
483 /// </param>
484 /// <param name='remoteClient'>
485 /// Remote client.
486 /// </param>
487 public void ClassifiedDelete(UUID queryClassifiedID, IClientAPI remoteClient)
488 {
489 string serverURI = string.Empty;
490 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
491
492 UUID classifiedId;
493 OSDMap parameters= new OSDMap();
494 UUID.TryParse(queryClassifiedID.ToString(), out classifiedId);
495 parameters.Add("classifiedId", OSD.FromUUID(classifiedId));
496 OSD Params = (OSD)parameters;
497 if(!JsonRpcRequest(ref Params, "classified_delete", serverURI, UUID.Random().ToString()))
498 {
499 remoteClient.SendAgentAlertMessage(
500 "Error classified delete", false);
501 }
502
503 parameters = (OSDMap)Params;
504 }
505 #endregion Classified
506
507 #region Picks
508 /// <summary>
509 /// Handles the avatar picks request.
510 /// </summary>
511 /// <param name='sender'>
512 /// Sender.
513 /// </param>
514 /// <param name='method'>
515 /// Method.
516 /// </param>
517 /// <param name='args'>
518 /// Arguments.
519 /// </param>
520 public void PicksRequest(Object sender, string method, List<String> args)
521 {
522 if (!(sender is IClientAPI))
523 return;
524
525 IClientAPI remoteClient = (IClientAPI)sender;
526
527 UUID targetId;
528 UUID.TryParse(args[0], out targetId);
529
530 // Can't handle NPC yet...
531 ScenePresence p = FindPresence(targetId);
532
533 if (null != p)
534 {
535 if (p.PresenceType == PresenceType.Npc)
536 return;
537 }
538
539 string serverURI = string.Empty;
540 bool foreign = GetUserProfileServerURI(targetId, out serverURI);
541
542 OSDMap parameters= new OSDMap();
543 parameters.Add("creatorId", OSD.FromUUID(targetId));
544 OSD Params = (OSD)parameters;
545 if(!JsonRpcRequest(ref Params, "avatarpicksrequest", serverURI, UUID.Random().ToString()))
546 {
547 remoteClient.SendAgentAlertMessage(
548 "Error requesting picks", false);
549 return;
550 }
551
552 parameters = (OSDMap)Params;
553
554 OSDArray list = (OSDArray)parameters["result"];
555
556 Dictionary<UUID, string> picks = new Dictionary<UUID, string>();
557
558 foreach(OSD map in list)
559 {
560 OSDMap m = (OSDMap)map;
561 UUID cid = m["pickuuid"].AsUUID();
562 string name = m["name"].AsString();
563
564 m_log.DebugFormat("[PROFILES]: PicksRequest {0}", name);
565
566 picks[cid] = name;
567 }
568 remoteClient.SendAvatarPicksReply(new UUID(args[0]), picks);
569 }
570
571 /// <summary>
572 /// Handles the pick info request.
573 /// </summary>
574 /// <param name='sender'>
575 /// Sender.
576 /// </param>
577 /// <param name='method'>
578 /// Method.
579 /// </param>
580 /// <param name='args'>
581 /// Arguments.
582 /// </param>
583 public void PickInfoRequest(Object sender, string method, List<String> args)
584 {
585 if (!(sender is IClientAPI))
586 return;
587
588 UUID targetID;
589 UUID.TryParse(args[0], out targetID);
590 string serverURI = string.Empty;
591 bool foreign = GetUserProfileServerURI(targetID, out serverURI);
592 IClientAPI remoteClient = (IClientAPI)sender;
593
594 UserProfilePick pick = new UserProfilePick();
595 UUID.TryParse(args[0], out pick.CreatorId);
596 UUID.TryParse(args[1], out pick.PickId);
597
598
599 object Pick = (object)pick;
600 if(!JsonRpcRequest(ref Pick, "pickinforequest", serverURI, UUID.Random().ToString()))
601 {
602 remoteClient.SendAgentAlertMessage(
603 "Error selecting pick", false);
604 }
605 pick = (UserProfilePick) Pick;
606 if(pick.SnapshotId == UUID.Zero)
607 {
608 // In case of a new UserPick, the data may not be ready and we would send wrong data, skip it...
609 m_log.DebugFormat("[PROFILES]: PickInfoRequest: SnapshotID is {0}", UUID.Zero.ToString());
610 return;
611 }
612
613 Vector3 globalPos;
614 Vector3.TryParse(pick.GlobalPos,out globalPos);
615
616 m_log.DebugFormat("[PROFILES]: PickInfoRequest: {0} : {1}", pick.Name.ToString(), pick.SnapshotId.ToString());
617
618 remoteClient.SendPickInfoReply(pick.PickId,pick.CreatorId,pick.TopPick,pick.ParcelId,pick.Name,
619 pick.Desc,pick.SnapshotId,pick.User,pick.OriginalName,pick.SimName,
620 globalPos,pick.SortOrder,pick.Enabled);
621 }
622
623 /// <summary>
624 /// Updates the userpicks
625 /// </summary>
626 /// <param name='remoteClient'>
627 /// Remote client.
628 /// </param>
629 /// <param name='pickID'>
630 /// Pick I.
631 /// </param>
632 /// <param name='creatorID'>
633 /// the creator of the pick
634 /// </param>
635 /// <param name='topPick'>
636 /// Top pick.
637 /// </param>
638 /// <param name='name'>
639 /// Name.
640 /// </param>
641 /// <param name='desc'>
642 /// Desc.
643 /// </param>
644 /// <param name='snapshotID'>
645 /// Snapshot I.
646 /// </param>
647 /// <param name='sortOrder'>
648 /// Sort order.
649 /// </param>
650 /// <param name='enabled'>
651 /// Enabled.
652 /// </param>
653 public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled)
654 {
655
656 m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString());
657 UserProfilePick pick = new UserProfilePick();
658 string serverURI = string.Empty;
659 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
660 ScenePresence p = FindPresence(remoteClient.AgentId);
661
662 Vector3 avaPos = p.AbsolutePosition;
663 // Getting the global position for the Avatar
664 Vector3 posGlobal = new Vector3(remoteClient.Scene.RegionInfo.RegionLocX*Constants.RegionSize + avaPos.X,
665 remoteClient.Scene.RegionInfo.RegionLocY*Constants.RegionSize + avaPos.Y,
666 avaPos.Z);
667
668 string landOwnerName = string.Empty;
669 ILandObject land = p.Scene.LandChannel.GetLandObject(avaPos.X, avaPos.Y);
670 if(land.LandData.IsGroupOwned)
671 {
672 IGroupsModule groupMod = p.Scene.RequestModuleInterface<IGroupsModule>();
673 UUID groupId = land.LandData.GroupID;
674 GroupRecord groupRecord = groupMod.GetGroupRecord(groupId);
675 landOwnerName = groupRecord.GroupName;
676 }
677 else
678 {
679 IUserAccountService accounts = p.Scene.RequestModuleInterface<IUserAccountService>();
680 UserAccount user = accounts.GetUserAccount(p.Scene.RegionInfo.ScopeID, land.LandData.OwnerID);
681 landOwnerName = user.Name;
682 }
683
684 pick.PickId = pickID;
685 pick.CreatorId = creatorID;
686 pick.TopPick = topPick;
687 pick.Name = name;
688 pick.Desc = desc;
689 pick.ParcelId = p.currentParcelUUID;
690 pick.SnapshotId = snapshotID;
691 pick.User = landOwnerName;
692 pick.SimName = remoteClient.Scene.RegionInfo.RegionName;
693 pick.GlobalPos = posGlobal.ToString();
694 pick.SortOrder = sortOrder;
695 pick.Enabled = enabled;
696
697 object Pick = (object)pick;
698 if(!JsonRpcRequest(ref Pick, "picks_update", serverURI, UUID.Random().ToString()))
699 {
700 remoteClient.SendAgentAlertMessage(
701 "Error updating pick", false);
702 }
703
704 m_log.DebugFormat("[PROFILES]: Finish PickInfoUpdate {0} {1}", pick.Name, pick.PickId.ToString());
705 }
706
707 /// <summary>
708 /// Delete a Pick
709 /// </summary>
710 /// <param name='remoteClient'>
711 /// Remote client.
712 /// </param>
713 /// <param name='queryPickID'>
714 /// Query pick I.
715 /// </param>
716 public void PickDelete(IClientAPI remoteClient, UUID queryPickID)
717 {
718 string serverURI = string.Empty;
719 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
720
721 OSDMap parameters= new OSDMap();
722 parameters.Add("pickId", OSD.FromUUID(queryPickID));
723 OSD Params = (OSD)parameters;
724 if(!JsonRpcRequest(ref Params, "picks_delete", serverURI, UUID.Random().ToString()))
725 {
726 remoteClient.SendAgentAlertMessage(
727 "Error picks delete", false);
728 }
729 }
730 #endregion Picks
731
732 #region Notes
733 /// <summary>
734 /// Handles the avatar notes request.
735 /// </summary>
736 /// <param name='sender'>
737 /// Sender.
738 /// </param>
739 /// <param name='method'>
740 /// Method.
741 /// </param>
742 /// <param name='args'>
743 /// Arguments.
744 /// </param>
745 public void NotesRequest(Object sender, string method, List<String> args)
746 {
747 UserProfileNotes note = new UserProfileNotes();
748
749 if (!(sender is IClientAPI))
750 return;
751
752 IClientAPI remoteClient = (IClientAPI)sender;
753 string serverURI = string.Empty;
754 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
755 note.TargetId = remoteClient.AgentId;
756 UUID.TryParse(args[0], out note.UserId);
757
758 object Note = (object)note;
759 if(!JsonRpcRequest(ref Note, "avatarnotesrequest", serverURI, UUID.Random().ToString()))
760 {
761 remoteClient.SendAgentAlertMessage(
762 "Error requesting note", false);
763 }
764 note = (UserProfileNotes) Note;
765
766 remoteClient.SendAvatarNotesReply(note.TargetId, note.Notes);
767 }
768
769 /// <summary>
770 /// Avatars the notes update.
771 /// </summary>
772 /// <param name='remoteClient'>
773 /// Remote client.
774 /// </param>
775 /// <param name='queryTargetID'>
776 /// Query target I.
777 /// </param>
778 /// <param name='queryNotes'>
779 /// Query notes.
780 /// </param>
781 public void NotesUpdate(IClientAPI remoteClient, UUID queryTargetID, string queryNotes)
782 {
783 UserProfileNotes note = new UserProfileNotes();
784
785 note.UserId = remoteClient.AgentId;
786 note.TargetId = queryTargetID;
787 note.Notes = queryNotes;
788
789 string serverURI = string.Empty;
790 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
791
792 object Note = note;
793 if(!JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString()))
794 {
795 remoteClient.SendAgentAlertMessage(
796 "Error updating note", false);
797 }
798 }
799 #endregion Notes
800
801 #region Avatar Properties
802 /// <summary>
803 /// Update the avatars interests .
804 /// </summary>
805 /// <param name='remoteClient'>
806 /// Remote client.
807 /// </param>
808 /// <param name='wantmask'>
809 /// Wantmask.
810 /// </param>
811 /// <param name='wanttext'>
812 /// Wanttext.
813 /// </param>
814 /// <param name='skillsmask'>
815 /// Skillsmask.
816 /// </param>
817 /// <param name='skillstext'>
818 /// Skillstext.
819 /// </param>
820 /// <param name='languages'>
821 /// Languages.
822 /// </param>
823 public void AvatarInterestsUpdate(IClientAPI remoteClient, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages)
824 {
825 UserProfileProperties prop = new UserProfileProperties();
826
827 prop.UserId = remoteClient.AgentId;
828 prop.WantToMask = (int)wantmask;
829 prop.WantToText = wanttext;
830 prop.SkillsMask = (int)skillsmask;
831 prop.SkillsText = skillstext;
832 prop.Language = languages;
833
834 string serverURI = string.Empty;
835 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
836
837 object Param = prop;
838 if(!JsonRpcRequest(ref Param, "avatar_interests_update", serverURI, UUID.Random().ToString()))
839 {
840 remoteClient.SendAgentAlertMessage(
841 "Error updating interests", false);
842 }
843 }
844
845 public void RequestAvatarProperties(IClientAPI remoteClient, UUID avatarID)
846 {
847 if ( String.IsNullOrEmpty(avatarID.ToString()) || String.IsNullOrEmpty(remoteClient.AgentId.ToString()))
848 {
849 // Looking for a reason that some viewers are sending null Id's
850 m_log.DebugFormat("[PROFILES]: This should not happen remoteClient.AgentId {0} - avatarID {1}", remoteClient.AgentId, avatarID);
851 return;
852 }
853
854 // Can't handle NPC yet...
855 ScenePresence p = FindPresence(avatarID);
856
857 if (null != p)
858 {
859 if (p.PresenceType == PresenceType.Npc)
860 return;
861 }
862
863 string serverURI = string.Empty;
864 bool foreign = GetUserProfileServerURI(avatarID, out serverURI);
865
866 UserAccount account = null;
867 Dictionary<string,object> userInfo;
868
869 if (!foreign)
870 {
871 account = Scene.UserAccountService.GetUserAccount(Scene.RegionInfo.ScopeID, avatarID);
872 }
873 else
874 {
875 userInfo = new Dictionary<string, object>();
876 }
877
878 Byte[] charterMember = new Byte[1];
879 string born = String.Empty;
880 uint flags = 0x00;
881
882 if (null != account)
883 {
884 if (account.UserTitle == "")
885 {
886 charterMember[0] = (Byte)((account.UserFlags & 0xf00) >> 8);
887 }
888 else
889 {
890 charterMember = Utils.StringToBytes(account.UserTitle);
891 }
892
893 born = Util.ToDateTime(account.Created).ToString(
894 "M/d/yyyy", CultureInfo.InvariantCulture);
895 flags = (uint)(account.UserFlags & 0xff);
896 }
897 else
898 {
899 if (GetUserAccountData(avatarID, out userInfo) == true)
900 {
901 if ((string)userInfo["user_title"] == "")
902 {
903 charterMember[0] = (Byte)(((Byte)userInfo["user_flags"] & 0xf00) >> 8);
904 }
905 else
906 {
907 charterMember = Utils.StringToBytes((string)userInfo["user_title"]);
908 }
909
910 int val_born = (int)userInfo["user_created"];
911 born = Util.ToDateTime(val_born).ToString(
912 "M/d/yyyy", CultureInfo.InvariantCulture);
913
914 // picky, picky
915 int val_flags = (int)userInfo["user_flags"];
916 flags = (uint)(val_flags & 0xff);
917 }
918 }
919
920 UserProfileProperties props = new UserProfileProperties();
921 string result = string.Empty;
922
923 props.UserId = avatarID;
924 GetProfileData(ref props, out result);
925
926 remoteClient.SendAvatarProperties(props.UserId, props.AboutText, born, charterMember , props.FirstLifeText, flags,
927 props.FirstLifeImageId, props.ImageId, props.WebUrl, props.PartnerId);
928
929
930 remoteClient.SendAvatarInterestsReply(props.UserId, (uint)props.WantToMask, props.WantToText, (uint)props.SkillsMask,
931 props.SkillsText, props.Language);
932 }
933
934 /// <summary>
935 /// Updates the avatar properties.
936 /// </summary>
937 /// <param name='remoteClient'>
938 /// Remote client.
939 /// </param>
940 /// <param name='newProfile'>
941 /// New profile.
942 /// </param>
943 public void AvatarPropertiesUpdate(IClientAPI remoteClient, UserProfileData newProfile)
944 {
945 if (remoteClient.AgentId == newProfile.ID)
946 {
947 UserProfileProperties prop = new UserProfileProperties();
948
949 prop.UserId = remoteClient.AgentId;
950 prop.WebUrl = newProfile.ProfileUrl;
951 prop.ImageId = newProfile.Image;
952 prop.AboutText = newProfile.AboutText;
953 prop.FirstLifeImageId = newProfile.FirstLifeImage;
954 prop.FirstLifeText = newProfile.FirstLifeAboutText;
955
956 string serverURI = string.Empty;
957 bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
958
959 object Prop = prop;
960
961 if(!JsonRpcRequest(ref Prop, "avatar_properties_update", serverURI, UUID.Random().ToString()))
962 {
963 remoteClient.SendAgentAlertMessage(
964 "Error updating properties", false);
965 }
966
967 RequestAvatarProperties(remoteClient, newProfile.ID);
968 }
969 }
970
971
972 /// <summary>
973 /// Gets the profile data.
974 /// </summary>
975 /// <returns>
976 /// The profile data.
977 /// </returns>
978 /// <param name='userID'>
979 /// User I.
980 /// </param>
981 bool GetProfileData(ref UserProfileProperties properties, out string message)
982 {
983 // Can't handle NPC yet...
984 ScenePresence p = FindPresence(properties.UserId);
985
986 if (null != p)
987 {
988 if (p.PresenceType == PresenceType.Npc)
989 {
990 message = "Id points to NPC";
991 return false;
992 }
993 }
994
995 string serverURI = string.Empty;
996 bool foreign = GetUserProfileServerURI(properties.UserId, out serverURI);
997
998 // This is checking a friend on the home grid
999 // Not HG friend
1000 if ( String.IsNullOrEmpty(serverURI))
1001 {
1002 message = "No Presence - foreign friend";
1003 return false;
1004 }
1005
1006 object Prop = (object)properties;
1007 JsonRpcRequest(ref Prop, "avatar_properties_request", serverURI, UUID.Random().ToString());
1008 properties = (UserProfileProperties)Prop;
1009
1010 message = "Success";
1011 return true;
1012 }
1013 #endregion Avatar Properties
1014
1015 #region Utils
1016 bool GetImageAssets(UUID avatarId)
1017 {
1018 string profileServerURI = string.Empty;
1019 string assetServerURI = string.Empty;
1020
1021 bool foreign = GetUserProfileServerURI(avatarId, out profileServerURI);
1022
1023 if(!foreign)
1024 return true;
1025
1026 assetServerURI = UserManagementModule.GetUserServerURL(avatarId, "AssetServerURI");
1027
1028 OSDMap parameters= new OSDMap();
1029 parameters.Add("avatarId", OSD.FromUUID(avatarId));
1030 OSD Params = (OSD)parameters;
1031 if(!JsonRpcRequest(ref Params, "image_assets_request", profileServerURI, UUID.Random().ToString()))
1032 {
1033 // Error Handling here!
1034 // if(parameters.ContainsKey("message")
1035 return false;
1036 }
1037
1038 parameters = (OSDMap)Params;
1039
1040 OSDArray list = (OSDArray)parameters["result"];
1041
1042 foreach(OSD asset in list)
1043 {
1044 OSDString assetId = (OSDString)asset;
1045
1046 Scene.AssetService.Get(string.Format("{0}/{1}",assetServerURI, assetId.AsString()), this,
1047 delegate (string assetID, Object s, AssetBase a)
1048 {
1049 // m_log.DebugFormat("[PROFILES]: Getting Image Assets {0}", assetID);
1050 return;
1051 });
1052 }
1053 return true;
1054 }
1055
1056 /// <summary>
1057 /// Gets the user account data.
1058 /// </summary>
1059 /// <returns>
1060 /// The user profile data.
1061 /// </returns>
1062 /// <param name='userID'>
1063 /// If set to <c>true</c> user I.
1064 /// </param>
1065 /// <param name='userInfo'>
1066 /// If set to <c>true</c> user info.
1067 /// </param>
1068 bool GetUserAccountData(UUID userID, out Dictionary<string, object> userInfo)
1069 {
1070 Dictionary<string,object> info = new Dictionary<string, object>();
1071
1072 if (UserManagementModule.IsLocalGridUser(userID))
1073 {
1074 // Is local
1075 IUserAccountService uas = Scene.UserAccountService;
1076 UserAccount account = uas.GetUserAccount(Scene.RegionInfo.ScopeID, userID);
1077
1078 info["user_flags"] = account.UserFlags;
1079 info["user_created"] = account.Created;
1080
1081 if (!String.IsNullOrEmpty(account.UserTitle))
1082 info["user_title"] = account.UserTitle;
1083 else
1084 info["user_title"] = "";
1085
1086 userInfo = info;
1087
1088 return false;
1089 }
1090 else
1091 {
1092 // Is Foreign
1093 string home_url = UserManagementModule.GetUserServerURL(userID, "HomeURI");
1094
1095 if (String.IsNullOrEmpty(home_url))
1096 {
1097 info["user_flags"] = 0;
1098 info["user_created"] = 0;
1099 info["user_title"] = "Unavailable";
1100
1101 userInfo = info;
1102 return true;
1103 }
1104
1105 UserAgentServiceConnector uConn = new UserAgentServiceConnector(home_url);
1106
1107 Dictionary<string, object> account = uConn.GetUserInfo(userID);
1108
1109 if (account.Count > 0)
1110 {
1111 if (account.ContainsKey("user_flags"))
1112 info["user_flags"] = account["user_flags"];
1113 else
1114 info["user_flags"] = "";
1115
1116 if (account.ContainsKey("user_created"))
1117 info["user_created"] = account["user_created"];
1118 else
1119 info["user_created"] = "";
1120
1121 info["user_title"] = "HG Visitor";
1122 }
1123 else
1124 {
1125 info["user_flags"] = 0;
1126 info["user_created"] = 0;
1127 info["user_title"] = "HG Visitor";
1128 }
1129 userInfo = info;
1130 return true;
1131 }
1132 }
1133
1134 /// <summary>
1135 /// Gets the user profile server UR.
1136 /// </summary>
1137 /// <returns>
1138 /// The user profile server UR.
1139 /// </returns>
1140 /// <param name='userID'>
1141 /// If set to <c>true</c> user I.
1142 /// </param>
1143 /// <param name='serverURI'>
1144 /// If set to <c>true</c> server UR.
1145 /// </param>
1146 bool GetUserProfileServerURI(UUID userID, out string serverURI)
1147 {
1148 bool local;
1149 local = UserManagementModule.IsLocalGridUser(userID);
1150
1151 if (!local)
1152 {
1153 serverURI = UserManagementModule.GetUserServerURL(userID, "ProfileServerURI");
1154 // Is Foreign
1155 return true;
1156 }
1157 else
1158 {
1159 serverURI = ProfileServerUri;
1160 // Is local
1161 return false;
1162 }
1163 }
1164
1165 /// <summary>
1166 /// Finds the presence.
1167 /// </summary>
1168 /// <returns>
1169 /// The presence.
1170 /// </returns>
1171 /// <param name='clientID'>
1172 /// Client I.
1173 /// </param>
1174 ScenePresence FindPresence(UUID clientID)
1175 {
1176 ScenePresence p;
1177
1178 p = Scene.GetScenePresence(clientID);
1179 if (p != null && !p.IsChildAgent)
1180 return p;
1181
1182 return null;
1183 }
1184 #endregion Util
1185
1186 #region Web Util
1187 /// <summary>
1188 /// Sends json-rpc request with a serializable type.
1189 /// </summary>
1190 /// <returns>
1191 /// OSD Map.
1192 /// </returns>
1193 /// <param name='parameters'>
1194 /// Serializable type .
1195 /// </param>
1196 /// <param name='method'>
1197 /// Json-rpc method to call.
1198 /// </param>
1199 /// <param name='uri'>
1200 /// URI of json-rpc service.
1201 /// </param>
1202 /// <param name='jsonId'>
1203 /// Id for our call.
1204 /// </param>
1205 bool JsonRpcRequest(ref object parameters, string method, string uri, string jsonId)
1206 {
1207 if (jsonId == null)
1208 throw new ArgumentNullException ("jsonId");
1209 if (uri == null)
1210 throw new ArgumentNullException ("uri");
1211 if (method == null)
1212 throw new ArgumentNullException ("method");
1213 if (parameters == null)
1214 throw new ArgumentNullException ("parameters");
1215
1216 // Prep our payload
1217 OSDMap json = new OSDMap();
1218
1219 json.Add("jsonrpc", OSD.FromString("2.0"));
1220 json.Add("id", OSD.FromString(jsonId));
1221 json.Add("method", OSD.FromString(method));
1222 // Experiment
1223 json.Add("params", OSD.SerializeMembers(parameters));
1224
1225 string jsonRequestData = OSDParser.SerializeJsonString(json);
1226 byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
1227
1228 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
1229 // webRequest.Credentials = new NetworkCredential(rpcUser, rpcPass);
1230 webRequest.ContentType = "application/json-rpc";
1231 webRequest.Method = "POST";
1232
1233 Stream dataStream = webRequest.GetRequestStream();
1234 dataStream.Write(content, 0, content.Length);
1235 dataStream.Close();
1236
1237 WebResponse webResponse = null;
1238 try
1239 {
1240 webResponse = webRequest.GetResponse();
1241 }
1242 catch (WebException e)
1243 {
1244 Console.WriteLine("Web Error" + e.Message);
1245 Console.WriteLine ("Please check input");
1246 return false;
1247 }
1248
1249 byte[] buf = new byte[8192];
1250 Stream rstream = webResponse.GetResponseStream();
1251 OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream);
1252
1253 if(mret.ContainsKey("error"))
1254 return false;
1255
1256 // get params...
1257 OSD.DeserializeMembers(ref parameters, (OSDMap) mret["result"]);
1258 return true;
1259 }
1260
1261 /// <summary>
1262 /// Sends json-rpc request with OSD parameter.
1263 /// </summary>
1264 /// <returns>
1265 /// The rpc request.
1266 /// </returns>
1267 /// <param name='data'>
1268 /// data - incoming as parameters, outgong as result/error
1269 /// </param>
1270 /// <param name='method'>
1271 /// Json-rpc method to call.
1272 /// </param>
1273 /// <param name='uri'>
1274 /// URI of json-rpc service.
1275 /// </param>
1276 /// <param name='jsonId'>
1277 /// If set to <c>true</c> json identifier.
1278 /// </param>
1279 bool JsonRpcRequest(ref OSD data, string method, string uri, string jsonId)
1280 {
1281 OSDMap map = new OSDMap();
1282
1283 map["jsonrpc"] = "2.0";
1284 if(string.IsNullOrEmpty(jsonId))
1285 map["id"] = UUID.Random().ToString();
1286 else
1287 map["id"] = jsonId;
1288
1289 map["method"] = method;
1290 map["params"] = data;
1291
1292 string jsonRequestData = OSDParser.SerializeJsonString(map);
1293 byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
1294
1295 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
1296 webRequest.ContentType = "application/json-rpc";
1297 webRequest.Method = "POST";
1298
1299 Stream dataStream = webRequest.GetRequestStream();
1300 dataStream.Write(content, 0, content.Length);
1301 dataStream.Close();
1302
1303 WebResponse webResponse = null;
1304 try
1305 {
1306 webResponse = webRequest.GetResponse();
1307 }
1308 catch (WebException e)
1309 {
1310 Console.WriteLine("Web Error" + e.Message);
1311 Console.WriteLine ("Please check input");
1312 return false;
1313 }
1314
1315 byte[] buf = new byte[8192];
1316 Stream rstream = webResponse.GetResponseStream();
1317
1318 OSDMap response = new OSDMap();
1319 response = (OSDMap)OSDParser.DeserializeJson(rstream);
1320 if(response.ContainsKey("error"))
1321 {
1322 data = response["error"];
1323 return false;
1324 }
1325
1326 data = response;
1327
1328 return true;
1329 }
1330 #endregion Web Util
1331 }
1332}
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index ed867b8..b9c88d4 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -280,10 +280,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
280 280
281 private void OnConnectionClosed(IClientAPI client) 281 private void OnConnectionClosed(IClientAPI client)
282 { 282 {
283 if (client.IsLoggingOut) 283 if (client.IsLoggingOut && m_entityTransferStateMachine.UpdateInTransit(client.AgentId, AgentTransferState.Aborting))
284 { 284 {
285 m_entityTransferStateMachine.UpdateInTransit(client.AgentId, AgentTransferState.Aborting);
286
287 m_log.DebugFormat( 285 m_log.DebugFormat(
288 "[ENTITY TRANSFER MODULE]: Aborted teleport request from {0} in {1} due to simultaneous logout", 286 "[ENTITY TRANSFER MODULE]: Aborted teleport request from {0} in {1} due to simultaneous logout",
289 client.Name, Scene.Name); 287 client.Name, Scene.Name);
@@ -944,6 +942,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
944 EnableChildAgents(sp); 942 EnableChildAgents(sp);
945 943
946 // Finally, kill the agent we just created at the destination. 944 // Finally, kill the agent we just created at the destination.
945 // XXX: Possibly this should be done asynchronously.
947 Scene.SimulationService.CloseAgent(finalDestination, sp.UUID); 946 Scene.SimulationService.CloseAgent(finalDestination, sp.UUID);
948 } 947 }
949 948
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 4c11135..d5c2661 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
358 bool asAttachment) 358 bool asAttachment)
359 { 359 {
360 CoalescedSceneObjects coa = new CoalescedSceneObjects(UUID.Zero); 360 CoalescedSceneObjects coa = new CoalescedSceneObjects(UUID.Zero);
361 Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>(); 361// Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>();
362 362
363 foreach (SceneObjectGroup objectGroup in objlist) 363 foreach (SceneObjectGroup objectGroup in objlist)
364 { 364 {
@@ -379,7 +379,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
379 objectGroup.AbsolutePosition.Z); 379 objectGroup.AbsolutePosition.Z);
380 380
381 Quaternion inventoryStoredRotation = objectGroup.GroupRotation; 381 Quaternion inventoryStoredRotation = objectGroup.GroupRotation;
382 originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition; 382 //originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition;
383 383
384 // Restore attachment data after trip through the sim 384 // Restore attachment data after trip through the sim
385 if (objectGroup.RootPart.AttachPoint > 0) 385 if (objectGroup.RootPart.AttachPoint > 0)
@@ -423,9 +423,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
423 else 423 else
424 itemXml = SceneObjectSerializer.ToOriginalXmlFormat(objlist[0], !asAttachment); 424 itemXml = SceneObjectSerializer.ToOriginalXmlFormat(objlist[0], !asAttachment);
425 425
426 // Restore the position of each group now that it has been stored to inventory. 426// // Restore the position of each group now that it has been stored to inventory.
427 foreach (SceneObjectGroup objectGroup in objlist) 427// foreach (SceneObjectGroup objectGroup in objlist)
428 objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID]; 428// objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];
429 429
430 InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID); 430 InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID);
431 431
@@ -707,6 +707,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
707 InventoryFolderBase f = new InventoryFolderBase(so.FromFolderID, userID); 707 InventoryFolderBase f = new InventoryFolderBase(so.FromFolderID, userID);
708 if (f != null) 708 if (f != null)
709 folder = m_Scene.InventoryService.GetFolder(f); 709 folder = m_Scene.InventoryService.GetFolder(f);
710
711 if(folder.Type == 14 || folder.Type == 16)
712 {
713 // folder.Type = 6;
714 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.Object);
715 }
710 } 716 }
711 } 717 }
712 718
@@ -876,7 +882,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
876 return null; 882 return null;
877 } 883 }
878 884
879 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) 885 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, veclist, attachment))
880 return null; 886 return null;
881 887
882 for (int i = 0; i < objlist.Count; i++) 888 for (int i = 0; i < objlist.Count; i++)
@@ -975,10 +981,15 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
975 /// <param name="item"></param> 981 /// <param name="item"></param>
976 /// <param name="objlist"></param> 982 /// <param name="objlist"></param>
977 /// <param name="pos"></param> 983 /// <param name="pos"></param>
984 /// <param name="veclist">
985 /// List of vector position adjustments for a coalesced objects. For ordinary objects
986 /// this list will contain just Vector3.Zero. The order of adjustments must match the order of objlist
987 /// </param>
978 /// <param name="isAttachment"></param> 988 /// <param name="isAttachment"></param>
979 /// <returns>true if we can processed with rezzing, false if we need to abort</returns> 989 /// <returns>true if we can processed with rezzing, false if we need to abort</returns>
980 private bool DoPreRezWhenFromItem( 990 private bool DoPreRezWhenFromItem(
981 IClientAPI remoteClient, InventoryItemBase item, List<SceneObjectGroup> objlist, Vector3 pos, bool isAttachment) 991 IClientAPI remoteClient, InventoryItemBase item, List<SceneObjectGroup> objlist,
992 Vector3 pos, List<Vector3> veclist, bool isAttachment)
982 { 993 {
983 UUID fromUserInventoryItemId = UUID.Zero; 994 UUID fromUserInventoryItemId = UUID.Zero;
984 995
@@ -1001,28 +1012,29 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1001 } 1012 }
1002 } 1013 }
1003 1014
1004 int primcount = 0; 1015 for (int i = 0; i < objlist.Count; i++)
1005 foreach (SceneObjectGroup g in objlist)
1006 primcount += g.PrimCount;
1007
1008 if (!m_Scene.Permissions.CanRezObject(
1009 primcount, remoteClient.AgentId, pos)
1010 && !isAttachment)
1011 { 1016 {
1012 // The client operates in no fail mode. It will 1017 SceneObjectGroup g = objlist[i];
1013 // have already removed the item from the folder 1018
1014 // if it's no copy. 1019 if (!m_Scene.Permissions.CanRezObject(
1015 // Put it back if it's not an attachment 1020 g.PrimCount, remoteClient.AgentId, pos + veclist[i])
1016 // 1021 && !isAttachment)
1017 if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!isAttachment)) 1022 {
1018 remoteClient.SendBulkUpdateInventory(item); 1023 // The client operates in no fail mode. It will
1024 // have already removed the item from the folder
1025 // if it's no copy.
1026 // Put it back if it's not an attachment
1027 //
1028 if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!isAttachment))
1029 remoteClient.SendBulkUpdateInventory(item);
1019 1030
1020 ILandObject land = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y); 1031 ILandObject land = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y);
1021 remoteClient.SendAlertMessage(string.Format( 1032 remoteClient.SendAlertMessage(string.Format(
1022 "Can't rez object '{0}' at <{1:F3}, {2:F3}, {3:F3}> on parcel '{4}' in region {5}.", 1033 "Can't rez object '{0}' at <{1:F3}, {2:F3}, {3:F3}> on parcel '{4}' in region {5}.",
1023 item.Name, pos.X, pos.Y, pos.Z, land != null ? land.LandData.Name : "Unknown", m_Scene.RegionInfo.RegionName)); 1034 item.Name, pos.X, pos.Y, pos.Z, land != null ? land.LandData.Name : "Unknown", m_Scene.Name));
1024 1035
1025 return false; 1036 return false;
1037 }
1026 } 1038 }
1027 1039
1028 for (int i = 0; i < objlist.Count; i++) 1040 for (int i = 0; i < objlist.Count; i++)
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs
index 4ef57fe..ad3cf15 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs
@@ -50,12 +50,11 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
50 { 50 {
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 52
53
54 #region ISharedRegionModule 53 #region ISharedRegionModule
55 54
56 public new void Initialise(IConfigSource config) 55 public new void Initialise(IConfigSource config)
57 { 56 {
58 string umanmod = config.Configs["Modules"].GetString("UserManagementModule", base.Name); 57 string umanmod = config.Configs["Modules"].GetString("UserManagementModule", null);
59 if (umanmod == Name) 58 if (umanmod == Name)
60 { 59 {
61 m_Enabled = true; 60 m_Enabled = true;
@@ -71,7 +70,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
71 70
72 #endregion ISharedRegionModule 71 #endregion ISharedRegionModule
73 72
74 protected override void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users) 73 protected override void AddAdditionalUsers(string query, List<UserData> users)
75 { 74 {
76 if (query.Contains("@")) // First.Last@foo.com, maybe? 75 if (query.Contains("@")) // First.Last@foo.com, maybe?
77 { 76 {
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/Tests/HGUserManagementModuleTests.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/Tests/HGUserManagementModuleTests.cs
new file mode 100644
index 0000000..9d36aa5
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/Tests/HGUserManagementModuleTests.cs
@@ -0,0 +1,76 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using Nini.Config;
30using NUnit.Framework;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Region.CoreModules.Framework.UserManagement;
34using OpenSim.Tests.Common;
35using OpenSim.Tests.Common.Mock;
36
37namespace OpenSim.Region.CoreModules.Framework.UserManagement.Tests
38{
39 [TestFixture]
40 public class HGUserManagementModuleTests : OpenSimTestCase
41 {
42 /// <summary>
43 /// Test that a new HG agent (i.e. one without a user account) has their name cached in the UMM upon creation.
44 /// </summary>
45 [Test]
46 public void TestCachedUserNameForNewAgent()
47 {
48 TestHelpers.InMethod();
49// TestHelpers.EnableLogging();
50
51 HGUserManagementModule hgumm = new HGUserManagementModule();
52 UUID userId = TestHelpers.ParseStem("11");
53 string firstName = "Fred";
54 string lastName = "Astaire";
55 string homeUri = "example.com";
56
57 IConfigSource config = new IniConfigSource();
58 config.AddConfig("Modules");
59 config.Configs["Modules"].Set("UserManagementModule", hgumm.Name);
60
61 SceneHelpers sceneHelpers = new SceneHelpers();
62 TestScene scene = sceneHelpers.SetupScene();
63 SceneHelpers.SetupSceneModules(scene, config, hgumm);
64
65 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
66 acd.firstname = firstName;
67 acd.lastname = lastName;
68 acd.ServiceURLs["HomeURI"] = "http://" + homeUri;
69
70 SceneHelpers.AddScenePresence(scene, acd);
71
72 string name = hgumm.GetUserName(userId);
73 Assert.That(name, Is.EqualTo(string.Format("{0}.{1} @{2}", firstName, lastName, homeUri)));
74 }
75 }
76} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 77e8b00..1e70b84 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -46,17 +46,8 @@ using Mono.Addins;
46 46
47namespace OpenSim.Region.CoreModules.Framework.UserManagement 47namespace OpenSim.Region.CoreModules.Framework.UserManagement
48{ 48{
49 public class UserData
50 {
51 public UUID Id { get; set; }
52 public string FirstName { get; set; }
53 public string LastName { get; set; }
54 public string HomeURL { get; set; }
55 public Dictionary<string, object> ServerURLs { get; set; }
56 }
57
58 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UserManagementModule")] 49 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UserManagementModule")]
59 public class UserManagementModule : ISharedRegionModule, IUserManagement 50 public class UserManagementModule : ISharedRegionModule, IUserManagement, IPeople
60 { 51 {
61 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
62 53
@@ -101,6 +92,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
101 m_Scenes.Add(scene); 92 m_Scenes.Add(scene);
102 93
103 scene.RegisterModuleInterface<IUserManagement>(this); 94 scene.RegisterModuleInterface<IUserManagement>(this);
95 scene.RegisterModuleInterface<IPeople>(this);
104 scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); 96 scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
105 scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded); 97 scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded);
106 } 98 }
@@ -165,13 +157,16 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
165 } 157 }
166 else 158 else
167 { 159 {
168 string[] names = GetUserNames(uuid); 160 string[] names;
161 bool foundRealName = TryGetUserNames(uuid, out names);
162
169 if (names.Length == 2) 163 if (names.Length == 2)
170 { 164 {
171 //m_log.DebugFormat("[XXX] HandleUUIDNameRequest {0} is {1} {2}", uuid, names[0], names[1]); 165 if (!foundRealName)
166 m_log.DebugFormat("[USER MANAGEMENT MODULE]: Sending {0} {1} for {2} to {3} since no bound name found", names[0], names[1], uuid, remote_client.Name);
167
172 remote_client.SendNameReply(uuid, names[0], names[1]); 168 remote_client.SendNameReply(uuid, names[0], names[1]);
173 } 169 }
174
175 } 170 }
176 } 171 }
177 172
@@ -181,29 +176,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
181 176
182 m_log.DebugFormat("[USER MANAGEMENT MODULE]: HandleAvatarPickerRequest for {0}", query); 177 m_log.DebugFormat("[USER MANAGEMENT MODULE]: HandleAvatarPickerRequest for {0}", query);
183 178
184 // searhc the user accounts service 179 List<UserData> users = GetUserData(query, 500, 1);
185 List<UserAccount> accs = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, query);
186
187 List<UserData> users = new List<UserData>();
188 if (accs != null)
189 {
190 foreach (UserAccount acc in accs)
191 {
192 UserData ud = new UserData();
193 ud.FirstName = acc.FirstName;
194 ud.LastName = acc.LastName;
195 ud.Id = acc.PrincipalID;
196 users.Add(ud);
197 }
198 }
199
200 // search the local cache
201 foreach (UserData data in m_UserCache.Values)
202 if (users.Find(delegate(UserData d) { return d.Id == data.Id; }) == null &&
203 (data.FirstName.StartsWith(query) || data.LastName.StartsWith(query)))
204 users.Add(data);
205
206 AddAdditionalUsers(avatarID, query, users);
207 180
208 AvatarPickerReplyPacket replyPacket = (AvatarPickerReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarPickerReply); 181 AvatarPickerReplyPacket replyPacket = (AvatarPickerReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarPickerReply);
209 // TODO: don't create new blocks if recycling an old packet 182 // TODO: don't create new blocks if recycling an old packet
@@ -249,12 +222,51 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
249 client.SendAvatarPickerReply(agent_data, data_args); 222 client.SendAvatarPickerReply(agent_data, data_args);
250 } 223 }
251 224
252 protected virtual void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users) 225 protected virtual void AddAdditionalUsers(string query, List<UserData> users)
253 { 226 {
254 } 227 }
255 228
256 #endregion Event Handlers 229 #endregion Event Handlers
257 230
231 #region IPeople
232
233 public List<UserData> GetUserData(string query, int page_size, int page_number)
234 {
235 // search the user accounts service
236 List<UserAccount> accs = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, query);
237
238 List<UserData> users = new List<UserData>();
239 if (accs != null)
240 {
241 foreach (UserAccount acc in accs)
242 {
243 UserData ud = new UserData();
244 ud.FirstName = acc.FirstName;
245 ud.LastName = acc.LastName;
246 ud.Id = acc.PrincipalID;
247 users.Add(ud);
248 }
249 }
250
251 // search the local cache
252 lock (m_UserCache)
253 {
254 foreach (UserData data in m_UserCache.Values)
255 {
256 if (users.Find(delegate(UserData d) { return d.Id == data.Id; }) == null &&
257 (data.FirstName.ToLower().StartsWith(query.ToLower()) || data.LastName.ToLower().StartsWith(query.ToLower())))
258 users.Add(data);
259 }
260 }
261
262 AddAdditionalUsers(query, users);
263
264 return users;
265
266 }
267
268 #endregion IPeople
269
258 private void CacheCreators(SceneObjectGroup sog) 270 private void CacheCreators(SceneObjectGroup sog)
259 { 271 {
260 //m_log.DebugFormat("[USER MANAGEMENT MODULE]: processing {0} {1}; {2}", sog.RootPart.Name, sog.RootPart.CreatorData, sog.RootPart.CreatorIdentification); 272 //m_log.DebugFormat("[USER MANAGEMENT MODULE]: processing {0} {1}; {2}", sog.RootPart.Name, sog.RootPart.CreatorData, sog.RootPart.CreatorIdentification);
@@ -268,17 +280,24 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
268 } 280 }
269 } 281 }
270 282
271 private string[] GetUserNames(UUID uuid) 283 /// <summary>
284 /// Try to get the names bound to the given uuid.
285 /// </summary>
286 /// <returns>True if the name was found, false if not.</returns>
287 /// <param name='uuid'></param>
288 /// <param name='names'>The array of names if found. If not found, then names[0] = "Unknown" and names[1] = "User"</param>
289 private bool TryGetUserNames(UUID uuid, out string[] names)
272 { 290 {
273 string[] returnstring = new string[2]; 291 names = new string[2];
274 292
275 lock (m_UserCache) 293 lock (m_UserCache)
276 { 294 {
277 if (m_UserCache.ContainsKey(uuid)) 295 if (m_UserCache.ContainsKey(uuid))
278 { 296 {
279 returnstring[0] = m_UserCache[uuid].FirstName; 297 names[0] = m_UserCache[uuid].FirstName;
280 returnstring[1] = m_UserCache[uuid].LastName; 298 names[1] = m_UserCache[uuid].LastName;
281 return returnstring; 299
300 return true;
282 } 301 }
283 } 302 }
284 303
@@ -286,8 +305,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
286 305
287 if (account != null) 306 if (account != null)
288 { 307 {
289 returnstring[0] = account.FirstName; 308 names[0] = account.FirstName;
290 returnstring[1] = account.LastName; 309 names[1] = account.LastName;
291 310
292 UserData user = new UserData(); 311 UserData user = new UserData();
293 user.FirstName = account.FirstName; 312 user.FirstName = account.FirstName;
@@ -295,14 +314,16 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
295 314
296 lock (m_UserCache) 315 lock (m_UserCache)
297 m_UserCache[uuid] = user; 316 m_UserCache[uuid] = user;
317
318 return true;
298 } 319 }
299 else 320 else
300 { 321 {
301 returnstring[0] = "Unknown"; 322 names[0] = "Unknown";
302 returnstring[1] = "User"; 323 names[1] = "UserUMMTGUN2";
303 }
304 324
305 return returnstring; 325 return false;
326 }
306 } 327 }
307 328
308 #region IUserManagement 329 #region IUserManagement
@@ -338,15 +359,17 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
338 359
339 public string GetUserName(UUID uuid) 360 public string GetUserName(UUID uuid)
340 { 361 {
341 string[] names = GetUserNames(uuid); 362 string[] names;
363 TryGetUserNames(uuid, out names);
364
342 if (names.Length == 2) 365 if (names.Length == 2)
343 { 366 {
344 string firstname = names[0]; 367 string firstname = names[0];
345 string lastname = names[1]; 368 string lastname = names[1];
346 369
347 return firstname + " " + lastname; 370 return firstname + " " + lastname;
348
349 } 371 }
372
350 return "(hippos)"; 373 return "(hippos)";
351 } 374 }
352 375
@@ -462,12 +485,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
462 //ignore updates without creator data 485 //ignore updates without creator data
463 return; 486 return;
464 } 487 }
488
465 //try update unknown users 489 //try update unknown users
466 //and creator's home URL's 490 //and creator's home URL's
467 if ((oldUser.FirstName == "Unknown" && !creatorData.Contains ("Unknown")) || (oldUser.HomeURL != null && !creatorData.StartsWith (oldUser.HomeURL))) 491 if ((oldUser.FirstName == "Unknown" && !creatorData.Contains ("Unknown")) || (oldUser.HomeURL != null && !creatorData.StartsWith (oldUser.HomeURL)))
468 { 492 {
469 m_UserCache.Remove (id); 493 m_UserCache.Remove (id);
470// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData,oldUser.HomeURL); 494 m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData, oldUser.HomeURL);
471 } 495 }
472 else 496 else
473 { 497 {
@@ -512,7 +536,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
512 else 536 else
513 { 537 {
514 user.FirstName = "Unknown"; 538 user.FirstName = "Unknown";
515 user.LastName = "User"; 539 user.LastName = "UserUMMAU";
516 } 540 }
517 541
518 AddUserInternal (user); 542 AddUserInternal (user);
@@ -544,6 +568,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
544 protected void RegisterConsoleCmds() 568 protected void RegisterConsoleCmds()
545 { 569 {
546 MainConsole.Instance.Commands.AddCommand("Users", true, 570 MainConsole.Instance.Commands.AddCommand("Users", true,
571 "show name",
572 "show name <uuid>",
573 "Show the bindings between a single user UUID and a user name",
574 String.Empty,
575 HandleShowUser);
576
577 MainConsole.Instance.Commands.AddCommand("Users", true,
547 "show names", 578 "show names",
548 "show names", 579 "show names",
549 "Show the bindings between user UUIDs and user names", 580 "Show the bindings between user UUIDs and user names",
@@ -551,26 +582,54 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
551 HandleShowUsers); 582 HandleShowUsers);
552 } 583 }
553 584
554 private void HandleShowUsers(string module, string[] cmd) 585 private void HandleShowUser(string module, string[] cmd)
555 { 586 {
587 if (cmd.Length < 3)
588 {
589 MainConsole.Instance.OutputFormat("Usage: show name <uuid>");
590 return;
591 }
592
593 UUID userId;
594 if (!ConsoleUtil.TryParseConsoleUuid(MainConsole.Instance, cmd[2], out userId))
595 return;
596
597 string[] names;
598
599 UserData ud;
600
556 lock (m_UserCache) 601 lock (m_UserCache)
557 { 602 {
558 if (m_UserCache.Count == 0) 603 if (!m_UserCache.TryGetValue(userId, out ud))
559 { 604 {
560 MainConsole.Instance.Output("No users found"); 605 MainConsole.Instance.OutputFormat("No name known for user with id {0}", userId);
561 return; 606 return;
562 } 607 }
563 608 }
564 MainConsole.Instance.Output("UUID User Name"); 609
565 MainConsole.Instance.Output("-----------------------------------------------------------------------------"); 610 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
611 cdt.AddColumn("UUID", 36);
612 cdt.AddColumn("Name", 30);
613 cdt.AddColumn("HomeURL", 40);
614 cdt.AddRow(userId, string.Format("{0} {1}", ud.FirstName, ud.LastName), ud.HomeURL);
615
616 MainConsole.Instance.Output(cdt.ToString());
617 }
618
619 private void HandleShowUsers(string module, string[] cmd)
620 {
621 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
622 cdt.AddColumn("UUID", 36);
623 cdt.AddColumn("Name", 30);
624 cdt.AddColumn("HomeURL", 40);
625
626 lock (m_UserCache)
627 {
566 foreach (KeyValuePair<UUID, UserData> kvp in m_UserCache) 628 foreach (KeyValuePair<UUID, UserData> kvp in m_UserCache)
567 { 629 cdt.AddRow(kvp.Key, string.Format("{0} {1}", kvp.Value.FirstName, kvp.Value.LastName), kvp.Value.HomeURL);
568 MainConsole.Instance.Output(String.Format("{0} {1} {2} ({3})",
569 kvp.Key, kvp.Value.FirstName, kvp.Value.LastName, kvp.Value.HomeURL));
570 }
571
572 return;
573 } 630 }
631
632 MainConsole.Instance.Output(cdt.ToString());
574 } 633 }
575 } 634 }
576} \ No newline at end of file 635} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs
index 2b13a8b..6eb25ef 100644
--- a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs
+++ b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs
@@ -412,7 +412,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
412 //public bool HttpVerboseThrottle = true; // not implemented 412 //public bool HttpVerboseThrottle = true; // not implemented
413 public List<string> HttpCustomHeaders = null; 413 public List<string> HttpCustomHeaders = null;
414 public bool HttpPragmaNoCache = true; 414 public bool HttpPragmaNoCache = true;
415 private Thread httpThread;
416 415
417 // Request info 416 // Request info
418 private UUID _itemID; 417 private UUID _itemID;
@@ -622,7 +621,7 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
622 { 621 {
623 if (!WorkItem.Cancel()) 622 if (!WorkItem.Cancel())
624 { 623 {
625 WorkItem.Abort(); 624 WorkItem.Cancel(true);
626 } 625 }
627 } 626 }
628 catch (Exception) 627 catch (Exception)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
new file mode 100644
index 0000000..323535a
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
@@ -0,0 +1,226 @@
1
2/*
3 * Copyright (c) Contributors, http://opensimulator.org/
4 * See CONTRIBUTORS.TXT for a full list of copyright holders.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the OpenSimulator Project nor the
14 * names of its contributors may be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29using log4net;
30using Mono.Addins;
31using Nini.Config;
32using System;
33using System.Collections.Generic;
34using System.Reflection;
35using OpenSim.Framework;
36using OpenSim.Framework.Console;
37using OpenSim.Server.Base;
38using OpenSim.Server.Handlers;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Framework.Servers.HttpServer;
41using OpenSim.Framework.Servers;
42using OpenSim.Region.Framework.Scenes;
43using OpenSim.Services.Interfaces;
44using GridRegion = OpenSim.Services.Interfaces.GridRegion;
45using OpenMetaverse;
46
47namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Profile
48{
49 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LocalUserProfilesServicesConnector")]
50 public class LocalUserProfilesServicesConnector : ISharedRegionModule
51 {
52 private static readonly ILog m_log =
53 LogManager.GetLogger(
54 MethodBase.GetCurrentMethod().DeclaringType);
55
56 private Dictionary<UUID, Scene> regions = new Dictionary<UUID, Scene>();
57
58 public IUserProfilesService ServiceModule
59 {
60 get; private set;
61 }
62
63 public bool Enabled
64 {
65 get; private set;
66 }
67
68 public string Name
69 {
70 get
71 {
72 return "LocalUserProfilesServicesConnector";
73 }
74 }
75
76 public string ConfigName
77 {
78 get; private set;
79 }
80
81 public Type ReplaceableInterface
82 {
83 get { return null; }
84 }
85
86 public LocalUserProfilesServicesConnector()
87 {
88 m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector no params");
89 }
90
91 public LocalUserProfilesServicesConnector(IConfigSource source)
92 {
93 m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector instantiated directly.");
94 InitialiseService(source);
95 }
96
97 public void InitialiseService(IConfigSource source)
98 {
99 ConfigName = "UserProfilesService";
100
101 // Instantiate the request handler
102 IHttpServer Server = MainServer.Instance;
103
104 IConfig config = source.Configs[ConfigName];
105 if (config == null)
106 {
107 m_log.Error("[LOCAL USERPROFILES SERVICE CONNECTOR]: UserProfilesService missing from OpenSim.ini");
108 return;
109 }
110
111 if(!config.GetBoolean("Enabled",false))
112 {
113 Enabled = false;
114 return;
115 }
116
117 Enabled = true;
118
119 string serviceDll = config.GetString("LocalServiceModule",
120 String.Empty);
121
122 if (serviceDll == String.Empty)
123 {
124 m_log.Error("[LOCAL USERPROFILES SERVICE CONNECTOR]: No LocalServiceModule named in section UserProfilesService");
125 return;
126 }
127
128 Object[] args = new Object[] { source, ConfigName };
129 ServiceModule =
130 ServerUtils.LoadPlugin<IUserProfilesService>(serviceDll,
131 args);
132
133 if (ServiceModule == null)
134 {
135 m_log.Error("[LOCAL USERPROFILES SERVICE CONNECTOR]: Can't load user profiles service");
136 return;
137 }
138
139 Enabled = true;
140
141 JsonRpcProfileHandlers handler = new JsonRpcProfileHandlers(ServiceModule);
142
143 Server.AddJsonRPCHandler("avatarclassifiedsrequest", handler.AvatarClassifiedsRequest);
144 Server.AddJsonRPCHandler("classified_update", handler.ClassifiedUpdate);
145 Server.AddJsonRPCHandler("classifieds_info_query", handler.ClassifiedInfoRequest);
146 Server.AddJsonRPCHandler("classified_delete", handler.ClassifiedDelete);
147 Server.AddJsonRPCHandler("avatarpicksrequest", handler.AvatarPicksRequest);
148 Server.AddJsonRPCHandler("pickinforequest", handler.PickInfoRequest);
149 Server.AddJsonRPCHandler("picks_update", handler.PicksUpdate);
150 Server.AddJsonRPCHandler("picks_delete", handler.PicksDelete);
151 Server.AddJsonRPCHandler("avatarnotesrequest", handler.AvatarNotesRequest);
152 Server.AddJsonRPCHandler("avatar_notes_update", handler.NotesUpdate);
153 Server.AddJsonRPCHandler("avatar_properties_request", handler.AvatarPropertiesRequest);
154 Server.AddJsonRPCHandler("avatar_properties_update", handler.AvatarPropertiesUpdate);
155 Server.AddJsonRPCHandler("avatar_interests_update", handler.AvatarInterestsUpdate);
156 Server.AddJsonRPCHandler("image_assets_request", handler.AvatarImageAssetsRequest);
157 Server.AddJsonRPCHandler("user_data_request", handler.RequestUserAppData);
158 Server.AddJsonRPCHandler("user_data_update", handler.UpdateUserAppData);
159
160 }
161
162 #region ISharedRegionModule implementation
163
164 void ISharedRegionModule.PostInitialise()
165 {
166 if(!Enabled)
167 return;
168 }
169
170 #endregion
171
172 #region IRegionModuleBase implementation
173
174 void IRegionModuleBase.Initialise(IConfigSource source)
175 {
176 IConfig moduleConfig = source.Configs["Modules"];
177 if (moduleConfig != null)
178 {
179 string name = moduleConfig.GetString("UserProfilesServices", "");
180 if (name == Name)
181 {
182 InitialiseService(source);
183 m_log.Info("[LOCAL USERPROFILES SERVICE CONNECTOR]: Local user profiles connector enabled");
184 }
185 }
186 }
187
188 void IRegionModuleBase.Close()
189 {
190 return;
191 }
192
193 void IRegionModuleBase.AddRegion(Scene scene)
194 {
195 if (!Enabled)
196 return;
197
198 lock (regions)
199 {
200 if (regions.ContainsKey(scene.RegionInfo.RegionID))
201 m_log.ErrorFormat("[LOCAL USERPROFILES SERVICE CONNECTOR]: simulator seems to have more than one region with the same UUID. Please correct this!");
202 else
203 regions.Add(scene.RegionInfo.RegionID, scene);
204 }
205 }
206
207 void IRegionModuleBase.RemoveRegion(Scene scene)
208 {
209 if (!Enabled)
210 return;
211
212 lock (regions)
213 {
214 if (regions.ContainsKey(scene.RegionInfo.RegionID))
215 regions.Remove(scene.RegionInfo.RegionID);
216 }
217 }
218
219 void IRegionModuleBase.RegionLoaded(Scene scene)
220 {
221 if (!Enabled)
222 return;
223 }
224 #endregion
225 }
226} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
index c0c2ca7..3849a3f 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
@@ -56,6 +56,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
56 56
57 public LocalGridServicesConnector() 57 public LocalGridServicesConnector()
58 { 58 {
59 m_log.Debug("[LOCAL GRID SERVICE CONNECTOR]: LocalGridServicesConnector no parms.");
59 } 60 }
60 61
61 public LocalGridServicesConnector(IConfigSource source) 62 public LocalGridServicesConnector(IConfigSource source)
@@ -142,10 +143,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
142 143
143 scene.RegisterModuleInterface<IGridService>(this); 144 scene.RegisterModuleInterface<IGridService>(this);
144 145
145 if (m_LocalCache.ContainsKey(scene.RegionInfo.RegionID)) 146 lock (m_LocalCache)
146 m_log.ErrorFormat("[LOCAL GRID SERVICE CONNECTOR]: simulator seems to have more than one region with the same UUID. Please correct this!"); 147 {
147 else 148 if (m_LocalCache.ContainsKey(scene.RegionInfo.RegionID))
148 m_LocalCache.Add(scene.RegionInfo.RegionID, new RegionCache(scene)); 149 m_log.ErrorFormat("[LOCAL GRID SERVICE CONNECTOR]: simulator seems to have more than one region with the same UUID. Please correct this!");
150 else
151 m_LocalCache.Add(scene.RegionInfo.RegionID, new RegionCache(scene));
152 }
149 } 153 }
150 154
151 public void RemoveRegion(Scene scene) 155 public void RemoveRegion(Scene scene)
@@ -153,8 +157,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
153 if (!m_Enabled) 157 if (!m_Enabled)
154 return; 158 return;
155 159
156 m_LocalCache[scene.RegionInfo.RegionID].Clear(); 160 lock (m_LocalCache)
157 m_LocalCache.Remove(scene.RegionInfo.RegionID); 161 {
162 m_LocalCache[scene.RegionInfo.RegionID].Clear();
163 m_LocalCache.Remove(scene.RegionInfo.RegionID);
164 }
158 } 165 }
159 166
160 public void RegionLoaded(Scene scene) 167 public void RegionLoaded(Scene scene)
@@ -191,12 +198,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
191 198
192 // First see if it's a neighbour, even if it isn't on this sim. 199 // First see if it's a neighbour, even if it isn't on this sim.
193 // Neighbour data is cached in memory, so this is fast 200 // Neighbour data is cached in memory, so this is fast
194 foreach (RegionCache rcache in m_LocalCache.Values) 201
202 lock (m_LocalCache)
195 { 203 {
196 region = rcache.GetRegionByPosition(x, y); 204 foreach (RegionCache rcache in m_LocalCache.Values)
197 if (region != null)
198 { 205 {
199 return region; 206 region = rcache.GetRegionByPosition(x, y);
207 if (region != null)
208 {
209 return region;
210 }
200 } 211 }
201 } 212 }
202 213
@@ -245,12 +256,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
245 { 256 {
246 System.Text.StringBuilder caps = new System.Text.StringBuilder(); 257 System.Text.StringBuilder caps = new System.Text.StringBuilder();
247 258
248 foreach (KeyValuePair<UUID, RegionCache> kvp in m_LocalCache) 259 lock (m_LocalCache)
249 { 260 {
250 caps.AppendFormat("*** Neighbours of {0} ({1}) ***\n", kvp.Value.RegionName, kvp.Key); 261 foreach (KeyValuePair<UUID, RegionCache> kvp in m_LocalCache)
251 List<GridRegion> regions = kvp.Value.GetNeighbours(); 262 {
252 foreach (GridRegion r in regions) 263 caps.AppendFormat("*** Neighbours of {0} ({1}) ***\n", kvp.Value.RegionName, kvp.Key);
253 caps.AppendFormat(" {0} @ {1}-{2}\n", r.RegionName, r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize); 264 List<GridRegion> regions = kvp.Value.GetNeighbours();
265 foreach (GridRegion r in regions)
266 caps.AppendFormat(" {0} @ {1}-{2}\n", r.RegionName, r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize);
267 }
254 } 268 }
255 269
256 MainConsole.Instance.Output(caps.ToString()); 270 MainConsole.Instance.Output(caps.ToString());
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index 8b8bb37..e4aa7bc 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -322,7 +322,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
322// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", 322// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
323// s.RegionInfo.RegionName, destination.RegionHandle); 323// s.RegionInfo.RegionName, destination.RegionHandle);
324 324
325 Util.FireAndForget(delegate { m_scenes[destination.RegionID].IncomingCloseAgent(id, false); }); 325 m_scenes[destination.RegionID].IncomingCloseAgent(id, false);
326 return true; 326 return true;
327 } 327 }
328 //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent"); 328 //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent");
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs
new file mode 100644
index 0000000..73e706c
--- /dev/null
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs
@@ -0,0 +1,218 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31
32using OpenSim.Services.Interfaces;
33using GridRegion = OpenSim.Services.Interfaces.GridRegion;
34using OpenSim.Server.Base;
35using OpenSim.Framework.Servers.HttpServer;
36using OpenSim.Framework;
37using OpenSim.Region.Framework.Scenes;
38
39using OpenMetaverse;
40using log4net;
41
42namespace OpenSim.Region.CoreModules.World.Estate
43{
44 public class EstateConnector
45 {
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 protected XEstateModule m_EstateModule;
49
50 public EstateConnector(XEstateModule module)
51 {
52 m_EstateModule = module;
53 }
54
55 public void SendTeleportHomeOneUser(uint EstateID, UUID PreyID)
56 {
57 Dictionary<string, object> sendData = new Dictionary<string, object>();
58 sendData["METHOD"] = "teleport_home_one_user";
59
60 sendData["EstateID"] = EstateID.ToString();
61 sendData["PreyID"] = PreyID.ToString();
62
63 SendToEstate(EstateID, sendData);
64 }
65
66 public void SendTeleportHomeAllUsers(uint EstateID)
67 {
68 Dictionary<string, object> sendData = new Dictionary<string, object>();
69 sendData["METHOD"] = "teleport_home_all_users";
70
71 sendData["EstateID"] = EstateID.ToString();
72
73 SendToEstate(EstateID, sendData);
74 }
75
76 public bool SendUpdateCovenant(uint EstateID, UUID CovenantID)
77 {
78 Dictionary<string, object> sendData = new Dictionary<string, object>();
79 sendData["METHOD"] = "update_covenant";
80
81 sendData["CovenantID"] = CovenantID.ToString();
82 sendData["EstateID"] = EstateID.ToString();
83
84 // Handle local regions locally
85 //
86 foreach (Scene s in m_EstateModule.Scenes)
87 {
88 if (s.RegionInfo.EstateSettings.EstateID == EstateID)
89 s.RegionInfo.RegionSettings.Covenant = CovenantID;
90// s.ReloadEstateData();
91 }
92
93 SendToEstate(EstateID, sendData);
94
95 return true;
96 }
97
98 public bool SendUpdateEstate(uint EstateID)
99 {
100 Dictionary<string, object> sendData = new Dictionary<string, object>();
101 sendData["METHOD"] = "update_estate";
102
103 sendData["EstateID"] = EstateID.ToString();
104
105 // Handle local regions locally
106 //
107 foreach (Scene s in m_EstateModule.Scenes)
108 {
109 if (s.RegionInfo.EstateSettings.EstateID == EstateID)
110 s.ReloadEstateData();
111 }
112
113 SendToEstate(EstateID, sendData);
114
115 return true;
116 }
117
118 public void SendEstateMessage(uint EstateID, UUID FromID, string FromName, string Message)
119 {
120 Dictionary<string, object> sendData = new Dictionary<string, object>();
121 sendData["METHOD"] = "estate_message";
122
123 sendData["EstateID"] = EstateID.ToString();
124 sendData["FromID"] = FromID.ToString();
125 sendData["FromName"] = FromName;
126 sendData["Message"] = Message;
127
128 SendToEstate(EstateID, sendData);
129 }
130
131 private void SendToEstate(uint EstateID, Dictionary<string, object> sendData)
132 {
133 List<UUID> regions = m_EstateModule.Scenes[0].GetEstateRegions((int)EstateID);
134
135 UUID ScopeID = UUID.Zero;
136
137 // Handle local regions locally
138 //
139 lock (m_EstateModule.Scenes)
140 {
141 foreach (Scene s in m_EstateModule.Scenes)
142 {
143 if (regions.Contains(s.RegionInfo.RegionID))
144 {
145 // All regions in one estate are in the same scope.
146 // Use that scope.
147 //
148 ScopeID = s.RegionInfo.ScopeID;
149 regions.Remove(s.RegionInfo.RegionID);
150 }
151 }
152 }
153
154 // Our own region should always be in the above list.
155 // In a standalone this would not be true. But then,
156 // Scope ID is not relevat there. Use first scope.
157 //
158 if (ScopeID == UUID.Zero)
159 ScopeID = m_EstateModule.Scenes[0].RegionInfo.ScopeID;
160
161 // Don't send to the same instance twice
162 //
163 List<string> done = new List<string>();
164
165 // Send to remote regions
166 //
167 foreach (UUID regionID in regions)
168 {
169 GridRegion region = m_EstateModule.Scenes[0].GridService.GetRegionByUUID(ScopeID, regionID);
170 if (region != null)
171 {
172 string url = "http://" + region.ExternalHostName + ":" + region.HttpPort;
173 if (done.Contains(url))
174 continue;
175
176 Call(region, sendData);
177 done.Add(url);
178 }
179 }
180 }
181
182 private bool Call(GridRegion region, Dictionary<string, object> sendData)
183 {
184 string reqString = ServerUtils.BuildQueryString(sendData);
185 // m_log.DebugFormat("[XESTATE CONNECTOR]: queryString = {0}", reqString);
186 try
187 {
188 string url = "http://" + region.ExternalHostName + ":" + region.HttpPort;
189 string reply = SynchronousRestFormsRequester.MakeRequest("POST",
190 url + "/estate",
191 reqString);
192 if (reply != string.Empty)
193 {
194 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
195
196 if (replyData.ContainsKey("RESULT"))
197 {
198 if (replyData["RESULT"].ToString().ToLower() == "true")
199 return true;
200 else
201 return false;
202 }
203 else
204 m_log.DebugFormat("[XESTATE CONNECTOR]: reply data does not contain result field");
205
206 }
207 else
208 m_log.DebugFormat("[XESTATE CONNECTOR]: received empty reply");
209 }
210 catch (Exception e)
211 {
212 m_log.DebugFormat("[XESTATE CONNECTOR]: Exception when contacting remote sim: {0}", e.Message);
213 }
214
215 return false;
216 }
217 }
218}
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs
new file mode 100644
index 0000000..f54ab2c
--- /dev/null
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs
@@ -0,0 +1,256 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Reflection;
32using log4net;
33using Nini.Config;
34using Nwc.XmlRpc;
35using OpenMetaverse;
36using OpenSim.Framework;
37using OpenSim.Framework.Communications;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces;
41using OpenSim.Server.Base;
42using OpenSim.Framework.Servers;
43using OpenSim.Framework.Servers.HttpServer;
44using Mono.Addins;
45
46namespace OpenSim.Region.CoreModules.World.Estate
47{
48 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "XEstate")]
49 public class XEstateModule : ISharedRegionModule
50 {
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52
53 protected List<Scene> m_Scenes = new List<Scene>();
54 protected bool m_InInfoUpdate = false;
55
56 public bool InInfoUpdate
57 {
58 get { return m_InInfoUpdate; }
59 set { m_InInfoUpdate = value; }
60 }
61
62 public List<Scene> Scenes
63 {
64 get { return m_Scenes; }
65 }
66
67 protected EstateConnector m_EstateConnector;
68
69 public void Initialise(IConfigSource config)
70 {
71 int port = 0;
72
73 IConfig estateConfig = config.Configs["Estate"];
74 if (estateConfig != null)
75 {
76 port = estateConfig.GetInt("Port", 0);
77 }
78
79 m_EstateConnector = new EstateConnector(this);
80
81 // Instantiate the request handler
82 IHttpServer server = MainServer.GetHttpServer((uint)port);
83 server.AddStreamHandler(new EstateRequestHandler(this));
84 }
85
86 public void PostInitialise()
87 {
88 }
89
90 public void Close()
91 {
92 }
93
94 public void AddRegion(Scene scene)
95 {
96 lock (m_Scenes)
97 m_Scenes.Add(scene);
98
99 scene.EventManager.OnNewClient += OnNewClient;
100 }
101
102 public void RegionLoaded(Scene scene)
103 {
104 IEstateModule em = scene.RequestModuleInterface<IEstateModule>();
105
106 em.OnRegionInfoChange += OnRegionInfoChange;
107 em.OnEstateInfoChange += OnEstateInfoChange;
108 em.OnEstateMessage += OnEstateMessage;
109 }
110
111 public void RemoveRegion(Scene scene)
112 {
113 scene.EventManager.OnNewClient -= OnNewClient;
114
115 lock (m_Scenes)
116 m_Scenes.Remove(scene);
117 }
118
119 public string Name
120 {
121 get { return "EstateModule"; }
122 }
123
124 public Type ReplaceableInterface
125 {
126 get { return null; }
127 }
128
129 private Scene FindScene(UUID RegionID)
130 {
131 foreach (Scene s in Scenes)
132 {
133 if (s.RegionInfo.RegionID == RegionID)
134 return s;
135 }
136
137 return null;
138 }
139
140 private void OnRegionInfoChange(UUID RegionID)
141 {
142 Scene s = FindScene(RegionID);
143 if (s == null)
144 return;
145
146 if (!m_InInfoUpdate)
147 m_EstateConnector.SendUpdateCovenant(s.RegionInfo.EstateSettings.EstateID, s.RegionInfo.RegionSettings.Covenant);
148 }
149
150 private void OnEstateInfoChange(UUID RegionID)
151 {
152 Scene s = FindScene(RegionID);
153 if (s == null)
154 return;
155
156 if (!m_InInfoUpdate)
157 m_EstateConnector.SendUpdateEstate(s.RegionInfo.EstateSettings.EstateID);
158 }
159
160 private void OnEstateMessage(UUID RegionID, UUID FromID, string FromName, string Message)
161 {
162 Scene senderScenes = FindScene(RegionID);
163 if (senderScenes == null)
164 return;
165
166 uint estateID = senderScenes.RegionInfo.EstateSettings.EstateID;
167
168 foreach (Scene s in Scenes)
169 {
170 if (s.RegionInfo.EstateSettings.EstateID == estateID)
171 {
172 IDialogModule dm = s.RequestModuleInterface<IDialogModule>();
173
174 if (dm != null)
175 {
176 dm.SendNotificationToUsersInRegion(FromID, FromName,
177 Message);
178 }
179 }
180 }
181 if (!m_InInfoUpdate)
182 m_EstateConnector.SendEstateMessage(estateID, FromID, FromName, Message);
183 }
184
185 private void OnNewClient(IClientAPI client)
186 {
187 client.OnEstateTeleportOneUserHomeRequest += OnEstateTeleportOneUserHomeRequest;
188 client.OnEstateTeleportAllUsersHomeRequest += OnEstateTeleportAllUsersHomeRequest;
189
190 }
191
192 private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey)
193 {
194 if (prey == UUID.Zero)
195 return;
196
197 if (!(client.Scene is Scene))
198 return;
199
200 Scene scene = (Scene)client.Scene;
201
202 uint estateID = scene.RegionInfo.EstateSettings.EstateID;
203
204 if (!scene.Permissions.CanIssueEstateCommand(client.AgentId, false))
205 return;
206
207 foreach (Scene s in Scenes)
208 {
209 if (s == scene)
210 continue; // Already handles by estate module
211 if (s.RegionInfo.EstateSettings.EstateID != estateID)
212 continue;
213
214 ScenePresence p = scene.GetScenePresence(prey);
215 if (p != null && !p.IsChildAgent)
216 {
217 p.ControllingClient.SendTeleportStart(16);
218 scene.TeleportClientHome(prey, p.ControllingClient);
219 }
220 }
221
222 m_EstateConnector.SendTeleportHomeOneUser(estateID, prey);
223 }
224
225 private void OnEstateTeleportAllUsersHomeRequest(IClientAPI client, UUID invoice, UUID senderID)
226 {
227 if (!(client.Scene is Scene))
228 return;
229
230 Scene scene = (Scene)client.Scene;
231
232 uint estateID = scene.RegionInfo.EstateSettings.EstateID;
233
234 if (!scene.Permissions.CanIssueEstateCommand(client.AgentId, false))
235 return;
236
237 foreach (Scene s in Scenes)
238 {
239 if (s == scene)
240 continue; // Already handles by estate module
241 if (s.RegionInfo.EstateSettings.EstateID != estateID)
242 continue;
243
244 scene.ForEachScenePresence(delegate(ScenePresence p) {
245 if (p != null && !p.IsChildAgent)
246 {
247 p.ControllingClient.SendTeleportStart(16);
248 scene.TeleportClientHome(p.ControllingClient.AgentId, p.ControllingClient);
249 }
250 });
251 }
252
253 m_EstateConnector.SendTeleportHomeAllUsers(estateID);
254 }
255 }
256}
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
new file mode 100644
index 0000000..eb74cda
--- /dev/null
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
@@ -0,0 +1,298 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Reflection;
32using System.Xml;
33
34using OpenSim.Framework;
35using OpenSim.Server.Base;
36using OpenSim.Framework.Servers.HttpServer;
37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Region.Framework.Interfaces;
39
40using OpenMetaverse;
41using log4net;
42
43namespace OpenSim.Region.CoreModules.World.Estate
44{
45 public class EstateRequestHandler : BaseStreamHandler
46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48
49 protected XEstateModule m_EstateModule;
50 protected Object m_RequestLock = new Object();
51
52 public EstateRequestHandler(XEstateModule fmodule)
53 : base("POST", "/estate")
54 {
55 m_EstateModule = fmodule;
56 }
57
58 public override byte[] Handle(string path, Stream requestData,
59 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
60 {
61 StreamReader sr = new StreamReader(requestData);
62 string body = sr.ReadToEnd();
63 sr.Close();
64 body = body.Trim();
65
66 m_log.DebugFormat("[XESTATE HANDLER]: query String: {0}", body);
67
68 try
69 {
70 lock (m_RequestLock)
71 {
72 Dictionary<string, object> request =
73 ServerUtils.ParseQueryString(body);
74
75 if (!request.ContainsKey("METHOD"))
76 return FailureResult();
77
78 string method = request["METHOD"].ToString();
79 request.Remove("METHOD");
80
81 try
82 {
83 m_EstateModule.InInfoUpdate = false;
84
85 switch (method)
86 {
87 case "update_covenant":
88 return UpdateCovenant(request);
89 case "update_estate":
90 return UpdateEstate(request);
91 case "estate_message":
92 return EstateMessage(request);
93 case "teleport_home_one_user":
94 return TeleportHomeOneUser(request);
95 case "teleport_home_all_users":
96 return TeleportHomeAllUsers(request);
97 }
98 }
99 finally
100 {
101 m_EstateModule.InInfoUpdate = false;
102 }
103 }
104 }
105 catch (Exception e)
106 {
107 m_log.Debug("[XESTATE]: Exception {0}" + e.ToString());
108 }
109
110 return FailureResult();
111 }
112
113 byte[] TeleportHomeAllUsers(Dictionary<string, object> request)
114 {
115 UUID PreyID = UUID.Zero;
116 int EstateID = 0;
117
118 if (!request.ContainsKey("EstateID"))
119 return FailureResult();
120
121 if (!Int32.TryParse(request["EstateID"].ToString(), out EstateID))
122 return FailureResult();
123
124 foreach (Scene s in m_EstateModule.Scenes)
125 {
126 if (s.RegionInfo.EstateSettings.EstateID == EstateID)
127 {
128 s.ForEachScenePresence(delegate(ScenePresence p) {
129 if (p != null && !p.IsChildAgent)
130 {
131 p.ControllingClient.SendTeleportStart(16);
132 s.TeleportClientHome(p.ControllingClient.AgentId, p.ControllingClient);
133 }
134 });
135 }
136 }
137
138 return SuccessResult();
139 }
140
141 byte[] TeleportHomeOneUser(Dictionary<string, object> request)
142 {
143 UUID PreyID = UUID.Zero;
144 int EstateID = 0;
145
146 if (!request.ContainsKey("PreyID") ||
147 !request.ContainsKey("EstateID"))
148 {
149 return FailureResult();
150 }
151
152 if (!UUID.TryParse(request["PreyID"].ToString(), out PreyID))
153 return FailureResult();
154
155 if (!Int32.TryParse(request["EstateID"].ToString(), out EstateID))
156 return FailureResult();
157
158 foreach (Scene s in m_EstateModule.Scenes)
159 {
160 if (s.RegionInfo.EstateSettings.EstateID == EstateID)
161 {
162 ScenePresence p = s.GetScenePresence(PreyID);
163 if (p != null && !p.IsChildAgent)
164 {
165 p.ControllingClient.SendTeleportStart(16);
166 s.TeleportClientHome(PreyID, p.ControllingClient);
167 }
168 }
169 }
170
171 return SuccessResult();
172 }
173
174 byte[] EstateMessage(Dictionary<string, object> request)
175 {
176 UUID FromID = UUID.Zero;
177 string FromName = String.Empty;
178 string Message = String.Empty;
179 int EstateID = 0;
180
181 if (!request.ContainsKey("FromID") ||
182 !request.ContainsKey("FromName") ||
183 !request.ContainsKey("Message") ||
184 !request.ContainsKey("EstateID"))
185 {
186 return FailureResult();
187 }
188
189 if (!UUID.TryParse(request["FromID"].ToString(), out FromID))
190 return FailureResult();
191
192 if (!Int32.TryParse(request["EstateID"].ToString(), out EstateID))
193 return FailureResult();
194
195 FromName = request["FromName"].ToString();
196 Message = request["Message"].ToString();
197
198 foreach (Scene s in m_EstateModule.Scenes)
199 {
200 if (s.RegionInfo.EstateSettings.EstateID == EstateID)
201 {
202 IDialogModule dm = s.RequestModuleInterface<IDialogModule>();
203
204 if (dm != null)
205 {
206 dm.SendNotificationToUsersInRegion(FromID, FromName,
207 Message);
208 }
209 }
210 }
211
212 return SuccessResult();
213 }
214
215 byte[] UpdateCovenant(Dictionary<string, object> request)
216 {
217 UUID CovenantID = UUID.Zero;
218 int EstateID = 0;
219
220 if (!request.ContainsKey("CovenantID") || !request.ContainsKey("EstateID"))
221 return FailureResult();
222
223 if (!UUID.TryParse(request["CovenantID"].ToString(), out CovenantID))
224 return FailureResult();
225
226 if (!Int32.TryParse(request["EstateID"].ToString(), out EstateID))
227 return FailureResult();
228
229 foreach (Scene s in m_EstateModule.Scenes)
230 {
231 if (s.RegionInfo.EstateSettings.EstateID == (uint)EstateID)
232 s.RegionInfo.RegionSettings.Covenant = CovenantID;
233 }
234
235 return SuccessResult();
236 }
237
238 byte[] UpdateEstate(Dictionary<string, object> request)
239 {
240 int EstateID = 0;
241
242 if (!request.ContainsKey("EstateID"))
243 return FailureResult();
244 if (!Int32.TryParse(request["EstateID"].ToString(), out EstateID))
245 return FailureResult();
246
247 foreach (Scene s in m_EstateModule.Scenes)
248 {
249 if (s.RegionInfo.EstateSettings.EstateID == (uint)EstateID)
250 s.ReloadEstateData();
251 }
252 return SuccessResult();
253 }
254
255 private byte[] FailureResult()
256 {
257 return BoolResult(false);
258 }
259
260 private byte[] SuccessResult()
261 {
262 return BoolResult(true);
263 }
264
265 private byte[] BoolResult(bool value)
266 {
267 XmlDocument doc = new XmlDocument();
268
269 XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration,
270 "", "");
271
272 doc.AppendChild(xmlnode);
273
274 XmlElement rootElement = doc.CreateElement("", "ServerResponse",
275 "");
276
277 doc.AppendChild(rootElement);
278
279 XmlElement result = doc.CreateElement("", "RESULT", "");
280 result.AppendChild(doc.CreateTextNode(value.ToString()));
281
282 rootElement.AppendChild(result);
283
284 return DocToBytes(doc);
285 }
286
287 private byte[] DocToBytes(XmlDocument doc)
288 {
289 MemoryStream ms = new MemoryStream();
290 XmlTextWriter xw = new XmlTextWriter(ms, null);
291 xw.Formatting = Formatting.Indented;
292 doc.WriteTo(xw);
293 xw.Flush();
294
295 return ms.ToArray();
296 }
297 }
298}
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index c307998..dbc9296 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -74,6 +74,7 @@ namespace OpenSim.Region.CoreModules.World.Land
74 74
75 protected IUserManagement m_userManager; 75 protected IUserManagement m_userManager;
76 protected IPrimCountModule m_primCountModule; 76 protected IPrimCountModule m_primCountModule;
77 protected IDialogModule m_Dialog;
77 78
78 // Minimum for parcels to work is 64m even if we don't actually use them. 79 // Minimum for parcels to work is 64m even if we don't actually use them.
79 #pragma warning disable 0429 80 #pragma warning disable 0429
@@ -161,6 +162,7 @@ namespace OpenSim.Region.CoreModules.World.Land
161 { 162 {
162 m_userManager = m_scene.RequestModuleInterface<IUserManagement>(); 163 m_userManager = m_scene.RequestModuleInterface<IUserManagement>();
163 m_primCountModule = m_scene.RequestModuleInterface<IPrimCountModule>(); 164 m_primCountModule = m_scene.RequestModuleInterface<IPrimCountModule>();
165 m_Dialog = m_scene.RequestModuleInterface<IDialogModule>();
164 } 166 }
165 167
166 public void RemoveRegion(Scene scene) 168 public void RemoveRegion(Scene scene)
@@ -213,6 +215,7 @@ namespace OpenSim.Region.CoreModules.World.Land
213 client.OnPreAgentUpdate += ClientOnPreAgentUpdate; 215 client.OnPreAgentUpdate += ClientOnPreAgentUpdate;
214 client.OnParcelEjectUser += ClientOnParcelEjectUser; 216 client.OnParcelEjectUser += ClientOnParcelEjectUser;
215 client.OnParcelFreezeUser += ClientOnParcelFreezeUser; 217 client.OnParcelFreezeUser += ClientOnParcelFreezeUser;
218 client.OnSetStartLocationRequest += ClientOnSetHome;
216 219
217 EntityBase presenceEntity; 220 EntityBase presenceEntity;
218 if (m_scene.Entities.TryGetValue(client.AgentId, out presenceEntity) && presenceEntity is ScenePresence) 221 if (m_scene.Entities.TryGetValue(client.AgentId, out presenceEntity) && presenceEntity is ScenePresence)
@@ -1896,7 +1899,53 @@ namespace OpenSim.Region.CoreModules.World.Land
1896 land.LandData.ParcelAccessList.Add(entry); 1899 land.LandData.ParcelAccessList.Add(entry);
1897 } 1900 }
1898 } 1901 }
1899 1902
1903 /// <summary>
1904 /// Sets the Home Point. The LoginService uses this to know where to put a user when they log-in
1905 /// </summary>
1906 /// <param name="remoteClient"></param>
1907 /// <param name="regionHandle"></param>
1908 /// <param name="position"></param>
1909 /// <param name="lookAt"></param>
1910 /// <param name="flags"></param>
1911 public virtual void ClientOnSetHome(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags)
1912 {
1913 // Let's find the parcel in question
1914 ILandObject land = landChannel.GetLandObject(position);
1915 if (land == null || m_scene.GridUserService == null)
1916 {
1917 m_Dialog.SendAlertToUser(remoteClient, "Set Home request failed.");
1918 return;
1919 }
1920
1921 // Gather some data
1922 ulong gpowers = remoteClient.GetGroupPowers(land.LandData.GroupID);
1923 SceneObjectGroup telehub = null;
1924 if (m_scene.RegionInfo.RegionSettings.TelehubObject != UUID.Zero)
1925 // Does the telehub exist in the scene?
1926 telehub = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject);
1927
1928 // Can the user set home here?
1929 if (// (a) gods and land managers can set home
1930 m_scene.Permissions.IsAdministrator(remoteClient.AgentId) ||
1931 m_scene.Permissions.IsGod(remoteClient.AgentId) ||
1932 // (b) land owners can set home
1933 remoteClient.AgentId == land.LandData.OwnerID ||
1934 // (c) members of the land-associated group in roles that can set home
1935 ((gpowers & (ulong)GroupPowers.AllowSetHome) == (ulong)GroupPowers.AllowSetHome) ||
1936 // (d) parcels with telehubs can be the home of anyone
1937 (telehub != null && land.ContainsPoint((int)telehub.AbsolutePosition.X, (int)telehub.AbsolutePosition.Y)))
1938 {
1939 if (m_scene.GridUserService.SetHome(remoteClient.AgentId.ToString(), land.RegionUUID, position, lookAt))
1940 // FUBAR ALERT: this needs to be "Home position set." so the viewer saves a home-screenshot.
1941 m_Dialog.SendAlertToUser(remoteClient, "Home position set.");
1942 else
1943 m_Dialog.SendAlertToUser(remoteClient, "Set Home request failed.");
1944 }
1945 else
1946 m_Dialog.SendAlertToUser(remoteClient, "You are not allowed to set your home location in this parcel.");
1947 }
1948
1900 protected void InstallInterfaces() 1949 protected void InstallInterfaces()
1901 { 1950 {
1902 Command clearCommand 1951 Command clearCommand
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 07d00c0..31f8a3f 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -249,13 +249,6 @@ namespace OpenSim.Region.CoreModules.World.Land
249 if (estateModule != null) 249 if (estateModule != null)
250 regionFlags = estateModule.GetRegionFlags(); 250 regionFlags = estateModule.GetRegionFlags();
251 251
252 // In a perfect world, this would have worked.
253 //
254// if ((landData.Flags & (uint)ParcelFlags.AllowLandmark) != 0)
255// regionFlags |= (uint)RegionFlags.AllowLandmark;
256// if (landData.OwnerID == remote_client.AgentId)
257// regionFlags |= (uint)RegionFlags.AllowSetHome;
258
259 int seq_id; 252 int seq_id;
260 if (snap_selection && (sequence_id == 0)) 253 if (snap_selection && (sequence_id == 0))
261 { 254 {
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 79dd4a0..f8e93e1 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -1453,6 +1453,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1453 1453
1454 bool permission = false; 1454 bool permission = false;
1455 1455
1456// m_log.DebugFormat("[PERMISSIONS MODULE]: Checking rez object at {0} in {1}", objectPosition, m_scene.Name);
1457
1456 ILandObject land = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); 1458 ILandObject land = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
1457 if (land == null) return false; 1459 if (land == null) return false;
1458 1460
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
index 883045a..d093224 100644
--- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
@@ -369,6 +369,15 @@ namespace OpenSim.Region.CoreModules.World.Sound
369 }); 369 });
370 } 370 }
371 371
372 public void SetSoundQueueing(UUID objectID, bool shouldQueue)
373 {
374 SceneObjectPart part;
375 if (!m_scene.TryGetSceneObjectPart(objectID, out part))
376 return;
377
378 part.SoundQueueing = shouldQueue;
379 }
380
372 #endregion 381 #endregion
373 } 382 }
374} 383}
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
index 292efa4..d49b24e 100644
--- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
@@ -40,7 +40,7 @@ namespace OpenSim.Region.Framework.Interfaces
40 40
41 uint GetRegionFlags(); 41 uint GetRegionFlags();
42 bool IsManager(UUID avatarID); 42 bool IsManager(UUID avatarID);
43 43
44 /// <summary> 44 /// <summary>
45 /// Tell all clients about the current state of the region (terrain textures, water height, etc.). 45 /// Tell all clients about the current state of the region (terrain textures, water height, etc.).
46 /// </summary> 46 /// </summary>
diff --git a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
index 68af492..8372ddd 100644
--- a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
@@ -104,7 +104,6 @@ namespace OpenSim.Region.Framework.Interfaces
104 /// <param name="sound">Sound asset ID</param> 104 /// <param name="sound">Sound asset ID</param>
105 /// <param name="volume">Sound volume</param> 105 /// <param name="volume">Sound volume</param>
106 /// <param name="triggered">Triggered or not.</param> 106 /// <param name="triggered">Triggered or not.</param>
107 /// <param name="flags"></param>
108 /// <param name="radius">Sound radius</param> 107 /// <param name="radius">Sound radius</param>
109 /// <param name="useMaster">Play using sound master</param> 108 /// <param name="useMaster">Play using sound master</param>
110 /// <param name="isMaster">Play as sound master</param> 109 /// <param name="isMaster">Play as sound master</param>
@@ -123,5 +122,12 @@ namespace OpenSim.Region.Framework.Interfaces
123 /// <param name="max">AABB top north-east corner</param> 122 /// <param name="max">AABB top north-east corner</param>
124 void TriggerSoundLimited(UUID objectID, UUID sound, double volume, 123 void TriggerSoundLimited(UUID objectID, UUID sound, double volume,
125 Vector3 min, Vector3 max); 124 Vector3 min, Vector3 max);
125
126 /// <summary>
127 /// Set whether sounds on the given prim should be queued.
128 /// </summary>
129 /// <param name='objectID'></param>
130 /// <param name='shouldQueue'></param>
131 void SetSoundQueueing(UUID objectID, bool shouldQueue);
126 } 132 }
127} \ No newline at end of file 133} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
index 66edfed..5dee64d 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
@@ -28,8 +28,11 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Reflection; 30using System.Reflection;
31using System.Text;
31using log4net; 32using log4net;
32using OpenMetaverse; 33using OpenMetaverse;
34using OpenMetaverse.StructuredData;
35
33using OpenSim.Framework; 36using OpenSim.Framework;
34 37
35using Animation = OpenSim.Framework.Animation; 38using Animation = OpenSim.Framework.Animation;
@@ -60,6 +63,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation
60 ResetDefaultAnimation(); 63 ResetDefaultAnimation();
61 } 64 }
62 65
66 public AnimationSet(OSDArray pArray)
67 {
68 ResetDefaultAnimation();
69 FromOSDArray(pArray);
70 }
71
63 public bool HasAnimation(UUID animID) 72 public bool HasAnimation(UUID animID)
64 { 73 {
65 if (m_defaultAnimation.AnimID == animID) 74 if (m_defaultAnimation.AnimID == animID)
@@ -218,5 +227,106 @@ namespace OpenSim.Region.Framework.Scenes.Animation
218 foreach (OpenSim.Framework.Animation anim in theArray) 227 foreach (OpenSim.Framework.Animation anim in theArray)
219 m_animations.Add(anim); 228 m_animations.Add(anim);
220 } 229 }
230
231 // Create representation of this AnimationSet as an OSDArray.
232 // First two entries in the array are the default and implicitDefault animations
233 // followed by the other animations.
234 public OSDArray ToOSDArray()
235 {
236 OSDArray ret = new OSDArray();
237 ret.Add(DefaultAnimation.PackUpdateMessage());
238 ret.Add(ImplicitDefaultAnimation.PackUpdateMessage());
239
240 foreach (OpenSim.Framework.Animation anim in m_animations)
241 ret.Add(anim.PackUpdateMessage());
242
243 return ret;
244 }
245
246 public void FromOSDArray(OSDArray pArray)
247 {
248 this.Clear();
249
250 if (pArray.Count >= 1)
251 {
252 m_defaultAnimation = new OpenSim.Framework.Animation((OSDMap)pArray[0]);
253 }
254 if (pArray.Count >= 2)
255 {
256 m_implicitDefaultAnimation = new OpenSim.Framework.Animation((OSDMap)pArray[1]);
257 }
258 for (int ii = 2; ii < pArray.Count; ii++)
259 {
260 m_animations.Add(new OpenSim.Framework.Animation((OSDMap)pArray[ii]));
261 }
262 }
263
264 // Compare two AnimationSets and return 'true' if the default animations are the same
265 // and all of the animations in the list are equal.
266 public override bool Equals(object obj)
267 {
268 AnimationSet other = obj as AnimationSet;
269 if (other != null)
270 {
271 if (this.DefaultAnimation.Equals(other.DefaultAnimation)
272 && this.ImplicitDefaultAnimation.Equals(other.ImplicitDefaultAnimation))
273 {
274 // The defaults are the same. Is the list of animations the same?
275 OpenSim.Framework.Animation[] thisAnims = this.ToArray();
276 OpenSim.Framework.Animation[] otherAnims = other.ToArray();
277 if (thisAnims.Length == 0 && otherAnims.Length == 0)
278 return true; // the common case
279 if (thisAnims.Length == otherAnims.Length)
280 {
281 // Do this the hard way but since the list is usually short this won't take long.
282 foreach (OpenSim.Framework.Animation thisAnim in thisAnims)
283 {
284 bool found = false;
285 foreach (OpenSim.Framework.Animation otherAnim in otherAnims)
286 {
287 if (thisAnim.Equals(otherAnim))
288 {
289 found = true;
290 break;
291 }
292 }
293 if (!found)
294 {
295 // If anything is not in the other list, these are not equal
296 return false;
297 }
298 }
299 // Found everything in the other list. Since lists are equal length, they must be equal.
300 return true;
301 }
302 }
303 return false;
304 }
305 // Don't know what was passed, but the base system will figure it out for me.
306 return base.Equals(obj);
307 }
308
309 public override string ToString()
310 {
311 StringBuilder buff = new StringBuilder();
312 buff.Append("dflt=");
313 buff.Append(DefaultAnimation.ToString());
314 buff.Append(",iDflt=");
315 if (DefaultAnimation == ImplicitDefaultAnimation)
316 buff.Append("same");
317 else
318 buff.Append(ImplicitDefaultAnimation.ToString());
319 if (m_animations.Count > 0)
320 {
321 buff.Append(",anims=");
322 foreach (OpenSim.Framework.Animation anim in m_animations)
323 {
324 buff.Append("<");
325 buff.Append(anim.ToString());
326 buff.Append(">,");
327 }
328 }
329 return buff.ToString();
330 }
221 } 331 }
222} 332}
diff --git a/OpenSim/Region/Framework/Scenes/Animation/DefaultAvatarAnimations.cs b/OpenSim/Region/Framework/Scenes/Animation/DefaultAvatarAnimations.cs
index c2b0468..b79dd8f 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/DefaultAvatarAnimations.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/DefaultAvatarAnimations.cs
@@ -104,5 +104,31 @@ namespace OpenSim.Region.Framework.Scenes.Animation
104 104
105 return UUID.Zero; 105 return UUID.Zero;
106 } 106 }
107
108 /// <summary>
109 /// Get the name of the animation given a UUID. If there is no matching animation
110 /// return the UUID as a string.
111 /// </summary>
112 public static string GetDefaultAnimationName(UUID uuid)
113 {
114 string ret = "unknown";
115 if (AnimsUUID.ContainsValue(uuid))
116 {
117 foreach (KeyValuePair<string, UUID> kvp in AnimsUUID)
118 {
119 if (kvp.Value == uuid)
120 {
121 ret = kvp.Key;
122 break;
123 }
124 }
125 }
126 else
127 {
128 ret = uuid.ToString();
129 }
130
131 return ret;
132 }
107 } 133 }
108} \ No newline at end of file 134} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index 65c279e..eb70eee 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -93,7 +93,9 @@ namespace OpenSim.Region.Framework.Scenes.Animation
93 GetAnimName(animID), animID, m_scenePresence.Name); 93 GetAnimName(animID), animID, m_scenePresence.Name);
94 94
95 if (m_animations.Add(animID, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, objectID)) 95 if (m_animations.Add(animID, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, objectID))
96 {
96 SendAnimPack(); 97 SendAnimPack();
98 }
97 } 99 }
98 100
99 // Called from scripts 101 // Called from scripts
@@ -132,7 +134,9 @@ namespace OpenSim.Region.Framework.Scenes.Animation
132 GetAnimName(animID), animID, m_scenePresence.Name); 134 GetAnimName(animID), animID, m_scenePresence.Name);
133 135
134 if (m_animations.Remove(animID, allowNoDefault)) 136 if (m_animations.Remove(animID, allowNoDefault))
137 {
135 SendAnimPack(); 138 SendAnimPack();
139 }
136 } 140 }
137 141
138 public void avnChangeAnim(UUID animID, bool addRemove, bool sendPack) 142 public void avnChangeAnim(UUID animID, bool addRemove, bool sendPack)
@@ -180,8 +184,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
180 /// The movement animation is reserved for "main" animations 184 /// The movement animation is reserved for "main" animations
181 /// that are mutually exclusive, e.g. flying and sitting. 185 /// that are mutually exclusive, e.g. flying and sitting.
182 /// </summary> 186 /// </summary>
183 public void TrySetMovementAnimation(string anim) 187 /// <returns>'true' if the animation was updated</returns>
188 public bool TrySetMovementAnimation(string anim)
184 { 189 {
190 bool ret = false;
185 if (!m_scenePresence.IsChildAgent) 191 if (!m_scenePresence.IsChildAgent)
186 { 192 {
187// m_log.DebugFormat( 193// m_log.DebugFormat(
@@ -198,6 +204,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
198 // 16384 is CHANGED_ANIMATION 204 // 16384 is CHANGED_ANIMATION
199 m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION}); 205 m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION});
200 SendAnimPack(); 206 SendAnimPack();
207 ret = true;
201 } 208 }
202 } 209 }
203 else 210 else
@@ -206,6 +213,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
206 "[SCENE PRESENCE ANIMATOR]: Tried to set movement animation {0} on child presence {1}", 213 "[SCENE PRESENCE ANIMATOR]: Tried to set movement animation {0} on child presence {1}",
207 anim, m_scenePresence.Name); 214 anim, m_scenePresence.Name);
208 } 215 }
216 return ret;
209 } 217 }
210 218
211 /// <summary> 219 /// <summary>
@@ -439,8 +447,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
439 /// <summary> 447 /// <summary>
440 /// Update the movement animation of this avatar according to its current state 448 /// Update the movement animation of this avatar according to its current state
441 /// </summary> 449 /// </summary>
442 public void UpdateMovementAnimations() 450 /// <returns>'true' if the animation was changed</returns>
451 public bool UpdateMovementAnimations()
443 { 452 {
453 bool ret = false;
444 lock (m_animations) 454 lock (m_animations)
445 { 455 {
446 string newMovementAnimation = DetermineMovementAnimation(); 456 string newMovementAnimation = DetermineMovementAnimation();
@@ -454,9 +464,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
454 464
455 // Only set it if it's actually changed, give a script 465 // Only set it if it's actually changed, give a script
456 // a chance to stop a default animation 466 // a chance to stop a default animation
457 TrySetMovementAnimation(CurrentMovementAnimation); 467 ret = TrySetMovementAnimation(CurrentMovementAnimation);
458 } 468 }
459 } 469 }
470 return ret;
460 } 471 }
461 472
462 public UUID[] GetAnimationArray() 473 public UUID[] GetAnimationArray()
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
index f555b49..11a0146 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
@@ -104,14 +104,8 @@ namespace OpenSim.Region.Framework.Scenes
104 // better than losing the object for now. 104 // better than losing the object for now.
105 if (permissionToDelete) 105 if (permissionToDelete)
106 { 106 {
107 List<uint> killIDs = new List<uint>();
108
109 foreach (SceneObjectGroup g in objectGroups) 107 foreach (SceneObjectGroup g in objectGroups)
110 { killIDs.Add(g.LocalId); 108 g.DeleteGroupFromScene(false);
111 g.DeleteGroupFromScene(true);
112 }
113
114 m_scene.SendKillObject(killIDs);
115 } 109 }
116 } 110 }
117 111
@@ -160,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes
160 if (x.permissionToDelete) 154 if (x.permissionToDelete)
161 { 155 {
162 foreach (SceneObjectGroup g in x.objectGroups) 156 foreach (SceneObjectGroup g in x.objectGroups)
163 m_scene.DeleteSceneObject(g, false); 157 m_scene.DeleteSceneObject(g, true);
164 } 158 }
165 } 159 }
166 catch (Exception e) 160 catch (Exception e)
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 4733547..4fec44f 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -974,6 +974,8 @@ namespace OpenSim.Region.Framework.Scenes
974 public delegate void RegionStarted(Scene scene); 974 public delegate void RegionStarted(Scene scene);
975 public event RegionStarted OnRegionStarted; 975 public event RegionStarted OnRegionStarted;
976 976
977 public delegate void RegionHeartbeatStart(Scene scene);
978 public event RegionHeartbeatStart OnRegionHeartbeatStart;
977 public delegate void RegionHeartbeatEnd(Scene scene); 979 public delegate void RegionHeartbeatEnd(Scene scene);
978 public event RegionHeartbeatEnd OnRegionHeartbeatEnd; 980 public event RegionHeartbeatEnd OnRegionHeartbeatEnd;
979 981
@@ -3096,6 +3098,27 @@ namespace OpenSim.Region.Framework.Scenes
3096 } 3098 }
3097 } 3099 }
3098 3100
3101 public void TriggerRegionHeartbeatStart(Scene scene)
3102 {
3103 RegionHeartbeatStart handler = OnRegionHeartbeatStart;
3104
3105 if (handler != null)
3106 {
3107 foreach (RegionHeartbeatStart d in handler.GetInvocationList())
3108 {
3109 try
3110 {
3111 d(scene);
3112 }
3113 catch (Exception e)
3114 {
3115 m_log.ErrorFormat("[EVENT MANAGER]: Delegate for OnRegionHeartbeatStart failed - continuing {0} - {1}",
3116 e.Message, e.StackTrace);
3117 }
3118 }
3119 }
3120 }
3121
3099 public void TriggerRegionHeartbeatEnd(Scene scene) 3122 public void TriggerRegionHeartbeatEnd(Scene scene)
3100 { 3123 {
3101 RegionHeartbeatEnd handler = OnRegionHeartbeatEnd; 3124 RegionHeartbeatEnd handler = OnRegionHeartbeatEnd;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index d2e41f8..70018c8 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -417,13 +417,13 @@ namespace OpenSim.Region.Framework.Scenes
417 // is not allowed to change the export flag. 417 // is not allowed to change the export flag.
418 bool denyExportChange = false; 418 bool denyExportChange = false;
419 419
420 m_log.InfoFormat("[XXX]: B: {0} O: {1} E: {2}", itemUpd.BasePermissions, itemUpd.CurrentPermissions, itemUpd.EveryOnePermissions); 420// m_log.DebugFormat("[XXX]: B: {0} O: {1} E: {2}", itemUpd.BasePermissions, itemUpd.CurrentPermissions, itemUpd.EveryOnePermissions);
421 421
422 // If the user is not the creator or doesn't have "E" in both "B" and "O", deny setting export 422 // If the user is not the creator or doesn't have "E" in both "B" and "O", deny setting export
423 if ((item.BasePermissions & (uint)(PermissionMask.All | PermissionMask.Export)) != (uint)(PermissionMask.All | PermissionMask.Export) || (item.CurrentPermissions & (uint)PermissionMask.Export) == 0 || item.CreatorIdAsUuid != item.Owner) 423 if ((item.BasePermissions & (uint)(PermissionMask.All | PermissionMask.Export)) != (uint)(PermissionMask.All | PermissionMask.Export) || (item.CurrentPermissions & (uint)PermissionMask.Export) == 0 || item.CreatorIdAsUuid != item.Owner)
424 denyExportChange = true; 424 denyExportChange = true;
425 425
426 m_log.InfoFormat("[XXX]: Deny Export Update {0}", denyExportChange); 426// m_log.DebugFormat("[XXX]: Deny Export Update {0}", denyExportChange);
427 427
428 // If it is already set, force it set and also force full perm 428 // If it is already set, force it set and also force full perm
429 // else prevent setting it. It can and should never be set unless 429 // else prevent setting it. It can and should never be set unless
@@ -447,7 +447,7 @@ namespace OpenSim.Region.Framework.Scenes
447 // If the new state is exportable, force full perm 447 // If the new state is exportable, force full perm
448 if ((itemUpd.EveryOnePermissions & (uint)PermissionMask.Export) != 0) 448 if ((itemUpd.EveryOnePermissions & (uint)PermissionMask.Export) != 0)
449 { 449 {
450 m_log.InfoFormat("[XXX]: Force full perm"); 450// m_log.DebugFormat("[XXX]: Force full perm");
451 itemUpd.NextPermissions = (uint)(PermissionMask.All); 451 itemUpd.NextPermissions = (uint)(PermissionMask.All);
452 } 452 }
453 } 453 }
@@ -485,7 +485,10 @@ namespace OpenSim.Region.Framework.Scenes
485 item.SaleType = itemUpd.SaleType; 485 item.SaleType = itemUpd.SaleType;
486 486
487 InventoryService.UpdateItem(item); 487 InventoryService.UpdateItem(item);
488 remoteClient.SendBulkUpdateInventory(item); 488
489 // We cannot send out a bulk update here, since this will cause editing of clothing to start
490 // failing frequently. Possibly this is a race with a separate transaction that uploads the asset.
491// remoteClient.SendBulkUpdateInventory(item);
489 } 492 }
490 493
491 if (UUID.Zero != transactionID) 494 if (UUID.Zero != transactionID)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 2b58795..436a544 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -396,10 +396,12 @@ namespace OpenSim.Region.Framework.Scenes
396 if (value) 396 if (value)
397 { 397 {
398 if (!m_active) 398 if (!m_active)
399 Start(); 399 Start(false);
400 } 400 }
401 else 401 else
402 { 402 {
403 // This appears assymetric with Start() above but is not - setting m_active = false stops the loops
404 // XXX: Possibly this should be in an explicit Stop() method for symmetry.
403 m_active = false; 405 m_active = false;
404 } 406 }
405 } 407 }
@@ -1361,10 +1363,18 @@ namespace OpenSim.Region.Framework.Scenes
1361 } 1363 }
1362 } 1364 }
1363 1365
1366 public override void Start()
1367 {
1368 Start(true);
1369 }
1370
1364 /// <summary> 1371 /// <summary>
1365 /// Start the scene 1372 /// Start the scene
1366 /// </summary> 1373 /// </summary>
1367 public void Start() 1374 /// <param name='startScripts'>
1375 /// Start the scripts within the scene.
1376 /// </param>
1377 public void Start(bool startScripts)
1368 { 1378 {
1369 m_active = true; 1379 m_active = true;
1370 1380
@@ -1401,6 +1411,8 @@ namespace OpenSim.Region.Framework.Scenes
1401 m_heartbeatThread 1411 m_heartbeatThread
1402 = Watchdog.StartThread( 1412 = Watchdog.StartThread(
1403 Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false); 1413 Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false);
1414
1415 StartScripts();
1404 } 1416 }
1405 1417
1406 /// <summary> 1418 /// <summary>
@@ -1557,6 +1569,8 @@ namespace OpenSim.Region.Framework.Scenes
1557 1569
1558 try 1570 try
1559 { 1571 {
1572 EventManager.TriggerRegionHeartbeatStart(this);
1573
1560 // Apply taints in terrain module to terrain in physics scene 1574 // Apply taints in terrain module to terrain in physics scene
1561 if (Frame % m_update_terrain == 0) 1575 if (Frame % m_update_terrain == 0)
1562 { 1576 {
@@ -3001,7 +3015,9 @@ namespace OpenSim.Region.Framework.Scenes
3001 // client is for a root or child agent. 3015 // client is for a root or child agent.
3002 client.SceneAgent = sp; 3016 client.SceneAgent = sp;
3003 3017
3004 // Cache the user's name 3018 // This is currently also being done earlier in NewUserConnection for real users to see if this
3019 // resolves problems where HG agents are occasionally seen by others as "Unknown user" in chat and other
3020 // places. However, we still need to do it here for NPCs.
3005 CacheUserName(sp, aCircuit); 3021 CacheUserName(sp, aCircuit);
3006 3022
3007 EventManager.TriggerOnNewClient(client); 3023 EventManager.TriggerOnNewClient(client);
@@ -3025,7 +3041,7 @@ namespace OpenSim.Region.Framework.Scenes
3025 { 3041 {
3026 string first = aCircuit.firstname, last = aCircuit.lastname; 3042 string first = aCircuit.firstname, last = aCircuit.lastname;
3027 3043
3028 if (sp.PresenceType == PresenceType.Npc) 3044 if (sp != null && sp.PresenceType == PresenceType.Npc)
3029 { 3045 {
3030 UserManagementModule.AddUser(aCircuit.AgentID, first, last); 3046 UserManagementModule.AddUser(aCircuit.AgentID, first, last);
3031 } 3047 }
@@ -3242,7 +3258,6 @@ namespace OpenSim.Region.Framework.Scenes
3242 { 3258 {
3243 //client.OnNameFromUUIDRequest += HandleUUIDNameRequest; 3259 //client.OnNameFromUUIDRequest += HandleUUIDNameRequest;
3244 client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; 3260 client.OnMoneyTransferRequest += ProcessMoneyTransferRequest;
3245 client.OnSetStartLocationRequest += SetHomeRezPoint;
3246 client.OnRegionHandleRequest += RegionHandleRequest; 3261 client.OnRegionHandleRequest += RegionHandleRequest;
3247 } 3262 }
3248 3263
@@ -3369,7 +3384,6 @@ namespace OpenSim.Region.Framework.Scenes
3369 { 3384 {
3370 //client.OnNameFromUUIDRequest -= HandleUUIDNameRequest; 3385 //client.OnNameFromUUIDRequest -= HandleUUIDNameRequest;
3371 client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest; 3386 client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest;
3372 client.OnSetStartLocationRequest -= SetHomeRezPoint;
3373 client.OnRegionHandleRequest -= RegionHandleRequest; 3387 client.OnRegionHandleRequest -= RegionHandleRequest;
3374 } 3388 }
3375 3389
@@ -3496,33 +3510,6 @@ namespace OpenSim.Region.Framework.Scenes
3496 } 3510 }
3497 3511
3498 /// <summary> 3512 /// <summary>
3499 /// Sets the Home Point. The LoginService uses this to know where to put a user when they log-in
3500 /// </summary>
3501 /// <param name="remoteClient"></param>
3502 /// <param name="regionHandle"></param>
3503 /// <param name="position"></param>
3504 /// <param name="lookAt"></param>
3505 /// <param name="flags"></param>
3506 public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags)
3507 {
3508 //Add half the avatar's height so that the user doesn't fall through prims
3509 ScenePresence presence;
3510 if (TryGetScenePresence(remoteClient.AgentId, out presence))
3511 {
3512 if (presence.Appearance != null)
3513 {
3514 position.Z = position.Z + (presence.Appearance.AvatarHeight / 2);
3515 }
3516 }
3517
3518 if (GridUserService != null && GridUserService.SetHome(remoteClient.AgentId.ToString(), RegionInfo.RegionID, position, lookAt))
3519 // FUBAR ALERT: this needs to be "Home position set." so the viewer saves a home-screenshot.
3520 m_dialogModule.SendAlertToUser(remoteClient, "Home position set.");
3521 else
3522 m_dialogModule.SendAlertToUser(remoteClient, "Set Home request Failed.");
3523 }
3524
3525 /// <summary>
3526 /// Get the avatar apperance for the given client. 3513 /// Get the avatar apperance for the given client.
3527 /// </summary> 3514 /// </summary>
3528 /// <param name="client"></param> 3515 /// <param name="client"></param>
@@ -3618,15 +3605,12 @@ namespace OpenSim.Region.Framework.Scenes
3618 if (closeChildAgents && CapsModule != null) 3605 if (closeChildAgents && CapsModule != null)
3619 CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode); 3606 CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode);
3620 3607
3621// // REFACTORING PROBLEM -- well not really a problem, but just to point out that whatever
3622// // this method is doing is HORRIBLE!!!
3623 // Commented pending deletion since this method no longer appears to do anything at all
3624// avatar.Scene.NeedSceneCacheClear(avatar.UUID);
3625
3626 if (closeChildAgents && !isChildAgent) 3608 if (closeChildAgents && !isChildAgent)
3627 { 3609 {
3628 List<ulong> regions = avatar.KnownRegionHandles; 3610 List<ulong> regions = avatar.KnownRegionHandles;
3629 regions.Remove(RegionInfo.RegionHandle); 3611 regions.Remove(RegionInfo.RegionHandle);
3612
3613 // This ends up being done asynchronously so that a logout isn't held up where there are many present but unresponsive neighbours.
3630 m_sceneGridService.SendCloseChildAgentConnections(agentID, regions); 3614 m_sceneGridService.SendCloseChildAgentConnections(agentID, regions);
3631 } 3615 }
3632 3616
@@ -3644,7 +3628,7 @@ namespace OpenSim.Region.Framework.Scenes
3644 delegate(IClientAPI client) 3628 delegate(IClientAPI client)
3645 { 3629 {
3646 //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway 3630 //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
3647 try { client.SendKillObject(avatar.RegionHandle, new List<uint> { avatar.LocalId }); } 3631 try { client.SendKillObject(new List<uint> { avatar.LocalId }); }
3648 catch (NullReferenceException) { } 3632 catch (NullReferenceException) { }
3649 }); 3633 });
3650 } 3634 }
@@ -3725,7 +3709,8 @@ namespace OpenSim.Region.Framework.Scenes
3725 } 3709 }
3726 deleteIDs.Add(localID); 3710 deleteIDs.Add(localID);
3727 } 3711 }
3728 ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); }); 3712
3713 ForEachClient(c => c.SendKillObject(deleteIDs));
3729 } 3714 }
3730 3715
3731 #endregion 3716 #endregion
@@ -3881,7 +3866,13 @@ namespace OpenSim.Region.Framework.Scenes
3881 3866
3882 lock (agent) 3867 lock (agent)
3883 { 3868 {
3884 //On login test land permisions 3869 // Optimistic: add or update the circuit data with the new agent circuit data and teleport flags.
3870 // We need the circuit data here for some of the subsequent checks. (groups, for example)
3871 // If the checks fail, we remove the circuit.
3872 agent.teleportFlags = teleportFlags;
3873 m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
3874
3875 // On login test land permisions
3885 if (vialogin) 3876 if (vialogin)
3886 { 3877 {
3887 IUserAccountCacheModule cache = RequestModuleInterface<IUserAccountCacheModule>(); 3878 IUserAccountCacheModule cache = RequestModuleInterface<IUserAccountCacheModule>();
@@ -3890,6 +3881,7 @@ namespace OpenSim.Region.Framework.Scenes
3890 if (!TestLandRestrictions(agent.AgentID, out reason, ref agent.startpos.X, ref agent.startpos.Y)) 3881 if (!TestLandRestrictions(agent.AgentID, out reason, ref agent.startpos.X, ref agent.startpos.Y))
3891 { 3882 {
3892 m_log.DebugFormat("[CONNECTION BEGIN]: Denying access to {0} due to no land access", agent.AgentID.ToString()); 3883 m_log.DebugFormat("[CONNECTION BEGIN]: Denying access to {0} due to no land access", agent.AgentID.ToString());
3884 m_authenticateHandler.RemoveCircuit(agent.circuitcode);
3893 return false; 3885 return false;
3894 } 3886 }
3895 } 3887 }
@@ -3901,11 +3893,17 @@ namespace OpenSim.Region.Framework.Scenes
3901 try 3893 try
3902 { 3894 {
3903 if (!VerifyUserPresence(agent, out reason)) 3895 if (!VerifyUserPresence(agent, out reason))
3896 {
3897 m_authenticateHandler.RemoveCircuit(agent.circuitcode);
3904 return false; 3898 return false;
3905 } catch (Exception e) 3899 }
3900 }
3901 catch (Exception e)
3906 { 3902 {
3907 m_log.ErrorFormat( 3903 m_log.ErrorFormat(
3908 "[SCENE]: Exception verifying presence {0}{1}", e.Message, e.StackTrace); 3904 "[SCENE]: Exception verifying presence {0}{1}", e.Message, e.StackTrace);
3905
3906 m_authenticateHandler.RemoveCircuit(agent.circuitcode);
3909 return false; 3907 return false;
3910 } 3908 }
3911 } 3909 }
@@ -3918,6 +3916,7 @@ namespace OpenSim.Region.Framework.Scenes
3918 { 3916 {
3919 if (!AuthorizeUser(agent, out reason)) 3917 if (!AuthorizeUser(agent, out reason))
3920 { 3918 {
3919 m_authenticateHandler.RemoveCircuit(agent.circuitcode);
3921 return false; 3920 return false;
3922 } 3921 }
3923 } 3922 }
@@ -3926,6 +3925,8 @@ namespace OpenSim.Region.Framework.Scenes
3926 { 3925 {
3927 m_log.ErrorFormat( 3926 m_log.ErrorFormat(
3928 "[SCENE]: Exception authorizing user {0}{1}", e.Message, e.StackTrace); 3927 "[SCENE]: Exception authorizing user {0}{1}", e.Message, e.StackTrace);
3928
3929 m_authenticateHandler.RemoveCircuit(agent.circuitcode);
3929 return false; 3930 return false;
3930 } 3931 }
3931 3932
@@ -3953,11 +3954,12 @@ namespace OpenSim.Region.Framework.Scenes
3953 CapsModule.SetAgentCapsSeeds(agent); 3954 CapsModule.SetAgentCapsSeeds(agent);
3954 } 3955 }
3955 } 3956 }
3956 }
3957 3957
3958 // In all cases, add or update the circuit data with the new agent circuit data and teleport flags 3958 // Try caching an incoming user name much earlier on to see if this helps with an issue
3959 agent.teleportFlags = teleportFlags; 3959 // where HG users are occasionally seen by others as "Unknown User" because their UUIDName
3960 m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); 3960 // request for the HG avatar appears to trigger before the user name is cached.
3961 CacheUserName(null, agent);
3962 }
3961 3963
3962 if (CapsModule != null) 3964 if (CapsModule != null)
3963 { 3965 {
@@ -4365,8 +4367,6 @@ namespace OpenSim.Region.Framework.Scenes
4365 m_log.DebugFormat( 4367 m_log.DebugFormat(
4366 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); 4368 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName);
4367 4369
4368 // XPTO: if this agent is not allowed here as root, always return false
4369
4370 // We have to wait until the viewer contacts this region after receiving EAC. 4370 // We have to wait until the viewer contacts this region after receiving EAC.
4371 // That calls AddNewClient, which finally creates the ScenePresence 4371 // That calls AddNewClient, which finally creates the ScenePresence
4372 int flags = GetUserFlags(cAgentData.AgentID); 4372 int flags = GetUserFlags(cAgentData.AgentID);
@@ -5655,12 +5655,12 @@ Environment.Exit(1);
5655 List<SceneObjectGroup> objects, 5655 List<SceneObjectGroup> objects,
5656 out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ) 5656 out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ)
5657 { 5657 {
5658 minX = 256; 5658 minX = float.MaxValue;
5659 maxX = -256; 5659 maxX = float.MinValue;
5660 minY = 256; 5660 minY = float.MaxValue;
5661 maxY = -256; 5661 maxY = float.MinValue;
5662 minZ = 8192; 5662 minZ = float.MaxValue;
5663 maxZ = -256; 5663 maxZ = float.MinValue;
5664 5664
5665 List<Vector3> offsets = new List<Vector3>(); 5665 List<Vector3> offsets = new List<Vector3>();
5666 5666
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index 74c9582..4eef162 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -562,6 +562,10 @@ namespace OpenSim.Region.Framework.Scenes
562 get { return false; } 562 get { return false; }
563 } 563 }
564 564
565 public virtual void Start()
566 {
567 }
568
565 public void Restart() 569 public void Restart()
566 { 570 {
567 // This has to be here to fire the event 571 // This has to be here to fire the event
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 0ea4e09..02a8935 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1862,11 +1862,11 @@ namespace OpenSim.Region.Framework.Scenes
1862 /// <summary> 1862 /// <summary>
1863 /// Delete this group from its scene. 1863 /// Delete this group from its scene.
1864 /// </summary> 1864 /// </summary>
1865 /// 1865 /// <remarks>
1866 /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood 1866 /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood
1867 /// up and all avatars receive notification of its removal. Removal of the scene object from database backup 1867 /// up and all avatars receive notification of its removal. Removal of the scene object from database backup
1868 /// must be handled by the caller. 1868 /// must be handled by the caller.
1869 /// 1869 /// </remarks>
1870 /// <param name="silent">If true then deletion is not broadcast to clients</param> 1870 /// <param name="silent">If true then deletion is not broadcast to clients</param>
1871 public void DeleteGroupFromScene(bool silent) 1871 public void DeleteGroupFromScene(bool silent)
1872 { 1872 {
@@ -1880,10 +1880,10 @@ namespace OpenSim.Region.Framework.Scenes
1880 { 1880 {
1881 SceneObjectPart part = parts[i]; 1881 SceneObjectPart part = parts[i];
1882 1882
1883 Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) 1883 Scene.ForEachScenePresence(sp =>
1884 { 1884 {
1885 if (avatar.ParentID == LocalId) 1885 if (!sp.IsChildAgent && sp.ParentID == LocalId)
1886 avatar.StandUp(); 1886 sp.StandUp();
1887 1887
1888 if (!silent) 1888 if (!silent)
1889 { 1889 {
@@ -1891,9 +1891,9 @@ namespace OpenSim.Region.Framework.Scenes
1891 if (part == m_rootPart) 1891 if (part == m_rootPart)
1892 { 1892 {
1893 if (!IsAttachment 1893 if (!IsAttachment
1894 || AttachedAvatar == avatar.ControllingClient.AgentId 1894 || AttachedAvatar == sp.UUID
1895 || !HasPrivateAttachmentPoint) 1895 || !HasPrivateAttachmentPoint)
1896 avatar.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId }); 1896 sp.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
1897 } 1897 }
1898 } 1898 }
1899 }); 1899 });
@@ -2202,7 +2202,7 @@ namespace OpenSim.Region.Framework.Scenes
2202 if (!userExposed) 2202 if (!userExposed)
2203 dupe.IsAttachment = true; 2203 dupe.IsAttachment = true;
2204 2204
2205 dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); 2205 dupe.m_sittingAvatars = new List<UUID>();
2206 2206
2207 if (!userExposed) 2207 if (!userExposed)
2208 { 2208 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 261e958..8c6450d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -231,6 +231,13 @@ namespace OpenSim.Region.Framework.Scenes
231 231
232 public double SoundRadius; 232 public double SoundRadius;
233 233
234 /// <summary>
235 /// Should sounds played from this prim be queued?
236 /// </summary>
237 /// <remarks>
238 /// This should only be changed by sound modules. It is up to sound modules as to how they interpret this setting.
239 /// </remarks>
240 public bool SoundQueueing { get; set; }
234 241
235 public uint TimeStampFull; 242 public uint TimeStampFull;
236 243
@@ -1218,23 +1225,14 @@ namespace OpenSim.Region.Framework.Scenes
1218 // the mappings more consistant. 1225 // the mappings more consistant.
1219 public Vector3 SitTargetPositionLL 1226 public Vector3 SitTargetPositionLL
1220 { 1227 {
1221 get { return new Vector3(m_sitTargetPosition.X, m_sitTargetPosition.Y,m_sitTargetPosition.Z); } 1228 get { return m_sitTargetPosition; }
1222 set { m_sitTargetPosition = value; } 1229 set { m_sitTargetPosition = value; }
1223 } 1230 }
1224 1231
1225 public Quaternion SitTargetOrientationLL 1232 public Quaternion SitTargetOrientationLL
1226 { 1233 {
1227 get 1234 get { return m_sitTargetOrientation; }
1228 { 1235 set { m_sitTargetOrientation = value; }
1229 return new Quaternion(
1230 m_sitTargetOrientation.X,
1231 m_sitTargetOrientation.Y,
1232 m_sitTargetOrientation.Z,
1233 m_sitTargetOrientation.W
1234 );
1235 }
1236
1237 set { m_sitTargetOrientation = new Quaternion(value.X, value.Y, value.Z, value.W); }
1238 } 1236 }
1239 1237
1240 public bool Stopped 1238 public bool Stopped
@@ -4350,30 +4348,31 @@ namespace OpenSim.Region.Framework.Scenes
4350 } 4348 }
4351 } 4349 }
4352 4350
4353 public void UpdateGroupPosition(Vector3 pos) 4351 public void UpdateGroupPosition(Vector3 newPos)
4354 { 4352 {
4355 if ((pos.X != GroupPosition.X) || 4353 Vector3 oldPos = GroupPosition;
4356 (pos.Y != GroupPosition.Y) || 4354
4357 (pos.Z != GroupPosition.Z)) 4355 if ((newPos.X != oldPos.X) ||
4356 (newPos.Y != oldPos.Y) ||
4357 (newPos.Z != oldPos.Z))
4358 { 4358 {
4359 Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
4360 GroupPosition = newPos; 4359 GroupPosition = newPos;
4361 ScheduleTerseUpdate(); 4360 ScheduleTerseUpdate();
4362 } 4361 }
4363 } 4362 }
4364 4363
4365 /// <summary> 4364 /// <summary>
4366 /// 4365 /// Update this part's offset position.
4367 /// </summary> 4366 /// </summary>
4368 /// <param name="pos"></param> 4367 /// <param name="pos"></param>
4369 public void UpdateOffSet(Vector3 pos) 4368 public void UpdateOffSet(Vector3 newPos)
4370 { 4369 {
4371 if ((pos.X != OffsetPosition.X) || 4370 Vector3 oldPos = OffsetPosition;
4372 (pos.Y != OffsetPosition.Y) ||
4373 (pos.Z != OffsetPosition.Z))
4374 {
4375 Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
4376 4371
4372 if ((newPos.X != oldPos.X) ||
4373 (newPos.Y != oldPos.Y) ||
4374 (newPos.Z != oldPos.Z))
4375 {
4377 if (ParentGroup.RootPart.GetStatusSandbox()) 4376 if (ParentGroup.RootPart.GetStatusSandbox())
4378 { 4377 {
4379 if (Util.GetDistanceTo(ParentGroup.RootPart.StatusSandboxPos, newPos) > 10) 4378 if (Util.GetDistanceTo(ParentGroup.RootPart.StatusSandboxPos, newPos) > 10)
@@ -5014,6 +5013,14 @@ namespace OpenSim.Region.Framework.Scenes
5014 oldTex.DefaultTexture = fallbackOldFace; 5013 oldTex.DefaultTexture = fallbackOldFace;
5015 } 5014 }
5016 5015
5016 // Materials capable viewers can send a ObjectImage packet
5017 // when nothing in TE has changed. MaterialID should be updated
5018 // by the RenderMaterials CAP handler, so updating it here may cause a
5019 // race condtion. Therefore, if no non-materials TE fields have changed,
5020 // we should ignore any changes and not update Shape.TextureEntry
5021
5022 bool otherFieldsChanged = false;
5023
5017 for (int i = 0 ; i < GetNumberOfSides(); i++) 5024 for (int i = 0 ; i < GetNumberOfSides(); i++)
5018 { 5025 {
5019 5026
@@ -5040,18 +5047,36 @@ namespace OpenSim.Region.Framework.Scenes
5040 // Max change, skip the rest of testing 5047 // Max change, skip the rest of testing
5041 if (changeFlags == (Changed.TEXTURE | Changed.COLOR)) 5048 if (changeFlags == (Changed.TEXTURE | Changed.COLOR))
5042 break; 5049 break;
5050
5051 if (!otherFieldsChanged)
5052 {
5053 if (oldFace.Bump != newFace.Bump) otherFieldsChanged = true;
5054 if (oldFace.Fullbright != newFace.Fullbright) otherFieldsChanged = true;
5055 if (oldFace.Glow != newFace.Glow) otherFieldsChanged = true;
5056 if (oldFace.MediaFlags != newFace.MediaFlags) otherFieldsChanged = true;
5057 if (oldFace.OffsetU != newFace.OffsetU) otherFieldsChanged = true;
5058 if (oldFace.OffsetV != newFace.OffsetV) otherFieldsChanged = true;
5059 if (oldFace.RepeatU != newFace.RepeatU) otherFieldsChanged = true;
5060 if (oldFace.RepeatV != newFace.RepeatV) otherFieldsChanged = true;
5061 if (oldFace.Rotation != newFace.Rotation) otherFieldsChanged = true;
5062 if (oldFace.Shiny != newFace.Shiny) otherFieldsChanged = true;
5063 if (oldFace.TexMapType != newFace.TexMapType) otherFieldsChanged = true;
5064 }
5043 } 5065 }
5044 5066
5045 m_shape.TextureEntry = newTex.GetBytes(); 5067 if (changeFlags != 0 || otherFieldsChanged)
5046 if (changeFlags != 0) 5068 {
5047 TriggerScriptChangedEvent(changeFlags); 5069 m_shape.TextureEntry = newTex.GetBytes();
5048 UpdateFlag = UpdateRequired.FULL; 5070 if (changeFlags != 0)
5049 ParentGroup.HasGroupChanged = true; 5071 TriggerScriptChangedEvent(changeFlags);
5072 UpdateFlag = UpdateRequired.FULL;
5073 ParentGroup.HasGroupChanged = true;
5050 5074
5051 //This is madness.. 5075 //This is madness..
5052 //ParentGroup.ScheduleGroupForFullUpdate(); 5076 //ParentGroup.ScheduleGroupForFullUpdate();
5053 //This is sparta 5077 //This is sparta
5054 ScheduleFullUpdate(); 5078 ScheduleFullUpdate();
5079 }
5055 } 5080 }
5056 5081
5057 5082
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0ab267a..1859cb1 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1550,6 +1550,8 @@ namespace OpenSim.Region.Framework.Scenes
1550 // Create child agents in neighbouring regions 1550 // Create child agents in neighbouring regions
1551 if (openChildAgents && !IsChildAgent) 1551 if (openChildAgents && !IsChildAgent)
1552 { 1552 {
1553 // Remember in HandleUseCircuitCode, we delayed this to here
1554 SendInitialDataToMe();
1553 1555
1554 IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); 1556 IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
1555 if (m_agentTransfer != null) 1557 if (m_agentTransfer != null)
@@ -2308,6 +2310,7 @@ namespace OpenSim.Region.Framework.Scenes
2308 AddToPhysicalScene(false); 2310 AddToPhysicalScene(false);
2309 2311
2310 Animator.TrySetMovementAnimation("STAND"); 2312 Animator.TrySetMovementAnimation("STAND");
2313 TriggerScenePresenceUpdated();
2311 } 2314 }
2312 2315
2313 private SceneObjectPart FindNextAvailableSitTarget(UUID targetID) 2316 private SceneObjectPart FindNextAvailableSitTarget(UUID targetID)
@@ -2406,7 +2409,7 @@ namespace OpenSim.Region.Framework.Scenes
2406 ControllingClient.SendSitResponse( 2409 ControllingClient.SendSitResponse(
2407 part.UUID, offset, sitOrientation, false, cameraAtOffset, cameraEyeOffset, forceMouselook); 2410 part.UUID, offset, sitOrientation, false, cameraAtOffset, cameraEyeOffset, forceMouselook);
2408 2411
2409 m_requestedSitTargetUUID = targetID; 2412 m_requestedSitTargetUUID = part.UUID;
2410 2413
2411 HandleAgentSit(ControllingClient, UUID); 2414 HandleAgentSit(ControllingClient, UUID);
2412 2415
@@ -2434,7 +2437,7 @@ namespace OpenSim.Region.Framework.Scenes
2434 if (part != null) 2437 if (part != null)
2435 { 2438 {
2436 m_requestedSitTargetID = part.LocalId; 2439 m_requestedSitTargetID = part.LocalId;
2437 m_requestedSitTargetUUID = targetID; 2440 m_requestedSitTargetUUID = part.UUID;
2438 2441
2439 } 2442 }
2440 else 2443 else
@@ -2633,6 +2636,7 @@ namespace OpenSim.Region.Framework.Scenes
2633 } 2636 }
2634 Animator.TrySetMovementAnimation(sitAnimation); 2637 Animator.TrySetMovementAnimation(sitAnimation);
2635 SendAvatarDataToAllAgents(); 2638 SendAvatarDataToAllAgents();
2639 TriggerScenePresenceUpdated();
2636 } 2640 }
2637 } 2641 }
2638 2642
@@ -2641,6 +2645,7 @@ namespace OpenSim.Region.Framework.Scenes
2641// m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick.. 2645// m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick..
2642 m_AngularVelocity = Vector3.Zero; 2646 m_AngularVelocity = Vector3.Zero;
2643 Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); 2647 Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED");
2648 TriggerScenePresenceUpdated();
2644 SitGround = true; 2649 SitGround = true;
2645 RemoveFromPhysicalScene(); 2650 RemoveFromPhysicalScene();
2646 } 2651 }
@@ -2657,11 +2662,13 @@ namespace OpenSim.Region.Framework.Scenes
2657 public void HandleStartAnim(IClientAPI remoteClient, UUID animID) 2662 public void HandleStartAnim(IClientAPI remoteClient, UUID animID)
2658 { 2663 {
2659 Animator.AddAnimation(animID, UUID.Zero); 2664 Animator.AddAnimation(animID, UUID.Zero);
2665 TriggerScenePresenceUpdated();
2660 } 2666 }
2661 2667
2662 public void HandleStopAnim(IClientAPI remoteClient, UUID animID) 2668 public void HandleStopAnim(IClientAPI remoteClient, UUID animID)
2663 { 2669 {
2664 Animator.RemoveAnimation(animID, false); 2670 Animator.RemoveAnimation(animID, false);
2671 TriggerScenePresenceUpdated();
2665 } 2672 }
2666 2673
2667 public void avnHandleChangeAnim(UUID animID, bool addRemove,bool sendPack) 2674 public void avnHandleChangeAnim(UUID animID, bool addRemove,bool sendPack)
@@ -3347,10 +3354,8 @@ namespace OpenSim.Region.Framework.Scenes
3347 if (byebyeRegions.Count > 0) 3354 if (byebyeRegions.Count > 0)
3348 { 3355 {
3349 m_log.Debug("[SCENE PRESENCE]: Closing " + byebyeRegions.Count + " child agents"); 3356 m_log.Debug("[SCENE PRESENCE]: Closing " + byebyeRegions.Count + " child agents");
3350 Util.FireAndForget(delegate 3357
3351 { 3358 m_scene.SceneGridService.SendCloseChildAgentConnections(ControllingClient.AgentId, byebyeRegions);
3352 m_scene.SceneGridService.SendCloseChildAgentConnections(ControllingClient.AgentId, byebyeRegions);
3353 });
3354 } 3359 }
3355 3360
3356 foreach (ulong handle in byebyeRegions) 3361 foreach (ulong handle in byebyeRegions)
@@ -3693,7 +3698,8 @@ namespace OpenSim.Region.Framework.Scenes
3693 3698
3694// if (m_updateCount > 0) 3699// if (m_updateCount > 0)
3695// { 3700// {
3696 Animator.UpdateMovementAnimations(); 3701 if (Animator.UpdateMovementAnimations())
3702 TriggerScenePresenceUpdated();
3697// m_updateCount--; 3703// m_updateCount--;
3698// } 3704// }
3699 3705
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
index 5398ab9..bf32251 100644
--- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
+++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
@@ -290,6 +290,9 @@ namespace OpenSim.Region.Framework.Scenes
290 290
291 private void statsHeartBeat(object sender, EventArgs e) 291 private void statsHeartBeat(object sender, EventArgs e)
292 { 292 {
293 if (!m_scene.Active)
294 return;
295
293 SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; 296 SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23];
294 SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); 297 SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
295 298
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
index 52ad538..d670dad 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
@@ -33,7 +33,9 @@ using NUnit.Framework;
33using OpenMetaverse; 33using OpenMetaverse;
34using OpenSim.Framework; 34using OpenSim.Framework;
35using OpenSim.Framework.Communications; 35using OpenSim.Framework.Communications;
36using OpenSim.Region.CoreModules.Framework.EntityTransfer;
36using OpenSim.Region.CoreModules.Framework.InventoryAccess; 37using OpenSim.Region.CoreModules.Framework.InventoryAccess;
38using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
37using OpenSim.Region.CoreModules.World.Permissions; 39using OpenSim.Region.CoreModules.World.Permissions;
38using OpenSim.Region.Framework.Scenes; 40using OpenSim.Region.Framework.Scenes;
39using OpenSim.Services.Interfaces; 41using OpenSim.Services.Interfaces;
@@ -52,6 +54,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests
52 [TestFixture] 54 [TestFixture]
53 public class SceneObjectDeRezTests : OpenSimTestCase 55 public class SceneObjectDeRezTests : OpenSimTestCase
54 { 56 {
57 [TestFixtureSetUp]
58 public void FixtureInit()
59 {
60 // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
61 // This facility was added after the original async delete tests were written, so it may be possible now
62 // to not bother explicitly disabling their async (since everything will be running sync).
63 Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
64 }
65
66 [TestFixtureTearDown]
67 public void TearDown()
68 {
69 // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
70 // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
71 // tests really shouldn't).
72 Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
73 }
74
55 /// <summary> 75 /// <summary>
56 /// Test deleting an object from a scene. 76 /// Test deleting an object from a scene.
57 /// </summary> 77 /// </summary>
@@ -59,46 +79,96 @@ namespace OpenSim.Region.Framework.Scenes.Tests
59 public void TestDeRezSceneObject() 79 public void TestDeRezSceneObject()
60 { 80 {
61 TestHelpers.InMethod(); 81 TestHelpers.InMethod();
62// log4net.Config.XmlConfigurator.Configure();
63 82
64 UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); 83 UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
65 84
66 TestScene scene = new SceneHelpers().SetupScene(); 85 TestScene scene = new SceneHelpers().SetupScene();
67 IConfigSource configSource = new IniConfigSource(); 86 SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
68 IConfig config = configSource.AddConfig("Startup"); 87 TestClient client = (TestClient)SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
69 config.Set("serverside_object_permissions", true);
70 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
71 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
72 88
73 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. 89 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
74 AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; 90 AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
75 sogd.Enabled = false; 91 sogd.Enabled = false;
76 92
77 SceneObjectPart part 93 SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, "so1", userId);
78 = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); 94 uint soLocalId = so.LocalId;
79 part.Name = "obj1";
80 scene.AddNewSceneObject(new SceneObjectGroup(part), false);
81 95
82 List<uint> localIds = new List<uint>(); 96 List<uint> localIds = new List<uint>();
83 localIds.Add(part.LocalId); 97 localIds.Add(so.LocalId);
84 scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); 98 scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
85 99
86 // Check that object isn't deleted until we crank the sogd handle. 100 // Check that object isn't deleted until we crank the sogd handle.
87 SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); 101 SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId);
88 Assert.That(retrievedPart, Is.Not.Null); 102 Assert.That(retrievedPart, Is.Not.Null);
89 Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False); 103 Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False);
90 104
91 sogd.InventoryDeQueueAndDelete(); 105 sogd.InventoryDeQueueAndDelete();
92 106
93 SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId); 107 SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId);
94 Assert.That(retrievedPart2, Is.Null); 108 Assert.That(retrievedPart2, Is.Null);
109
110 Assert.That(client.ReceivedKills.Count, Is.EqualTo(1));
111 Assert.That(client.ReceivedKills[0], Is.EqualTo(soLocalId));
112 }
113
114 /// <summary>
115 /// Test that child and root agents correctly receive KillObject notifications.
116 /// </summary>
117 [Test]
118 public void TestDeRezSceneObjectToAgents()
119 {
120 TestHelpers.InMethod();
121// TestHelpers.EnableLogging();
122
123 SceneHelpers sh = new SceneHelpers();
124 TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000);
125 TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999);
126
127 // We need this so that the creation of the root client for userB in sceneB can trigger the creation of a child client in sceneA
128 LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule();
129 EntityTransferModule etmB = new EntityTransferModule();
130 IConfigSource config = new IniConfigSource();
131 IConfig modulesConfig = config.AddConfig("Modules");
132 modulesConfig.Set("EntityTransferModule", etmB.Name);
133 modulesConfig.Set("SimulationServices", lscm.Name);
134 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
135 SceneHelpers.SetupSceneModules(sceneB, config, etmB);
136
137 // We need this for derez
138 SceneHelpers.SetupSceneModules(sceneA, new PermissionsModule());
139
140 UserAccount uaA = UserAccountHelpers.CreateUserWithInventory(sceneA, "Andy", "AAA", 0x1, "");
141 UserAccount uaB = UserAccountHelpers.CreateUserWithInventory(sceneA, "Brian", "BBB", 0x2, "");
142
143 TestClient clientA = (TestClient)SceneHelpers.AddScenePresence(sceneA, uaA).ControllingClient;
144
145 // This is the more long-winded route we have to take to get a child client created for userB in sceneA
146 // rather than just calling AddScenePresence() as for userA
147 AgentCircuitData acd = SceneHelpers.GenerateAgentData(uaB);
148 TestClient clientB = new TestClient(acd, sceneB);
149 List<TestClient> childClientsB = new List<TestClient>();
150 EntityTransferHelpers.SetUpInformClientOfNeighbour(clientB, childClientsB);
151
152 SceneHelpers.AddScenePresence(sceneB, clientB, acd);
153
154 SceneObjectGroup so = SceneHelpers.AddSceneObject(sceneA);
155 uint soLocalId = so.LocalId;
156
157 sceneA.DeleteSceneObject(so, false);
158
159 Assert.That(clientA.ReceivedKills.Count, Is.EqualTo(1));
160 Assert.That(clientA.ReceivedKills[0], Is.EqualTo(soLocalId));
161
162 Assert.That(childClientsB[0].ReceivedKills.Count, Is.EqualTo(1));
163 Assert.That(childClientsB[0].ReceivedKills[0], Is.EqualTo(soLocalId));
95 } 164 }
96 165
97 /// <summary> 166 /// <summary>
98 /// Test deleting an object from a scene where the deleter is not the owner 167 /// Test deleting an object from a scene where the deleter is not the owner
99 /// </summary> 168 /// </summary>
100 /// 169 /// <remarks>
101 /// This test assumes that the deleter is not a god. 170 /// This test assumes that the deleter is not a god.
171 /// </remarks>
102 [Test] 172 [Test]
103 public void TestDeRezSceneObjectNotOwner() 173 public void TestDeRezSceneObjectNotOwner()
104 { 174 {
@@ -109,10 +179,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
109 UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); 179 UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001");
110 180
111 TestScene scene = new SceneHelpers().SetupScene(); 181 TestScene scene = new SceneHelpers().SetupScene();
112 IConfigSource configSource = new IniConfigSource(); 182 SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
113 IConfig config = configSource.AddConfig("Startup");
114 config.Set("serverside_object_permissions", true);
115 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
116 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; 183 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
117 184
118 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. 185 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs
index 8775949..5a72239 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs
@@ -95,11 +95,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
95 SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); 95 SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB);
96 96
97 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); 97 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
98 TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); 98 TestClient tc = new TestClient(acd, sceneA);
99 List<TestClient> destinationTestClients = new List<TestClient>(); 99 List<TestClient> destinationTestClients = new List<TestClient>();
100 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); 100 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
101 101
102 ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); 102 ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
103 originalSp.AbsolutePosition = new Vector3(128, 32, 10); 103 originalSp.AbsolutePosition = new Vector3(128, 32, 10);
104 104
105// originalSp.Flying = true; 105// originalSp.Flying = true;
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
index de4458d..297c66b 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
@@ -139,7 +139,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
139 Vector3 teleportPosition = new Vector3(10, 11, 12); 139 Vector3 teleportPosition = new Vector3(10, 11, 12);
140 Vector3 teleportLookAt = new Vector3(20, 21, 22); 140 Vector3 teleportLookAt = new Vector3(20, 21, 22);
141 141
142 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); 142 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
143 sp.AbsolutePosition = new Vector3(30, 31, 32); 143 sp.AbsolutePosition = new Vector3(30, 31, 32);
144 144
145 List<TestClient> destinationTestClients = new List<TestClient>(); 145 List<TestClient> destinationTestClients = new List<TestClient>();
@@ -224,7 +224,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
224 Vector3 teleportPosition = new Vector3(10, 11, 12); 224 Vector3 teleportPosition = new Vector3(10, 11, 12);
225 Vector3 teleportLookAt = new Vector3(20, 21, 22); 225 Vector3 teleportLookAt = new Vector3(20, 21, 22);
226 226
227 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); 227 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
228 sp.AbsolutePosition = preTeleportPosition; 228 sp.AbsolutePosition = preTeleportPosition;
229 229
230 // Make sceneB return false on query access 230 // Make sceneB return false on query access
@@ -300,7 +300,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
300 Vector3 teleportPosition = new Vector3(10, 11, 12); 300 Vector3 teleportPosition = new Vector3(10, 11, 12);
301 Vector3 teleportLookAt = new Vector3(20, 21, 22); 301 Vector3 teleportLookAt = new Vector3(20, 21, 22);
302 302
303 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); 303 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
304 sp.AbsolutePosition = preTeleportPosition; 304 sp.AbsolutePosition = preTeleportPosition;
305 305
306 // Make sceneB refuse CreateAgent 306 // Make sceneB refuse CreateAgent
@@ -389,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
389 Vector3 teleportPosition = new Vector3(10, 11, 12); 389 Vector3 teleportPosition = new Vector3(10, 11, 12);
390 Vector3 teleportLookAt = new Vector3(20, 21, 22); 390 Vector3 teleportLookAt = new Vector3(20, 21, 22);
391 391
392 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); 392 ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
393 sp.AbsolutePosition = preTeleportPosition; 393 sp.AbsolutePosition = preTeleportPosition;
394 394
395 sceneA.RequestTeleportLocation( 395 sceneA.RequestTeleportLocation(
@@ -428,7 +428,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
428 public void TestSameSimulatorNeighbouringRegions() 428 public void TestSameSimulatorNeighbouringRegions()
429 { 429 {
430 TestHelpers.InMethod(); 430 TestHelpers.InMethod();
431 TestHelpers.EnableLogging(); 431// TestHelpers.EnableLogging();
432 432
433 UUID userId = TestHelpers.ParseTail(0x1); 433 UUID userId = TestHelpers.ParseTail(0x1);
434 434
@@ -458,11 +458,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
458 Vector3 teleportLookAt = new Vector3(20, 21, 22); 458 Vector3 teleportLookAt = new Vector3(20, 21, 22);
459 459
460 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); 460 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
461 TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); 461 TestClient tc = new TestClient(acd, sceneA);
462 List<TestClient> destinationTestClients = new List<TestClient>(); 462 List<TestClient> destinationTestClients = new List<TestClient>();
463 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); 463 EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
464 464
465 ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); 465 ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
466 beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); 466 beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32);
467 467
468 Assert.That(beforeSceneASp, Is.Not.Null); 468 Assert.That(beforeSceneASp, Is.Not.Null);
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index b09ae39..7b47275 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -34,6 +34,7 @@ using System.Threading;
34using log4net; 34using log4net;
35using OpenMetaverse; 35using OpenMetaverse;
36using OpenMetaverse.Assets; 36using OpenMetaverse.Assets;
37using OpenMetaverse.StructuredData;
37using OpenSim.Framework; 38using OpenSim.Framework;
38using OpenSim.Region.Framework.Scenes.Serialization; 39using OpenSim.Region.Framework.Scenes.Serialization;
39using OpenSim.Services.Interfaces; 40using OpenSim.Services.Interfaces;
@@ -180,6 +181,9 @@ namespace OpenSim.Region.Framework.Scenes
180 if (!assetUuids.ContainsKey(tii.AssetID)) 181 if (!assetUuids.ContainsKey(tii.AssetID))
181 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids); 182 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
182 } 183 }
184
185 // get any texture UUIDs used for materials such as normal and specular maps
186 GatherMaterialsUuids(part, assetUuids);
183 } 187 }
184 catch (Exception e) 188 catch (Exception e)
185 { 189 {
@@ -204,6 +208,68 @@ namespace OpenSim.Region.Framework.Scenes
204// } 208// }
205// } 209// }
206 210
211
212 /// <summary>
213 /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
214 /// </summary>
215 /// <param name="part"></param>
216 /// <param name="assetUuids"></param>
217 public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
218 {
219 // scan thru the dynAttrs map of this part for any textures used as materials
220 OSDMap OSMaterials = null;
221
222 lock (part.DynAttrs)
223 {
224 if (part.DynAttrs.ContainsKey("OS:Materials"))
225 OSMaterials = part.DynAttrs["OS:Materials"];
226 if (OSMaterials != null && OSMaterials.ContainsKey("Materials"))
227 {
228 OSD osd = OSMaterials["Materials"];
229 //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
230
231 if (osd is OSDArray)
232 {
233 OSDArray matsArr = osd as OSDArray;
234 foreach (OSDMap matMap in matsArr)
235 {
236 try
237 {
238 if (matMap.ContainsKey("Material"))
239 {
240 OSDMap mat = matMap["Material"] as OSDMap;
241 if (mat.ContainsKey("NormMap"))
242 {
243 UUID normalMapId = mat["NormMap"].AsUUID();
244 if (normalMapId != UUID.Zero)
245 {
246 assetUuids[normalMapId] = AssetType.Texture;
247 //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
248 }
249 }
250 if (mat.ContainsKey("SpecMap"))
251 {
252 UUID specularMapId = mat["SpecMap"].AsUUID();
253 if (specularMapId != UUID.Zero)
254 {
255 assetUuids[specularMapId] = AssetType.Texture;
256 //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
257 }
258 }
259 }
260
261 }
262 catch (Exception e)
263 {
264 m_log.Warn("[UUID Gatherer]: exception getting materials: " + e.Message);
265 }
266 }
267 }
268 }
269 }
270 }
271
272
207 /// <summary> 273 /// <summary>
208 /// Get an asset synchronously, potentially using an asynchronous callback. If the 274 /// Get an asset synchronously, potentially using an asynchronous callback. If the
209 /// asynchronous callback is used, we will wait for it to complete. 275 /// asynchronous callback is used, we will wait for it to complete.
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index dd72cfb..b28d96b 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -660,6 +660,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
660 public event BakeTerrain OnBakeTerrain; 660 public event BakeTerrain OnBakeTerrain;
661 public event EstateChangeInfo OnEstateChangeInfo; 661 public event EstateChangeInfo OnEstateChangeInfo;
662 public event EstateManageTelehub OnEstateManageTelehub; 662 public event EstateManageTelehub OnEstateManageTelehub;
663 public event CachedTextureRequest OnCachedTextureRequest;
663 public event SetAppearance OnSetAppearance; 664 public event SetAppearance OnSetAppearance;
664 public event AvatarNowWearing OnAvatarNowWearing; 665 public event AvatarNowWearing OnAvatarNowWearing;
665 public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv; 666 public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
@@ -943,13 +944,18 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
943 { 944 {
944 945
945 } 946 }
947
948 public void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures)
949 {
946 950
951 }
952
947 public void SendStartPingCheck(byte seq) 953 public void SendStartPingCheck(byte seq)
948 { 954 {
949 955
950 } 956 }
951 957
952 public void SendKillObject(ulong regionHandle, List<uint> localID) 958 public void SendKillObject(List<uint> localID)
953 { 959 {
954 960
955 } 961 }
diff --git a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
index 018357a..c48e585 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
@@ -375,11 +375,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge
375 scene.GetRootAgentCount(), scene.RegionInfo.RegionName, 375 scene.GetRootAgentCount(), scene.RegionInfo.RegionName,
376 scene.RegionInfo.RegionID, 376 scene.RegionInfo.RegionID,
377 DateTime.UtcNow.ToString("s"))); 377 DateTime.UtcNow.ToString("s")));
378
378 scene.ForEachRootScenePresence(delegate(ScenePresence sp) 379 scene.ForEachRootScenePresence(delegate(ScenePresence sp)
379 { 380 {
380 list.Append(String.Format(" <avatar name=\"{0}\" uuid=\"{1}\" />\n", sp.Name, sp.UUID)); 381 list.Append(String.Format(" <avatar name=\"{0}\" uuid=\"{1}\" />\n", sp.Name, sp.UUID));
381 list.Append("</avatars>");
382 }); 382 });
383
384 list.Append("</avatars>");
383 string payload = list.ToString(); 385 string payload = list.ToString();
384 386
385 // post via REST to broker 387 // post via REST to broker
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
index e756c70..2f07c42 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
@@ -117,6 +117,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice
117 117
118 private IConfig m_config; 118 private IConfig m_config;
119 119
120 private object m_Lock;
121
120 public void Initialise(IConfigSource config) 122 public void Initialise(IConfigSource config)
121 { 123 {
122 124
@@ -128,6 +130,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice
128 if (!m_config.GetBoolean("enabled", false)) 130 if (!m_config.GetBoolean("enabled", false))
129 return; 131 return;
130 132
133 m_Lock = new object();
134
131 try 135 try
132 { 136 {
133 // retrieve configuration variables 137 // retrieve configuration variables
@@ -837,7 +841,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice
837 requrl = String.Format("{0}&chan_roll_off={1}", requrl, m_vivoxChannelRollOff); 841 requrl = String.Format("{0}&chan_roll_off={1}", requrl, m_vivoxChannelRollOff);
838 requrl = String.Format("{0}&chan_dist_model={1}", requrl, m_vivoxChannelDistanceModel); 842 requrl = String.Format("{0}&chan_dist_model={1}", requrl, m_vivoxChannelDistanceModel);
839 requrl = String.Format("{0}&chan_max_range={1}", requrl, m_vivoxChannelMaximumRange); 843 requrl = String.Format("{0}&chan_max_range={1}", requrl, m_vivoxChannelMaximumRange);
840 requrl = String.Format("{0}&chan_ckamping_distance={1}", requrl, m_vivoxChannelClampingDistance); 844 requrl = String.Format("{0}&chan_clamping_distance={1}", requrl, m_vivoxChannelClampingDistance);
841 845
842 XmlElement resp = VivoxCall(requrl, true); 846 XmlElement resp = VivoxCall(requrl, true);
843 if (XmlFind(resp, "response.level0.body.chan_uri", out channelUri)) 847 if (XmlFind(resp, "response.level0.body.chan_uri", out channelUri))
@@ -1118,25 +1122,32 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice
1118 1122
1119 doc = new XmlDocument(); 1123 doc = new XmlDocument();
1120 1124
1121 try 1125 // Let's serialize all calls to Vivox. Most of these are driven by
1126 // the clients (CAPs), when the user arrives at the region. We don't
1127 // want to issue many simultaneous http requests to Vivox, because mono
1128 // doesn't like that
1129 lock (m_Lock)
1122 { 1130 {
1123 // Otherwise prepare the request 1131 try
1124// m_log.DebugFormat("[VivoxVoice] Sending request <{0}>", requrl); 1132 {
1133 // Otherwise prepare the request
1134 //m_log.DebugFormat("[VivoxVoice] Sending request <{0}>", requrl);
1125 1135
1126 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requrl); 1136 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requrl);
1127 1137
1128 // We are sending just parameters, no content 1138 // We are sending just parameters, no content
1129 req.ContentLength = 0; 1139 req.ContentLength = 0;
1130 1140
1131 // Send request and retrieve the response 1141 // Send request and retrieve the response
1132 using (HttpWebResponse rsp = (HttpWebResponse)req.GetResponse()) 1142 using (HttpWebResponse rsp = (HttpWebResponse)req.GetResponse())
1133 using (Stream s = rsp.GetResponseStream()) 1143 using (Stream s = rsp.GetResponseStream())
1134 using (XmlTextReader rdr = new XmlTextReader(s)) 1144 using (XmlTextReader rdr = new XmlTextReader(s))
1135 doc.Load(rdr); 1145 doc.Load(rdr);
1136 } 1146 }
1137 catch (Exception e) 1147 catch (Exception e)
1138 { 1148 {
1139 m_log.ErrorFormat("[VivoxVoice] Error in admin call : {0}", e.Message); 1149 m_log.ErrorFormat("[VivoxVoice] Error in admin call : {0}", e.Message);
1150 }
1140 } 1151 }
1141 1152
1142 // If we're debugging server responses, dump the whole 1153 // If we're debugging server responses, dump the whole
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
new file mode 100644
index 0000000..4ab6609
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
@@ -0,0 +1,579 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Reflection;
32using System.Security.Cryptography; // for computing md5 hash
33using log4net;
34using Mono.Addins;
35using Nini.Config;
36
37using OpenMetaverse;
38using OpenMetaverse.StructuredData;
39
40using OpenSim.Framework;
41using OpenSim.Framework.Servers;
42using OpenSim.Framework.Servers.HttpServer;
43using OpenSim.Region.Framework.Interfaces;
44using OpenSim.Region.Framework.Scenes;
45
46using Ionic.Zlib;
47
48// You will need to uncomment these lines if you are adding a region module to some other assembly which does not already
49// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
50// the available DLLs
51//[assembly: Addin("MaterialsDemoModule", "1.0")]
52//[assembly: AddinDependency("OpenSim", "0.5")]
53
54namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
55{
56 /// <summary>
57 ///
58 // # # ## ##### # # # # # ####
59 // # # # # # # ## # # ## # # #
60 // # # # # # # # # # # # # # #
61 // # ## # ###### ##### # # # # # # # # ###
62 // ## ## # # # # # ## # # ## # #
63 // # # # # # # # # # # # ####
64 //
65 // THIS MODULE IS FOR EXPERIMENTAL USE ONLY AND MAY CAUSE REGION OR ASSET CORRUPTION!
66 //
67 ////////////// WARNING //////////////////////////////////////////////////////////////////
68 /// This is an *Experimental* module for developing support for materials-capable viewers
69 /// This module should NOT be used in a production environment! It may cause data corruption and
70 /// viewer crashes. It should be only used to evaluate implementations of materials.
71 ///
72 /// Materials are persisted via SceneObjectPart.dynattrs. This is a relatively new feature
73 /// of OpenSimulator and is not field proven at the time this module was written. Persistence
74 /// may fail or become corrupt and this could cause viewer crashes due to erroneous materials
75 /// data being sent to viewers. Materials descriptions might survive IAR, OAR, or other means
76 /// of archiving however the texture resources used by these materials probably will not as they
77 /// may not be adequately referenced to ensure proper archiving.
78 ///
79 ///
80 ///
81 /// To enable this module, add this string at the bottom of OpenSim.ini:
82 /// [MaterialsDemoModule]
83 ///
84 /// </summary>
85 ///
86
87 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MaterialsDemoModule")]
88 public class MaterialsDemoModule : INonSharedRegionModule
89 {
90 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
91
92 public string Name { get { return "MaterialsDemoModule"; } }
93
94 public Type ReplaceableInterface { get { return null; } }
95
96 private Scene m_scene = null;
97 private bool m_enabled = false;
98
99 public Dictionary<UUID, OSDMap> m_knownMaterials = new Dictionary<UUID, OSDMap>();
100
101 public void Initialise(IConfigSource source)
102 {
103 m_enabled = (source.Configs["MaterialsDemoModule"] != null);
104 if (!m_enabled)
105 return;
106
107 m_log.DebugFormat("[MaterialsDemoModule]: INITIALIZED MODULE");
108 }
109
110 public void Close()
111 {
112 if (!m_enabled)
113 return;
114
115 m_log.DebugFormat("[MaterialsDemoModule]: CLOSED MODULE");
116 }
117
118 public void AddRegion(Scene scene)
119 {
120 if (!m_enabled)
121 return;
122
123 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
124 m_scene = scene;
125 m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps);
126 m_scene.EventManager.OnObjectAddedToScene += new Action<SceneObjectGroup>(EventManager_OnObjectAddedToScene);
127 }
128
129 void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
130 {
131 foreach (var part in obj.Parts)
132 if (part != null)
133 GetStoredMaterialsForPart(part);
134 }
135
136 void OnRegisterCaps(OpenMetaverse.UUID agentID, OpenSim.Framework.Capabilities.Caps caps)
137 {
138 string capsBase = "/CAPS/" + caps.CapsObjectPath;
139
140 IRequestHandler renderMaterialsPostHandler = new RestStreamHandler("POST", capsBase + "/", RenderMaterialsPostCap);
141 caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler);
142
143 // OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET
144 // and POST handlers, (at least at the time this was originally written), so we first set up a POST
145 // handler normally and then add a GET handler via MainServer
146
147 IRequestHandler renderMaterialsGetHandler = new RestStreamHandler("GET", capsBase + "/", RenderMaterialsGetCap);
148 MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler);
149
150 // materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well
151 IRequestHandler renderMaterialsPutHandler = new RestStreamHandler("PUT", capsBase + "/", RenderMaterialsPostCap);
152 MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler);
153 }
154
155 public void RemoveRegion(Scene scene)
156 {
157 if (!m_enabled)
158 return;
159
160 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
161 }
162
163 public void RegionLoaded(Scene scene)
164 {
165 }
166
167 OSDMap GetMaterial(UUID id)
168 {
169 OSDMap map = null;
170 if (m_knownMaterials.ContainsKey(id))
171 {
172 map = new OSDMap();
173 map["ID"] = OSD.FromBinary(id.GetBytes());
174 map["Material"] = m_knownMaterials[id];
175 }
176 return map;
177 }
178
179 void GetStoredMaterialsForPart(SceneObjectPart part)
180 {
181 OSDMap OSMaterials = null;
182 OSDArray matsArr = null;
183
184 if (part.DynAttrs == null)
185 {
186 m_log.Warn("[MaterialsDemoModule]: NULL DYNATTRS :( ");
187 }
188
189 lock (part.DynAttrs)
190 {
191 if (part.DynAttrs.ContainsKey("OS:Materials"))
192 OSMaterials = part.DynAttrs["OS:Materials"];
193 if (OSMaterials != null && OSMaterials.ContainsKey("Materials"))
194 {
195
196 OSD osd = OSMaterials["Materials"];
197 if (osd is OSDArray)
198 matsArr = osd as OSDArray;
199 }
200 }
201
202 if (OSMaterials == null)
203 return;
204
205 m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials));
206
207
208 if (matsArr == null)
209 {
210 m_log.Info("[MaterialsDemoModule]: matsArr is null :( ");
211 return;
212 }
213
214 foreach (OSD elemOsd in matsArr)
215 {
216 if (elemOsd != null && elemOsd is OSDMap)
217 {
218
219 OSDMap matMap = elemOsd as OSDMap;
220 if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material"))
221 {
222 try
223 {
224 m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"];
225 }
226 catch (Exception e)
227 {
228 m_log.Warn("[MaterialsDemoModule]: exception decoding persisted material: " + e.ToString());
229 }
230 }
231 }
232 }
233 }
234
235
236 void StoreMaterialsForPart(SceneObjectPart part)
237 {
238 try
239 {
240 if (part == null || part.Shape == null)
241 return;
242
243 Dictionary<UUID, OSDMap> mats = new Dictionary<UUID, OSDMap>();
244
245 Primitive.TextureEntry te = part.Shape.Textures;
246
247 if (te.DefaultTexture != null)
248 {
249 if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID))
250 mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID];
251 }
252
253 if (te.FaceTextures != null)
254 {
255 foreach (var face in te.FaceTextures)
256 {
257 if (face != null)
258 {
259 if (m_knownMaterials.ContainsKey(face.MaterialID))
260 mats[face.MaterialID] = m_knownMaterials[face.MaterialID];
261 }
262 }
263 }
264 if (mats.Count == 0)
265 return;
266
267 OSDArray matsArr = new OSDArray();
268 foreach (KeyValuePair<UUID, OSDMap> kvp in mats)
269 {
270 OSDMap matOsd = new OSDMap();
271 matOsd["ID"] = OSD.FromUUID(kvp.Key);
272 matOsd["Material"] = kvp.Value;
273 matsArr.Add(matOsd);
274 }
275
276 OSDMap OSMaterials = new OSDMap();
277 OSMaterials["Materials"] = matsArr;
278
279 lock (part.DynAttrs)
280 part.DynAttrs["OS:Materials"] = OSMaterials;
281 }
282 catch (Exception e)
283 {
284 m_log.Warn("[MaterialsDemoModule]: exception in StoreMaterialsForPart(): " + e.ToString());
285 }
286 }
287
288
289 public string RenderMaterialsPostCap(string request, string path,
290 string param, IOSHttpRequest httpRequest,
291 IOSHttpResponse httpResponse)
292 {
293 m_log.Debug("[MaterialsDemoModule]: POST cap handler");
294
295 OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
296 OSDMap resp = new OSDMap();
297
298 OSDMap materialsFromViewer = null;
299
300 OSDArray respArr = new OSDArray();
301
302 if (req.ContainsKey("Zipped"))
303 {
304 OSD osd = null;
305
306 byte[] inBytes = req["Zipped"].AsBinary();
307
308 try
309 {
310 osd = ZDecompressBytesToOsd(inBytes);
311
312 if (osd != null)
313 {
314 if (osd is OSDArray) // assume array of MaterialIDs designating requested material entries
315 {
316 foreach (OSD elem in (OSDArray)osd)
317 {
318
319 try
320 {
321 UUID id = new UUID(elem.AsBinary(), 0);
322
323 if (m_knownMaterials.ContainsKey(id))
324 {
325 m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString());
326 OSDMap matMap = new OSDMap();
327 matMap["ID"] = OSD.FromBinary(id.GetBytes());
328
329 matMap["Material"] = m_knownMaterials[id];
330 respArr.Add(matMap);
331 }
332 else
333 m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString());
334 }
335 catch (Exception e)
336 {
337 // report something here?
338 continue;
339 }
340 }
341 }
342 else if (osd is OSDMap) // reqest to assign a material
343 {
344 materialsFromViewer = osd as OSDMap;
345
346 if (materialsFromViewer.ContainsKey("FullMaterialsPerFace"))
347 {
348 OSD matsOsd = materialsFromViewer["FullMaterialsPerFace"];
349 if (matsOsd is OSDArray)
350 {
351 OSDArray matsArr = matsOsd as OSDArray;
352
353 try
354 {
355 foreach (OSDMap matsMap in matsArr)
356 {
357 m_log.Debug("[MaterialsDemoModule]: processing matsMap: " + OSDParser.SerializeJsonString(matsMap));
358
359 uint matLocalID = 0;
360 try { matLocalID = matsMap["ID"].AsUInteger(); }
361 catch (Exception e) { m_log.Warn("[MaterialsDemoModule]: cannot decode \"ID\" from matsMap: " + e.Message); }
362 m_log.Debug("[MaterialsDemoModule]: matLocalId: " + matLocalID.ToString());
363
364
365 OSDMap mat = null;
366 try { mat = matsMap["Material"] as OSDMap; }
367 catch (Exception e) { m_log.Warn("[MaterialsDemoModule]: cannot decode \"Material\" from matsMap: " + e.Message); }
368 m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat));
369
370 UUID id = HashOsd(mat);
371 m_knownMaterials[id] = mat;
372
373
374 var sop = m_scene.GetSceneObjectPart(matLocalID);
375 if (sop == null)
376 m_log.Debug("[MaterialsDemoModule]: null SOP for localId: " + matLocalID.ToString());
377 else
378 {
379 //var te = sop.Shape.Textures;
380 var te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
381
382 if (te == null)
383 {
384 m_log.Debug("[MaterialsDemoModule]: null TextureEntry for localId: " + matLocalID.ToString());
385 }
386 else
387 {
388 int face = -1;
389
390 if (matsMap.ContainsKey("Face"))
391 {
392 face = matsMap["Face"].AsInteger();
393 if (te.FaceTextures == null) // && face == 0)
394 {
395 if (te.DefaultTexture == null)
396 m_log.Debug("[MaterialsDemoModule]: te.DefaultTexture is null");
397 else
398 {
399 if (te.DefaultTexture.MaterialID == null)
400 m_log.Debug("[MaterialsDemoModule]: te.DefaultTexture.MaterialID is null");
401 else
402 {
403 te.DefaultTexture.MaterialID = id;
404 }
405 }
406 }
407 else
408 {
409 if (te.FaceTextures.Length >= face - 1)
410 {
411 if (te.FaceTextures[face] == null)
412 te.DefaultTexture.MaterialID = id;
413 else
414 te.FaceTextures[face].MaterialID = id;
415 }
416 }
417 }
418 else
419 {
420 if (te.DefaultTexture != null)
421 te.DefaultTexture.MaterialID = id;
422 }
423
424 m_log.Debug("[MaterialsDemoModule]: setting material ID for face " + face.ToString() + " to " + id.ToString());
425
426 //we cant use sop.UpdateTextureEntry(te); because it filters so do it manually
427
428 if (sop.ParentGroup != null)
429 {
430 sop.Shape.TextureEntry = te.GetBytes();
431 sop.TriggerScriptChangedEvent(Changed.TEXTURE);
432 sop.UpdateFlag = UpdateRequired.FULL;
433 sop.ParentGroup.HasGroupChanged = true;
434
435 sop.ScheduleFullUpdate();
436
437 StoreMaterialsForPart(sop);
438 }
439 }
440 }
441 }
442 }
443 catch (Exception e)
444 {
445 m_log.Warn("[MaterialsDemoModule]: exception processing received material: " + e.Message);
446 }
447 }
448 }
449 }
450 }
451
452 }
453 catch (Exception e)
454 {
455 m_log.Warn("[MaterialsDemoModule]: exception decoding zipped CAP payload: " + e.Message);
456 //return "";
457 }
458 m_log.Debug("[MaterialsDemoModule]: knownMaterials.Count: " + m_knownMaterials.Count.ToString());
459 }
460
461
462 resp["Zipped"] = ZCompressOSD(respArr, false);
463 string response = OSDParser.SerializeLLSDXmlString(resp);
464
465 //m_log.Debug("[MaterialsDemoModule]: cap request: " + request);
466 m_log.Debug("[MaterialsDemoModule]: cap request (zipped portion): " + ZippedOsdBytesToString(req["Zipped"].AsBinary()));
467 m_log.Debug("[MaterialsDemoModule]: cap response: " + response);
468 return response;
469 }
470
471
472 public string RenderMaterialsGetCap(string request, string path,
473 string param, IOSHttpRequest httpRequest,
474 IOSHttpResponse httpResponse)
475 {
476 m_log.Debug("[MaterialsDemoModule]: GET cap handler");
477
478 OSDMap resp = new OSDMap();
479
480
481 int matsCount = 0;
482
483 OSDArray allOsd = new OSDArray();
484
485 foreach (KeyValuePair<UUID, OSDMap> kvp in m_knownMaterials)
486 {
487 OSDMap matMap = new OSDMap();
488
489 matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes());
490
491 matMap["Material"] = kvp.Value;
492 allOsd.Add(matMap);
493 matsCount++;
494 }
495
496
497 resp["Zipped"] = ZCompressOSD(allOsd, false);
498 m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString());
499
500 return OSDParser.SerializeLLSDXmlString(resp);
501 }
502
503 static string ZippedOsdBytesToString(byte[] bytes)
504 {
505 try
506 {
507 return OSDParser.SerializeJsonString(ZDecompressBytesToOsd(bytes));
508 }
509 catch (Exception e)
510 {
511 return "ZippedOsdBytesToString caught an exception: " + e.ToString();
512 }
513 }
514
515 /// <summary>
516 /// computes a UUID by hashing a OSD object
517 /// </summary>
518 /// <param name="osd"></param>
519 /// <returns></returns>
520 private static UUID HashOsd(OSD osd)
521 {
522 using (var md5 = MD5.Create())
523 using (MemoryStream ms = new MemoryStream(OSDParser.SerializeLLSDBinary(osd, false)))
524 return new UUID(md5.ComputeHash(ms), 0);
525 }
526
527 public static OSD ZCompressOSD(OSD inOsd, bool useHeader)
528 {
529 OSD osd = null;
530
531 using (MemoryStream msSinkCompressed = new MemoryStream())
532 {
533 using (Ionic.Zlib.ZlibStream zOut = new Ionic.Zlib.ZlibStream(msSinkCompressed,
534 Ionic.Zlib.CompressionMode.Compress, CompressionLevel.BestCompression, true))
535 {
536 CopyStream(new MemoryStream(OSDParser.SerializeLLSDBinary(inOsd, useHeader)), zOut);
537 zOut.Close();
538 }
539
540 msSinkCompressed.Seek(0L, SeekOrigin.Begin);
541 osd = OSD.FromBinary( msSinkCompressed.ToArray());
542 }
543
544 return osd;
545 }
546
547
548 public static OSD ZDecompressBytesToOsd(byte[] input)
549 {
550 OSD osd = null;
551
552 using (MemoryStream msSinkUnCompressed = new MemoryStream())
553 {
554 using (Ionic.Zlib.ZlibStream zOut = new Ionic.Zlib.ZlibStream(msSinkUnCompressed, CompressionMode.Decompress, true))
555 {
556 CopyStream(new MemoryStream(input), zOut);
557 zOut.Close();
558 }
559 msSinkUnCompressed.Seek(0L, SeekOrigin.Begin);
560 osd = OSDParser.DeserializeLLSDBinary(msSinkUnCompressed.ToArray());
561 }
562
563 return osd;
564 }
565
566 static void CopyStream(System.IO.Stream input, System.IO.Stream output)
567 {
568 byte[] buffer = new byte[2048];
569 int len;
570 while ((len = input.Read(buffer, 0, 2048)) > 0)
571 {
572 output.Write(buffer, 0, len);
573 }
574
575 output.Flush();
576 }
577
578 }
579} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index 0c9fdb9..25f198b 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -695,7 +695,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
695 /// <param name="agentId"></param> 695 /// <param name="agentId"></param>
696 public void EconomyDataRequestHandler(IClientAPI user) 696 public void EconomyDataRequestHandler(IClientAPI user)
697 { 697 {
698 Scene s = LocateSceneClientIn(user.AgentId); 698 Scene s = (Scene)user.Scene;
699 699
700 user.SendEconomyData(EnergyEfficiency, s.RegionInfo.ObjectCapacity, ObjectCount, PriceEnergyUnit, PriceGroupCreate, 700 user.SendEconomyData(EnergyEfficiency, s.RegionInfo.ObjectCapacity, ObjectCount, PriceEnergyUnit, PriceGroupCreate,
701 PriceObjectClaim, PriceObjectRent, PriceObjectScaleFactor, PriceParcelClaim, PriceParcelClaimFactor, 701 PriceObjectClaim, PriceObjectRent, PriceObjectScaleFactor, PriceParcelClaim, PriceParcelClaimFactor,
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 4674489..c8aab54 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -393,6 +393,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
393 public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest; 393 public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
394 public event EstateChangeInfo OnEstateChangeInfo; 394 public event EstateChangeInfo OnEstateChangeInfo;
395 public event EstateManageTelehub OnEstateManageTelehub; 395 public event EstateManageTelehub OnEstateManageTelehub;
396 public event CachedTextureRequest OnCachedTextureRequest;
396 public event ScriptReset OnScriptReset; 397 public event ScriptReset OnScriptReset;
397 public event GetScriptRunning OnGetScriptRunning; 398 public event GetScriptRunning OnGetScriptRunning;
398 public event SetScriptRunning OnSetScriptRunning; 399 public event SetScriptRunning OnSetScriptRunning;
@@ -573,6 +574,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
573 { 574 {
574 } 575 }
575 576
577 public void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures)
578 {
579
580 }
581
576 public virtual void Kick(string message) 582 public virtual void Kick(string message)
577 { 583 {
578 } 584 }
@@ -590,7 +596,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
590 596
591 } 597 }
592 598
593 public virtual void SendKillObject(ulong regionHandle, List<uint> localID) 599 public virtual void SendKillObject(List<uint> localID)
594 { 600 {
595 } 601 }
596 602
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs
index 77ea3ed..12a0c17 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs
@@ -75,11 +75,11 @@ private sealed class BulletBodyUnman : BulletBody
75private sealed class BulletShapeUnman : BulletShape 75private sealed class BulletShapeUnman : BulletShape
76{ 76{
77 public IntPtr ptr; 77 public IntPtr ptr;
78 public BulletShapeUnman(IntPtr xx, BSPhysicsShapeType typ) 78 public BulletShapeUnman(IntPtr xx, BSPhysicsShapeType typ)
79 : base() 79 : base()
80 { 80 {
81 ptr = xx; 81 ptr = xx;
82 type = typ; 82 shapeType = typ;
83 } 83 }
84 public override bool HasPhysicalShape 84 public override bool HasPhysicalShape
85 { 85 {
@@ -91,7 +91,7 @@ private sealed class BulletShapeUnman : BulletShape
91 } 91 }
92 public override BulletShape Clone() 92 public override BulletShape Clone()
93 { 93 {
94 return new BulletShapeUnman(ptr, type); 94 return new BulletShapeUnman(ptr, shapeType);
95 } 95 }
96 public override bool ReferenceSame(BulletShape other) 96 public override bool ReferenceSame(BulletShape other)
97 { 97 {
@@ -251,23 +251,52 @@ public override BulletShape CreateMeshShape(BulletWorld world,
251 BSPhysicsShapeType.SHAPE_MESH); 251 BSPhysicsShapeType.SHAPE_MESH);
252} 252}
253 253
254public override BulletShape CreateGImpactShape(BulletWorld world,
255 int indicesCount, int[] indices,
256 int verticesCount, float[] vertices)
257{
258 BulletWorldUnman worldu = world as BulletWorldUnman;
259 return new BulletShapeUnman(
260 BSAPICPP.CreateGImpactShape2(worldu.ptr, indicesCount, indices, verticesCount, vertices),
261 BSPhysicsShapeType.SHAPE_GIMPACT);
262}
263
254public override BulletShape CreateHullShape(BulletWorld world, int hullCount, float[] hulls) 264public override BulletShape CreateHullShape(BulletWorld world, int hullCount, float[] hulls)
255{ 265{
256 BulletWorldUnman worldu = world as BulletWorldUnman; 266 BulletWorldUnman worldu = world as BulletWorldUnman;
257 return new BulletShapeUnman( 267 return new BulletShapeUnman(
258 BSAPICPP.CreateHullShape2(worldu.ptr, hullCount, hulls), 268 BSAPICPP.CreateHullShape2(worldu.ptr, hullCount, hulls),
259 BSPhysicsShapeType.SHAPE_HULL); 269 BSPhysicsShapeType.SHAPE_HULL);
260} 270}
261 271
262public override BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape) 272public override BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape, HACDParams parms)
263{ 273{
264 BulletWorldUnman worldu = world as BulletWorldUnman; 274 BulletWorldUnman worldu = world as BulletWorldUnman;
265 BulletShapeUnman shapeu = meshShape as BulletShapeUnman; 275 BulletShapeUnman shapeu = meshShape as BulletShapeUnman;
266 return new BulletShapeUnman( 276 return new BulletShapeUnman(
267 BSAPICPP.BuildHullShapeFromMesh2(worldu.ptr, shapeu.ptr), 277 BSAPICPP.BuildHullShapeFromMesh2(worldu.ptr, shapeu.ptr, parms),
268 BSPhysicsShapeType.SHAPE_HULL); 278 BSPhysicsShapeType.SHAPE_HULL);
269} 279}
270 280
281public override BulletShape BuildConvexHullShapeFromMesh(BulletWorld world, BulletShape meshShape)
282{
283 BulletWorldUnman worldu = world as BulletWorldUnman;
284 BulletShapeUnman shapeu = meshShape as BulletShapeUnman;
285 return new BulletShapeUnman(
286 BSAPICPP.BuildConvexHullShapeFromMesh2(worldu.ptr, shapeu.ptr),
287 BSPhysicsShapeType.SHAPE_CONVEXHULL);
288}
289
290public override BulletShape CreateConvexHullShape(BulletWorld world,
291 int indicesCount, int[] indices,
292 int verticesCount, float[] vertices)
293{
294 BulletWorldUnman worldu = world as BulletWorldUnman;
295 return new BulletShapeUnman(
296 BSAPICPP.CreateConvexHullShape2(worldu.ptr, indicesCount, indices, verticesCount, vertices),
297 BSPhysicsShapeType.SHAPE_CONVEXHULL);
298}
299
271public override BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData) 300public override BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData)
272{ 301{
273 BulletWorldUnman worldu = world as BulletWorldUnman; 302 BulletWorldUnman worldu = world as BulletWorldUnman;
@@ -356,7 +385,7 @@ public override BulletShape DuplicateCollisionShape(BulletWorld world, BulletSha
356{ 385{
357 BulletWorldUnman worldu = world as BulletWorldUnman; 386 BulletWorldUnman worldu = world as BulletWorldUnman;
358 BulletShapeUnman srcShapeu = srcShape as BulletShapeUnman; 387 BulletShapeUnman srcShapeu = srcShape as BulletShapeUnman;
359 return new BulletShapeUnman(BSAPICPP.DuplicateCollisionShape2(worldu.ptr, srcShapeu.ptr, id), srcShape.type); 388 return new BulletShapeUnman(BSAPICPP.DuplicateCollisionShape2(worldu.ptr, srcShapeu.ptr, id), srcShape.shapeType);
360} 389}
361 390
362public override bool DeleteCollisionShape(BulletWorld world, BulletShape shape) 391public override bool DeleteCollisionShape(BulletWorld world, BulletShape shape)
@@ -1407,11 +1436,24 @@ public static extern IntPtr CreateMeshShape2(IntPtr world,
1407 int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices ); 1436 int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
1408 1437
1409[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] 1438[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1439public static extern IntPtr CreateGImpactShape2(IntPtr world,
1440 int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices,
1441 int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
1442
1443[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1410public static extern IntPtr CreateHullShape2(IntPtr world, 1444public static extern IntPtr CreateHullShape2(IntPtr world,
1411 int hullCount, [MarshalAs(UnmanagedType.LPArray)] float[] hulls); 1445 int hullCount, [MarshalAs(UnmanagedType.LPArray)] float[] hulls);
1412 1446
1413[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] 1447[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1414public static extern IntPtr BuildHullShapeFromMesh2(IntPtr world, IntPtr meshShape); 1448public static extern IntPtr BuildHullShapeFromMesh2(IntPtr world, IntPtr meshShape, HACDParams parms);
1449
1450[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1451public static extern IntPtr BuildConvexHullShapeFromMesh2(IntPtr world, IntPtr meshShape);
1452
1453[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1454public static extern IntPtr CreateConvexHullShape2(IntPtr world,
1455 int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices,
1456 int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices );
1415 1457
1416[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] 1458[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1417public static extern IntPtr BuildNativeShape2(IntPtr world, ShapeData shapeData); 1459public static extern IntPtr BuildNativeShape2(IntPtr world, ShapeData shapeData);
@@ -1476,7 +1518,7 @@ public static extern void DestroyObject2(IntPtr sim, IntPtr obj);
1476public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin); 1518public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin);
1477 1519
1478[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] 1520[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
1479public static extern IntPtr CreateTerrainShape2(uint id, Vector3 size, float minHeight, float maxHeight, 1521public static extern IntPtr CreateTerrainShape2(uint id, Vector3 size, float minHeight, float maxHeight,
1480 [MarshalAs(UnmanagedType.LPArray)] float[] heightMap, 1522 [MarshalAs(UnmanagedType.LPArray)] float[] heightMap,
1481 float scaleFactor, float collisionMargin); 1523 float scaleFactor, float collisionMargin);
1482 1524
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs
index 6fc10e9..6db5f5e 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs
@@ -81,11 +81,11 @@ private sealed class BulletBodyXNA : BulletBody
81private sealed class BulletShapeXNA : BulletShape 81private sealed class BulletShapeXNA : BulletShape
82{ 82{
83 public CollisionShape shape; 83 public CollisionShape shape;
84 public BulletShapeXNA(CollisionShape xx, BSPhysicsShapeType typ) 84 public BulletShapeXNA(CollisionShape xx, BSPhysicsShapeType typ)
85 : base() 85 : base()
86 { 86 {
87 shape = xx; 87 shape = xx;
88 type = typ; 88 shapeType = typ;
89 } 89 }
90 public override bool HasPhysicalShape 90 public override bool HasPhysicalShape
91 { 91 {
@@ -97,7 +97,7 @@ private sealed class BulletShapeXNA : BulletShape
97 } 97 }
98 public override BulletShape Clone() 98 public override BulletShape Clone()
99 { 99 {
100 return new BulletShapeXNA(shape, type); 100 return new BulletShapeXNA(shape, shapeType);
101 } 101 }
102 public override bool ReferenceSame(BulletShape other) 102 public override bool ReferenceSame(BulletShape other)
103 { 103 {
@@ -137,8 +137,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
137 internal int LastEntityProperty = 0; 137 internal int LastEntityProperty = 0;
138 138
139 internal EntityProperties[] UpdatedObjects; 139 internal EntityProperties[] UpdatedObjects;
140 internal Dictionary<uint, GhostObject> specialCollisionObjects; 140 internal Dictionary<uint, GhostObject> specialCollisionObjects;
141 141
142 private static int m_collisionsThisFrame; 142 private static int m_collisionsThisFrame;
143 private BSScene PhysicsScene { get; set; } 143 private BSScene PhysicsScene { get; set; }
144 144
@@ -151,7 +151,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
151 } 151 }
152 152
153 /// <summary> 153 /// <summary>
154 /// 154 ///
155 /// </summary> 155 /// </summary>
156 /// <param name="p"></param> 156 /// <param name="p"></param>
157 /// <param name="p_2"></param> 157 /// <param name="p_2"></param>
@@ -174,7 +174,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
174 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; 174 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
175 TypedConstraint constraint = (pConstraint as BulletConstraintXNA).constrain; 175 TypedConstraint constraint = (pConstraint as BulletConstraintXNA).constrain;
176 world.AddConstraint(constraint, pDisableCollisionsBetweenLinkedObjects); 176 world.AddConstraint(constraint, pDisableCollisionsBetweenLinkedObjects);
177 177
178 return true; 178 return true;
179 179
180 } 180 }
@@ -300,7 +300,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
300 public override bool GetForceUpdateAllAabbs(BulletWorld pWorld) { 300 public override bool GetForceUpdateAllAabbs(BulletWorld pWorld) {
301 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; 301 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
302 return world.GetForceUpdateAllAabbs(); 302 return world.GetForceUpdateAllAabbs();
303 303
304 } 304 }
305 public override void SetForceUpdateAllAabbs(BulletWorld pWorld, bool pForce) 305 public override void SetForceUpdateAllAabbs(BulletWorld pWorld, bool pForce)
306 { 306 {
@@ -404,7 +404,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
404 IndexedMatrix mat = IndexedMatrix.CreateFromQuaternion(vquaternion); 404 IndexedMatrix mat = IndexedMatrix.CreateFromQuaternion(vquaternion);
405 mat._origin = vposition; 405 mat._origin = vposition;
406 collisionObject.SetWorldTransform(mat); 406 collisionObject.SetWorldTransform(mat);
407 407
408 } 408 }
409 409
410 public override Vector3 GetPosition(BulletBody pCollisionObject) 410 public override Vector3 GetPosition(BulletBody pCollisionObject)
@@ -457,7 +457,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
457 { 457 {
458 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; 458 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
459 collisionObject.Activate(pforceactivation); 459 collisionObject.Activate(pforceactivation);
460 460
461 } 461 }
462 462
463 public override Quaternion GetOrientation(BulletBody pCollisionObject) 463 public override Quaternion GetOrientation(BulletBody pCollisionObject)
@@ -486,7 +486,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
486 { 486 {
487 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; 487 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
488 return collisionObject.GetCcdSweptSphereRadius(); 488 return collisionObject.GetCcdSweptSphereRadius();
489 489
490 } 490 }
491 491
492 public override IntPtr GetUserPointer(BulletBody pCollisionObject) 492 public override IntPtr GetUserPointer(BulletBody pCollisionObject)
@@ -559,8 +559,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
559 } 559 }
560 560
561 561
562 public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, 562 public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2,
563 Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, 563 Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot,
564 bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) 564 bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies)
565 565
566 { 566 {
@@ -604,7 +604,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
604 } 604 }
605 605
606 /// <summary> 606 /// <summary>
607 /// 607 ///
608 /// </summary> 608 /// </summary>
609 /// <param name="pWorld"></param> 609 /// <param name="pWorld"></param>
610 /// <param name="pBody1"></param> 610 /// <param name="pBody1"></param>
@@ -824,7 +824,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
824 { 824 {
825 RigidBody body = (pBody as BulletBodyXNA).rigidBody; 825 RigidBody body = (pBody as BulletBodyXNA).rigidBody;
826 float angularDamping = body.GetAngularDamping(); 826 float angularDamping = body.GetAngularDamping();
827 body.SetDamping(lin_damping, angularDamping); 827 body.SetDamping(lin_damping, angularDamping);
828 } 828 }
829 829
830 public override float GetLinearDamping(BulletBody pBody) 830 public override float GetLinearDamping(BulletBody pBody)
@@ -907,7 +907,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
907 RigidBody bo = co as RigidBody; 907 RigidBody bo = co as RigidBody;
908 if (bo == null) 908 if (bo == null)
909 { 909 {
910 910
911 if (world.IsInWorld(co)) 911 if (world.IsInWorld(co))
912 { 912 {
913 world.RemoveCollisionObject(co); 913 world.RemoveCollisionObject(co);
@@ -915,7 +915,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
915 } 915 }
916 else 916 else
917 { 917 {
918 918
919 if (world.IsInWorld(bo)) 919 if (world.IsInWorld(bo))
920 { 920 {
921 world.RemoveRigidBody(bo); 921 world.RemoveRigidBody(bo);
@@ -947,7 +947,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
947 947
948 // TODO: Turn this from a reference copy to a Value Copy. 948 // TODO: Turn this from a reference copy to a Value Copy.
949 BulletShapeXNA shape2 = new BulletShapeXNA(shape1, BSShapeTypeFromBroadPhaseNativeType(shape1.GetShapeType())); 949 BulletShapeXNA shape2 = new BulletShapeXNA(shape1, BSShapeTypeFromBroadPhaseNativeType(shape1.GetShapeType()));
950 950
951 return shape2; 951 return shape2;
952 } 952 }
953 953
@@ -957,7 +957,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
957 return false; 957 return false;
958 } 958 }
959 //(sim.ptr, shape.ptr, prim.LocalID, prim.RawPosition, prim.RawOrientation); 959 //(sim.ptr, shape.ptr, prim.LocalID, prim.RawPosition, prim.RawOrientation);
960 960
961 public override BulletBody CreateBodyFromShape(BulletWorld pWorld, BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation) 961 public override BulletBody CreateBodyFromShape(BulletWorld pWorld, BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation)
962 { 962 {
963 CollisionWorld world = (pWorld as BulletWorldXNA).world; 963 CollisionWorld world = (pWorld as BulletWorldXNA).world;
@@ -993,11 +993,11 @@ private sealed class BulletConstraintXNA : BulletConstraint
993 m_startWorldTransform = IndexedMatrix.Identity; 993 m_startWorldTransform = IndexedMatrix.Identity;
994 */ 994 */
995 body.SetUserPointer(pLocalID); 995 body.SetUserPointer(pLocalID);
996 996
997 return new BulletBodyXNA(pLocalID, body); 997 return new BulletBodyXNA(pLocalID, body);
998 } 998 }
999 999
1000 1000
1001 public override BulletBody CreateBodyWithDefaultMotionState( BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation) 1001 public override BulletBody CreateBodyWithDefaultMotionState( BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation)
1002 { 1002 {
1003 1003
@@ -1025,7 +1025,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1025 public override Vector3 GetAnisotripicFriction(BulletConstraint pconstrain) 1025 public override Vector3 GetAnisotripicFriction(BulletConstraint pconstrain)
1026 { 1026 {
1027 1027
1028 /* TODO */ 1028 /* TODO */
1029 return Vector3.Zero; 1029 return Vector3.Zero;
1030 } 1030 }
1031 public override Vector3 SetAnisotripicFriction(BulletConstraint pconstrain, Vector3 frict) { /* TODO */ return Vector3.Zero; } 1031 public override Vector3 SetAnisotripicFriction(BulletConstraint pconstrain, Vector3 frict) { /* TODO */ return Vector3.Zero; }
@@ -1035,7 +1035,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1035 { 1035 {
1036 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; 1036 CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
1037 return collisionObject.IsStaticObject(); 1037 return collisionObject.IsStaticObject();
1038 1038
1039 } 1039 }
1040 public override bool IsKinematicObject(BulletBody pCollisionObject) 1040 public override bool IsKinematicObject(BulletBody pCollisionObject)
1041 { 1041 {
@@ -1098,10 +1098,10 @@ private sealed class BulletConstraintXNA : BulletConstraint
1098 return new BulletWorldXNA(1, PhysicsScene, BSAPIXNA.Initialize2(worldExtent, configparms, maxCollisions, ref collisionArray, maxUpdates, ref updateArray, null)); 1098 return new BulletWorldXNA(1, PhysicsScene, BSAPIXNA.Initialize2(worldExtent, configparms, maxCollisions, ref collisionArray, maxUpdates, ref updateArray, null));
1099 } 1099 }
1100 1100
1101 private static DiscreteDynamicsWorld Initialize2(Vector3 worldExtent, 1101 private static DiscreteDynamicsWorld Initialize2(Vector3 worldExtent,
1102 ConfigurationParameters[] o, 1102 ConfigurationParameters[] o,
1103 int mMaxCollisionsPerFrame, ref CollisionDesc[] collisionArray, 1103 int mMaxCollisionsPerFrame, ref CollisionDesc[] collisionArray,
1104 int mMaxUpdatesPerFrame, ref EntityProperties[] updateArray, 1104 int mMaxUpdatesPerFrame, ref EntityProperties[] updateArray,
1105 object mDebugLogCallbackHandle) 1105 object mDebugLogCallbackHandle)
1106 { 1106 {
1107 CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData(); 1107 CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData();
@@ -1138,9 +1138,9 @@ private sealed class BulletConstraintXNA : BulletConstraint
1138 p.avatarCapsuleDepth = BSParam.AvatarCapsuleDepth; 1138 p.avatarCapsuleDepth = BSParam.AvatarCapsuleDepth;
1139 p.avatarCapsuleHeight = BSParam.AvatarCapsuleHeight; 1139 p.avatarCapsuleHeight = BSParam.AvatarCapsuleHeight;
1140 p.avatarContactProcessingThreshold = BSParam.AvatarContactProcessingThreshold; 1140 p.avatarContactProcessingThreshold = BSParam.AvatarContactProcessingThreshold;
1141 1141
1142 p.vehicleAngularDamping = BSParam.VehicleAngularDamping; 1142 p.vehicleAngularDamping = BSParam.VehicleAngularDamping;
1143 1143
1144 p.maxPersistantManifoldPoolSize = o[0].maxPersistantManifoldPoolSize; 1144 p.maxPersistantManifoldPoolSize = o[0].maxPersistantManifoldPoolSize;
1145 p.maxCollisionAlgorithmPoolSize = o[0].maxCollisionAlgorithmPoolSize; 1145 p.maxCollisionAlgorithmPoolSize = o[0].maxCollisionAlgorithmPoolSize;
1146 p.shouldDisableContactPoolDynamicAllocation = o[0].shouldDisableContactPoolDynamicAllocation; 1146 p.shouldDisableContactPoolDynamicAllocation = o[0].shouldDisableContactPoolDynamicAllocation;
@@ -1160,7 +1160,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1160 p.linkConstraintSolverIterations = BSParam.LinkConstraintSolverIterations; 1160 p.linkConstraintSolverIterations = BSParam.LinkConstraintSolverIterations;
1161 p.physicsLoggingFrames = o[0].physicsLoggingFrames; 1161 p.physicsLoggingFrames = o[0].physicsLoggingFrames;
1162 DefaultCollisionConstructionInfo ccci = new DefaultCollisionConstructionInfo(); 1162 DefaultCollisionConstructionInfo ccci = new DefaultCollisionConstructionInfo();
1163 1163
1164 DefaultCollisionConfiguration cci = new DefaultCollisionConfiguration(); 1164 DefaultCollisionConfiguration cci = new DefaultCollisionConfiguration();
1165 CollisionDispatcher m_dispatcher = new CollisionDispatcher(cci); 1165 CollisionDispatcher m_dispatcher = new CollisionDispatcher(cci);
1166 1166
@@ -1263,7 +1263,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1263 } 1263 }
1264 } 1264 }
1265 return ret; 1265 return ret;
1266 1266
1267 } 1267 }
1268 1268
1269 public override float GetAngularMotionDisc(BulletShape pShape) 1269 public override float GetAngularMotionDisc(BulletShape pShape)
@@ -1353,10 +1353,10 @@ private sealed class BulletConstraintXNA : BulletConstraint
1353 CollisionShape shape = (pShape as BulletShapeXNA).shape; 1353 CollisionShape shape = (pShape as BulletShapeXNA).shape;
1354 gObj.SetCollisionShape(shape); 1354 gObj.SetCollisionShape(shape);
1355 gObj.SetUserPointer(pLocalID); 1355 gObj.SetUserPointer(pLocalID);
1356 1356
1357 if (specialCollisionObjects.ContainsKey(pLocalID)) 1357 if (specialCollisionObjects.ContainsKey(pLocalID))
1358 specialCollisionObjects[pLocalID] = gObj; 1358 specialCollisionObjects[pLocalID] = gObj;
1359 else 1359 else
1360 specialCollisionObjects.Add(pLocalID, gObj); 1360 specialCollisionObjects.Add(pLocalID, gObj);
1361 1361
1362 // TODO: Add to Special CollisionObjects! 1362 // TODO: Add to Special CollisionObjects!
@@ -1447,8 +1447,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
1447 return new BulletShapeXNA(ret, BSShapeTypeFromBroadPhaseNativeType(ret.GetShapeType())); 1447 return new BulletShapeXNA(ret, BSShapeTypeFromBroadPhaseNativeType(ret.GetShapeType()));
1448 } 1448 }
1449 1449
1450 public override BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx) { 1450 public override BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx) {
1451 1451
1452 if (cShape == null) 1452 if (cShape == null)
1453 return null; 1453 return null;
1454 CompoundShape compoundShape = (cShape as BulletShapeXNA).shape as CompoundShape; 1454 CompoundShape compoundShape = (cShape as BulletShapeXNA).shape as CompoundShape;
@@ -1456,7 +1456,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1456 BulletShape retShape = new BulletShapeXNA(shape, BSShapeTypeFromBroadPhaseNativeType(shape.GetShapeType())); 1456 BulletShape retShape = new BulletShapeXNA(shape, BSShapeTypeFromBroadPhaseNativeType(shape.GetShapeType()));
1457 1457
1458 1458
1459 return retShape; 1459 return retShape;
1460 } 1460 }
1461 1461
1462 public BSPhysicsShapeType BSShapeTypeFromBroadPhaseNativeType(BroadphaseNativeTypes pin) 1462 public BSPhysicsShapeType BSShapeTypeFromBroadPhaseNativeType(BroadphaseNativeTypes pin)
@@ -1475,7 +1475,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1475 ret = BSPhysicsShapeType.SHAPE_UNKNOWN; 1475 ret = BSPhysicsShapeType.SHAPE_UNKNOWN;
1476 break; 1476 break;
1477 case BroadphaseNativeTypes.CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE: 1477 case BroadphaseNativeTypes.CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE:
1478 ret = BSPhysicsShapeType.SHAPE_MESH; 1478 ret = BSPhysicsShapeType.SHAPE_CONVEXHULL;
1479 break; 1479 break;
1480 case BroadphaseNativeTypes.CONVEX_HULL_SHAPE_PROXYTYPE: 1480 case BroadphaseNativeTypes.CONVEX_HULL_SHAPE_PROXYTYPE:
1481 ret = BSPhysicsShapeType.SHAPE_HULL; 1481 ret = BSPhysicsShapeType.SHAPE_HULL;
@@ -1503,7 +1503,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1503 ret = BSPhysicsShapeType.SHAPE_CONE; 1503 ret = BSPhysicsShapeType.SHAPE_CONE;
1504 break; 1504 break;
1505 case BroadphaseNativeTypes.CONVEX_SHAPE_PROXYTYPE: 1505 case BroadphaseNativeTypes.CONVEX_SHAPE_PROXYTYPE:
1506 ret = BSPhysicsShapeType.SHAPE_UNKNOWN; 1506 ret = BSPhysicsShapeType.SHAPE_CONVEXHULL;
1507 break; 1507 break;
1508 case BroadphaseNativeTypes.CYLINDER_SHAPE_PROXYTYPE: 1508 case BroadphaseNativeTypes.CYLINDER_SHAPE_PROXYTYPE:
1509 ret = BSPhysicsShapeType.SHAPE_CYLINDER; 1509 ret = BSPhysicsShapeType.SHAPE_CYLINDER;
@@ -1547,7 +1547,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1547 break; 1547 break;
1548 ///Used for GIMPACT Trimesh integration 1548 ///Used for GIMPACT Trimesh integration
1549 case BroadphaseNativeTypes.GIMPACT_SHAPE_PROXYTYPE: 1549 case BroadphaseNativeTypes.GIMPACT_SHAPE_PROXYTYPE:
1550 ret = BSPhysicsShapeType.SHAPE_MESH; 1550 ret = BSPhysicsShapeType.SHAPE_GIMPACT;
1551 break; 1551 break;
1552 ///Multimaterial mesh 1552 ///Multimaterial mesh
1553 case BroadphaseNativeTypes.MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE: 1553 case BroadphaseNativeTypes.MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE:
@@ -1598,8 +1598,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
1598 return new BulletShapeXNA(m_planeshape, BSPhysicsShapeType.SHAPE_GROUNDPLANE); 1598 return new BulletShapeXNA(m_planeshape, BSPhysicsShapeType.SHAPE_GROUNDPLANE);
1599 } 1599 }
1600 1600
1601 public override BulletConstraint Create6DofSpringConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, 1601 public override BulletConstraint Create6DofSpringConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2,
1602 Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, 1602 Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot,
1603 bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) 1603 bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies)
1604 1604
1605 { 1605 {
@@ -1745,7 +1745,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1745 { 1745 {
1746 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; 1746 DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
1747 CompoundShape compoundshape = new CompoundShape(false); 1747 CompoundShape compoundshape = new CompoundShape(false);
1748 1748
1749 compoundshape.SetMargin(world.WorldSettings.Params.collisionMargin); 1749 compoundshape.SetMargin(world.WorldSettings.Params.collisionMargin);
1750 int ii = 1; 1750 int ii = 1;
1751 1751
@@ -1761,7 +1761,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1761 int ender = ((ii + 4) + (vertexCount*3)); 1761 int ender = ((ii + 4) + (vertexCount*3));
1762 for (int iii = ii + 4; iii < ender; iii+=3) 1762 for (int iii = ii + 4; iii < ender; iii+=3)
1763 { 1763 {
1764 1764
1765 virts.Add(new IndexedVector3(pConvHulls[iii], pConvHulls[iii + 1], pConvHulls[iii +2])); 1765 virts.Add(new IndexedVector3(pConvHulls[iii], pConvHulls[iii + 1], pConvHulls[iii +2]));
1766 } 1766 }
1767 ConvexHullShape convexShape = new ConvexHullShape(virts, vertexCount); 1767 ConvexHullShape convexShape = new ConvexHullShape(virts, vertexCount);
@@ -1769,26 +1769,35 @@ private sealed class BulletConstraintXNA : BulletConstraint
1769 compoundshape.AddChildShape(ref childTrans, convexShape); 1769 compoundshape.AddChildShape(ref childTrans, convexShape);
1770 ii += (vertexCount*3 + 4); 1770 ii += (vertexCount*3 + 4);
1771 } 1771 }
1772 1772
1773 return new BulletShapeXNA(compoundshape, BSPhysicsShapeType.SHAPE_HULL); 1773 return new BulletShapeXNA(compoundshape, BSPhysicsShapeType.SHAPE_HULL);
1774 } 1774 }
1775 1775
1776 public override BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape) 1776 public override BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape, HACDParams parms)
1777 {
1778 /* TODO */ return null;
1779 }
1780
1781 public override BulletShape BuildConvexHullShapeFromMesh(BulletWorld world, BulletShape meshShape)
1777 { 1782 {
1778 /* TODO */ return null; 1783 /* TODO */ return null;
1784 }
1779 1785
1786 public override BulletShape CreateConvexHullShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats)
1787 {
1788 /* TODO */ return null;
1780 } 1789 }
1781 1790
1782 public override BulletShape CreateMeshShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats) 1791 public override BulletShape CreateMeshShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats)
1783 { 1792 {
1784 //DumpRaw(indices,verticesAsFloats,pIndicesCount,pVerticesCount); 1793 //DumpRaw(indices,verticesAsFloats,pIndicesCount,pVerticesCount);
1785 1794
1786 for (int iter = 0; iter < pVerticesCount; iter++) 1795 for (int iter = 0; iter < pVerticesCount; iter++)
1787 { 1796 {
1788 if (verticesAsFloats[iter] > 0 && verticesAsFloats[iter] < 0.0001) verticesAsFloats[iter] = 0; 1797 if (verticesAsFloats[iter] > 0 && verticesAsFloats[iter] < 0.0001) verticesAsFloats[iter] = 0;
1789 if (verticesAsFloats[iter] < 0 && verticesAsFloats[iter] > -0.0001) verticesAsFloats[iter] = 0; 1798 if (verticesAsFloats[iter] < 0 && verticesAsFloats[iter] > -0.0001) verticesAsFloats[iter] = 0;
1790 } 1799 }
1791 1800
1792 ObjectArray<int> indicesarr = new ObjectArray<int>(indices); 1801 ObjectArray<int> indicesarr = new ObjectArray<int>(indices);
1793 ObjectArray<float> vertices = new ObjectArray<float>(verticesAsFloats); 1802 ObjectArray<float> vertices = new ObjectArray<float>(verticesAsFloats);
1794 DumpRaw(indicesarr,vertices,pIndicesCount,pVerticesCount); 1803 DumpRaw(indicesarr,vertices,pIndicesCount,pVerticesCount);
@@ -1802,7 +1811,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1802 mesh.m_vertexStride = 3; 1811 mesh.m_vertexStride = 3;
1803 mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT; 1812 mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT;
1804 mesh.m_triangleIndexStride = 3; 1813 mesh.m_triangleIndexStride = 3;
1805 1814
1806 TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray(); 1815 TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray();
1807 tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER); 1816 tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER);
1808 BvhTriangleMeshShape meshShape = new BvhTriangleMeshShape(tribuilder, true,true); 1817 BvhTriangleMeshShape meshShape = new BvhTriangleMeshShape(tribuilder, true,true);
@@ -1811,9 +1820,14 @@ private sealed class BulletConstraintXNA : BulletConstraint
1811 return new BulletShapeXNA(meshShape, BSPhysicsShapeType.SHAPE_MESH); 1820 return new BulletShapeXNA(meshShape, BSPhysicsShapeType.SHAPE_MESH);
1812 1821
1813 } 1822 }
1823 public override BulletShape CreateGImpactShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats)
1824 {
1825 // TODO:
1826 return null;
1827 }
1814 public static void DumpRaw(ObjectArray<int>indices, ObjectArray<float> vertices, int pIndicesCount,int pVerticesCount ) 1828 public static void DumpRaw(ObjectArray<int>indices, ObjectArray<float> vertices, int pIndicesCount,int pVerticesCount )
1815 { 1829 {
1816 1830
1817 String fileName = "objTest3.raw"; 1831 String fileName = "objTest3.raw";
1818 String completePath = System.IO.Path.Combine(Util.configDir(), fileName); 1832 String completePath = System.IO.Path.Combine(Util.configDir(), fileName);
1819 StreamWriter sw = new StreamWriter(completePath); 1833 StreamWriter sw = new StreamWriter(completePath);
@@ -1839,7 +1853,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1839 string s = vertices[indices[i * 3]].ToString("0.0000"); 1853 string s = vertices[indices[i * 3]].ToString("0.0000");
1840 s += " " + vertices[indices[i * 3 + 1]].ToString("0.0000"); 1854 s += " " + vertices[indices[i * 3 + 1]].ToString("0.0000");
1841 s += " " + vertices[indices[i * 3 + 2]].ToString("0.0000"); 1855 s += " " + vertices[indices[i * 3 + 2]].ToString("0.0000");
1842 1856
1843 sw.Write(s + "\n"); 1857 sw.Write(s + "\n");
1844 } 1858 }
1845 1859
@@ -1861,7 +1875,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1861 mesh.m_vertexStride = 3; 1875 mesh.m_vertexStride = 3;
1862 mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT; 1876 mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT;
1863 mesh.m_triangleIndexStride = 3; 1877 mesh.m_triangleIndexStride = 3;
1864 1878
1865 TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray(); 1879 TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray();
1866 tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER); 1880 tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER);
1867 1881
@@ -1892,7 +1906,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
1892 sw.Close(); 1906 sw.Close();
1893 } 1907 }
1894 1908
1895 public override BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap, 1909 public override BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
1896 float scaleFactor, float collisionMargin) 1910 float scaleFactor, float collisionMargin)
1897 { 1911 {
1898 const int upAxis = 2; 1912 const int upAxis = 2;
@@ -1934,14 +1948,14 @@ private sealed class BulletConstraintXNA : BulletConstraint
1934 /* TODO */ 1948 /* TODO */
1935 updatedEntityCount = 0; 1949 updatedEntityCount = 0;
1936 collidersCount = 0; 1950 collidersCount = 0;
1937 1951
1938 1952
1939 int ret = PhysicsStep2(world,timeStep,maxSubSteps,fixedTimeStep,out updatedEntityCount,out world.physicsScene.m_updateArray, out collidersCount, out world.physicsScene.m_collisionArray); 1953 int ret = PhysicsStep2(world,timeStep,maxSubSteps,fixedTimeStep,out updatedEntityCount,out world.physicsScene.m_updateArray, out collidersCount, out world.physicsScene.m_collisionArray);
1940 1954
1941 return ret; 1955 return ret;
1942 } 1956 }
1943 1957
1944 private int PhysicsStep2(BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep, 1958 private int PhysicsStep2(BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep,
1945 out int updatedEntityCount, out EntityProperties[] updatedEntities, 1959 out int updatedEntityCount, out EntityProperties[] updatedEntities,
1946 out int collidersCount, out CollisionDesc[] colliders) 1960 out int collidersCount, out CollisionDesc[] colliders)
1947 { 1961 {
@@ -1950,24 +1964,24 @@ private sealed class BulletConstraintXNA : BulletConstraint
1950 return epic; 1964 return epic;
1951 } 1965 }
1952 1966
1953 private int PhysicsStepint(BulletWorld pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, 1967 private int PhysicsStepint(BulletWorld pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount,
1954 out EntityProperties[] updatedEntities, out int collidersCount, out CollisionDesc[] colliders, int maxCollisions, int maxUpdates) 1968 out EntityProperties[] updatedEntities, out int collidersCount, out CollisionDesc[] colliders, int maxCollisions, int maxUpdates)
1955 { 1969 {
1956 int numSimSteps = 0; 1970 int numSimSteps = 0;
1957 Array.Clear(UpdatedObjects, 0, UpdatedObjects.Length); 1971 Array.Clear(UpdatedObjects, 0, UpdatedObjects.Length);
1958 Array.Clear(UpdatedCollisions, 0, UpdatedCollisions.Length); 1972 Array.Clear(UpdatedCollisions, 0, UpdatedCollisions.Length);
1959 LastEntityProperty=0; 1973 LastEntityProperty=0;
1960 1974
1961 1975
1962 1976
1963 1977
1964 1978
1965 1979
1966 LastCollisionDesc=0; 1980 LastCollisionDesc=0;
1967 1981
1968 updatedEntityCount = 0; 1982 updatedEntityCount = 0;
1969 collidersCount = 0; 1983 collidersCount = 0;
1970 1984
1971 1985
1972 if (pWorld is BulletWorldXNA) 1986 if (pWorld is BulletWorldXNA)
1973 { 1987 {
@@ -2024,7 +2038,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2024 2038
2025 collidersCount = LastCollisionDesc; 2039 collidersCount = LastCollisionDesc;
2026 colliders = UpdatedCollisions; 2040 colliders = UpdatedCollisions;
2027 2041
2028 2042
2029 } 2043 }
2030 else 2044 else
@@ -2032,15 +2046,15 @@ private sealed class BulletConstraintXNA : BulletConstraint
2032 //if (updatedEntities is null) 2046 //if (updatedEntities is null)
2033 //updatedEntities = new List<BulletXNA.EntityProperties>(); 2047 //updatedEntities = new List<BulletXNA.EntityProperties>();
2034 //updatedEntityCount = 0; 2048 //updatedEntityCount = 0;
2035 2049
2036 2050
2037 //collidersCount = 0; 2051 //collidersCount = 0;
2038 2052
2039 updatedEntities = new EntityProperties[0]; 2053 updatedEntities = new EntityProperties[0];
2040 2054
2041 2055
2042 colliders = new CollisionDesc[0]; 2056 colliders = new CollisionDesc[0];
2043 2057
2044 } 2058 }
2045 return numSimSteps; 2059 return numSimSteps;
2046 } 2060 }
@@ -2048,7 +2062,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2048 { 2062 {
2049 IOverlappingPairCache cache = obj.GetOverlappingPairCache(); 2063 IOverlappingPairCache cache = obj.GetOverlappingPairCache();
2050 ObjectArray<BroadphasePair> pairs = cache.GetOverlappingPairArray(); 2064 ObjectArray<BroadphasePair> pairs = cache.GetOverlappingPairArray();
2051 2065
2052 DiscreteDynamicsWorld world = (PhysicsScene.World as BulletWorldXNA).world; 2066 DiscreteDynamicsWorld world = (PhysicsScene.World as BulletWorldXNA).world;
2053 PersistentManifoldArray manifoldArray = new PersistentManifoldArray(); 2067 PersistentManifoldArray manifoldArray = new PersistentManifoldArray();
2054 BroadphasePair collisionPair; 2068 BroadphasePair collisionPair;
@@ -2060,7 +2074,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2060 ManifoldPoint pt; 2074 ManifoldPoint pt;
2061 2075
2062 int numPairs = pairs.Count; 2076 int numPairs = pairs.Count;
2063 2077
2064 for (int i = 0; i < numPairs; i++) 2078 for (int i = 0; i < numPairs; i++)
2065 { 2079 {
2066 manifoldArray.Clear(); 2080 manifoldArray.Clear();
@@ -2069,7 +2083,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2069 collisionPair = world.GetPairCache().FindPair(pairs[i].m_pProxy0, pairs[i].m_pProxy1); 2083 collisionPair = world.GetPairCache().FindPair(pairs[i].m_pProxy0, pairs[i].m_pProxy1);
2070 if (collisionPair == null) 2084 if (collisionPair == null)
2071 continue; 2085 continue;
2072 2086
2073 collisionPair.m_algorithm.GetAllContactManifolds(manifoldArray); 2087 collisionPair.m_algorithm.GetAllContactManifolds(manifoldArray);
2074 for (int j = 0; j < manifoldArray.Count; j++) 2088 for (int j = 0; j < manifoldArray.Count; j++)
2075 { 2089 {
@@ -2092,7 +2106,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2092 } 2106 }
2093 private static void RecordCollision(BSAPIXNA world, CollisionObject objA, CollisionObject objB, IndexedVector3 contact, IndexedVector3 norm, float penetration) 2107 private static void RecordCollision(BSAPIXNA world, CollisionObject objA, CollisionObject objB, IndexedVector3 contact, IndexedVector3 norm, float penetration)
2094 { 2108 {
2095 2109
2096 IndexedVector3 contactNormal = norm; 2110 IndexedVector3 contactNormal = norm;
2097 if ((objA.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0 && 2111 if ((objA.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0 &&
2098 (objB.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0) 2112 (objB.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0)
@@ -2162,11 +2176,11 @@ private sealed class BulletConstraintXNA : BulletConstraint
2162 if (NotMe is BulletBodyXNA && NotMe.HasPhysicalBody) 2176 if (NotMe is BulletBodyXNA && NotMe.HasPhysicalBody)
2163 { 2177 {
2164 CollisionObject AvoidBody = (NotMe as BulletBodyXNA).body; 2178 CollisionObject AvoidBody = (NotMe as BulletBodyXNA).body;
2165 2179
2166 IndexedVector3 rOrigin = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z); 2180 IndexedVector3 rOrigin = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z);
2167 IndexedVector3 rEnd = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z - pRayHeight); 2181 IndexedVector3 rEnd = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z - pRayHeight);
2168 using ( 2182 using (
2169 ClosestNotMeRayResultCallback rayCallback = 2183 ClosestNotMeRayResultCallback rayCallback =
2170 new ClosestNotMeRayResultCallback(rOrigin, rEnd, AvoidBody) 2184 new ClosestNotMeRayResultCallback(rOrigin, rEnd, AvoidBody)
2171 ) 2185 )
2172 { 2186 {
@@ -2182,9 +2196,9 @@ private sealed class BulletConstraintXNA : BulletConstraint
2182 return false; 2196 return false;
2183 } 2197 }
2184} 2198}
2185
2186 2199
2187 2200
2201
2188 2202
2189 public class SimMotionState : DefaultMotionState 2203 public class SimMotionState : DefaultMotionState
2190 { 2204 {
@@ -2277,12 +2291,12 @@ private sealed class BulletConstraintXNA : BulletConstraint
2277 m_lastProperties = m_properties; 2291 m_lastProperties = m_properties;
2278 if (m_world.LastEntityProperty < m_world.UpdatedObjects.Length) 2292 if (m_world.LastEntityProperty < m_world.UpdatedObjects.Length)
2279 m_world.UpdatedObjects[m_world.LastEntityProperty++]=(m_properties); 2293 m_world.UpdatedObjects[m_world.LastEntityProperty++]=(m_properties);
2280 2294
2281 //(*m_updatesThisFrame)[m_properties.ID] = &m_properties; 2295 //(*m_updatesThisFrame)[m_properties.ID] = &m_properties;
2282 } 2296 }
2283 2297
2284 2298
2285 2299
2286 2300
2287 } 2301 }
2288 public override void SetRigidBody(RigidBody body) 2302 public override void SetRigidBody(RigidBody body)
@@ -2305,7 +2319,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
2305 (((v1.Z - nEpsilon) < v2.Z) && (v2.Z < (v1.Z + nEpsilon))) && 2319 (((v1.Z - nEpsilon) < v2.Z) && (v2.Z < (v1.Z + nEpsilon))) &&
2306 (((v1.W - nEpsilon) < v2.W) && (v2.W < (v1.W + nEpsilon))); 2320 (((v1.W - nEpsilon) < v2.W) && (v2.W < (v1.W + nEpsilon)));
2307 } 2321 }
2308 2322
2309 } 2323 }
2310} 2324}
2311 2325
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
new file mode 100755
index 0000000..ac8c30c
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
@@ -0,0 +1,351 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OpenSim.Region.Physics.Manager;
34
35using OMV = OpenMetaverse;
36
37namespace OpenSim.Region.Physics.BulletSPlugin
38{
39public class BSActorAvatarMove : BSActor
40{
41 BSVMotor m_velocityMotor;
42
43 // Set to true if we think we're going up stairs.
44 // This state is remembered because collisions will turn on and off as we go up stairs.
45 int m_walkingUpStairs;
46 float m_lastStepUp;
47
48 public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName)
49 : base(physicsScene, pObj, actorName)
50 {
51 m_velocityMotor = null;
52 m_walkingUpStairs = 0;
53 m_physicsScene.DetailLog("{0},BSActorAvatarMove,constructor", m_controllingPrim.LocalID);
54 }
55
56 // BSActor.isActive
57 public override bool isActive
58 {
59 get { return Enabled && m_controllingPrim.IsPhysicallyActive; }
60 }
61
62 // Release any connections and resources used by the actor.
63 // BSActor.Dispose()
64 public override void Dispose()
65 {
66 Enabled = false;
67 }
68
69 // Called when physical parameters (properties set in Bullet) need to be re-applied.
70 // Called at taint-time.
71 // BSActor.Refresh()
72 public override void Refresh()
73 {
74 m_physicsScene.DetailLog("{0},BSActorAvatarMove,refresh", m_controllingPrim.LocalID);
75
76 // If the object is physically active, add the hoverer prestep action
77 if (isActive)
78 {
79 ActivateAvatarMove();
80 }
81 else
82 {
83 DeactivateAvatarMove();
84 }
85 }
86
87 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
88 // Register a prestep action to restore physical requirements before the next simulation step.
89 // Called at taint-time.
90 // BSActor.RemoveDependencies()
91 public override void RemoveDependencies()
92 {
93 // Nothing to do for the hoverer since it is all software at pre-step action time.
94 }
95
96 // Usually called when target velocity changes to set the current velocity and the target
97 // into the movement motor.
98 public void SetVelocityAndTarget(OMV.Vector3 vel, OMV.Vector3 targ, bool inTaintTime)
99 {
100 m_physicsScene.TaintedObject(inTaintTime, "BSActorAvatarMove.setVelocityAndTarget", delegate()
101 {
102 if (m_velocityMotor != null)
103 {
104 m_velocityMotor.Reset();
105 m_velocityMotor.SetTarget(targ);
106 m_velocityMotor.SetCurrent(vel);
107 m_velocityMotor.Enabled = true;
108 }
109 });
110 }
111
112 // If a hover motor has not been created, create one and start the hovering.
113 private void ActivateAvatarMove()
114 {
115 if (m_velocityMotor == null)
116 {
117 // Infinite decay and timescale values so motor only changes current to target values.
118 m_velocityMotor = new BSVMotor("BSCharacter.Velocity",
119 0.2f, // time scale
120 BSMotor.Infinite, // decay time scale
121 1f // efficiency
122 );
123 // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
124 SetVelocityAndTarget(m_controllingPrim.RawVelocity, m_controllingPrim.TargetVelocity, true /* inTaintTime */);
125
126 m_physicsScene.BeforeStep += Mover;
127
128 m_walkingUpStairs = 0;
129 }
130 }
131
132 private void DeactivateAvatarMove()
133 {
134 if (m_velocityMotor != null)
135 {
136 m_physicsScene.BeforeStep -= Mover;
137 m_velocityMotor = null;
138 }
139 }
140
141 // Called just before the simulation step. Update the vertical position for hoverness.
142 private void Mover(float timeStep)
143 {
144 // Don't do movement while the object is selected.
145 if (!isActive)
146 return;
147
148 // TODO: Decide if the step parameters should be changed depending on the avatar's
149 // state (flying, colliding, ...). There is code in ODE to do this.
150
151 // COMMENTARY: when the user is making the avatar walk, except for falling, the velocity
152 // specified for the avatar is the one that should be used. For falling, if the avatar
153 // is not flying and is not colliding then it is presumed to be falling and the Z
154 // component is not fooled with (thus allowing gravity to do its thing).
155 // When the avatar is standing, though, the user has specified a velocity of zero and
156 // the avatar should be standing. But if the avatar is pushed by something in the world
157 // (raising elevator platform, moving vehicle, ...) the avatar should be allowed to
158 // move. Thus, the velocity cannot be forced to zero. The problem is that small velocity
159 // errors can creap in and the avatar will slowly float off in some direction.
160 // So, the problem is that, when an avatar is standing, we cannot tell creaping error
161 // from real pushing.
162 // The code below uses whether the collider is static or moving to decide whether to zero motion.
163
164 m_velocityMotor.Step(timeStep);
165 m_controllingPrim.IsStationary = false;
166
167 // If we're not supposed to be moving, make sure things are zero.
168 if (m_velocityMotor.ErrorIsZero() && m_velocityMotor.TargetValue == OMV.Vector3.Zero)
169 {
170 // The avatar shouldn't be moving
171 m_velocityMotor.Zero();
172
173 if (m_controllingPrim.IsColliding)
174 {
175 // If we are colliding with a stationary object, presume we're standing and don't move around
176 if (!m_controllingPrim.ColliderIsMoving)
177 {
178 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID);
179 m_controllingPrim.IsStationary = true;
180 m_controllingPrim.ZeroMotion(true /* inTaintTime */);
181 }
182
183 // Standing has more friction on the ground
184 if (m_controllingPrim.Friction != BSParam.AvatarStandingFriction)
185 {
186 m_controllingPrim.Friction = BSParam.AvatarStandingFriction;
187 m_physicsScene.PE.SetFriction(m_controllingPrim.PhysBody, m_controllingPrim.Friction);
188 }
189 }
190 else
191 {
192 if (m_controllingPrim.Flying)
193 {
194 // Flying and not collising and velocity nearly zero.
195 m_controllingPrim.ZeroMotion(true /* inTaintTime */);
196 }
197 }
198
199 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,taint,stopping,target={1},colliding={2}",
200 m_controllingPrim.LocalID, m_velocityMotor.TargetValue, m_controllingPrim.IsColliding);
201 }
202 else
203 {
204 // Supposed to be moving.
205 OMV.Vector3 stepVelocity = m_velocityMotor.CurrentValue;
206
207 if (m_controllingPrim.Friction != BSParam.AvatarFriction)
208 {
209 // Probably starting up walking. Set friction to moving friction.
210 m_controllingPrim.Friction = BSParam.AvatarFriction;
211 m_physicsScene.PE.SetFriction(m_controllingPrim.PhysBody, m_controllingPrim.Friction);
212 }
213
214 // If falling, we keep the world's downward vector no matter what the other axis specify.
215 // The check for RawVelocity.Z < 0 makes jumping work (temporary upward force).
216 if (!m_controllingPrim.Flying && !m_controllingPrim.IsColliding)
217 {
218 if (m_controllingPrim.RawVelocity.Z < 0)
219 stepVelocity.Z = m_controllingPrim.RawVelocity.Z;
220 // DetailLog("{0},BSCharacter.MoveMotor,taint,overrideStepZWithWorldZ,stepVel={1}", LocalID, stepVelocity);
221 }
222
223 // 'stepVelocity' is now the speed we'd like the avatar to move in. Turn that into an instantanous force.
224 OMV.Vector3 moveForce = (stepVelocity - m_controllingPrim.RawVelocity) * m_controllingPrim.Mass;
225
226 // Add special movement force to allow avatars to walk up stepped surfaces.
227 moveForce += WalkUpStairs();
228
229 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,move,stepVel={1},vel={2},mass={3},moveForce={4}",
230 m_controllingPrim.LocalID, stepVelocity, m_controllingPrim.RawVelocity, m_controllingPrim.Mass, moveForce);
231 m_physicsScene.PE.ApplyCentralImpulse(m_controllingPrim.PhysBody, moveForce);
232 }
233 }
234
235 // Decide if the character is colliding with a low object and compute a force to pop the
236 // avatar up so it can walk up and over the low objects.
237 private OMV.Vector3 WalkUpStairs()
238 {
239 OMV.Vector3 ret = OMV.Vector3.Zero;
240
241 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,IsColliding={1},flying={2},targSpeed={3},collisions={4},avHeight={5}",
242 m_controllingPrim.LocalID, m_controllingPrim.IsColliding, m_controllingPrim.Flying,
243 m_controllingPrim.TargetVelocitySpeed, m_controllingPrim.CollisionsLastTick.Count, m_controllingPrim.Size.Z);
244 // This test is done if moving forward, not flying and is colliding with something.
245 // Check for stairs climbing if colliding, not flying and moving forward
246 if ( m_controllingPrim.IsColliding
247 && !m_controllingPrim.Flying
248 && m_controllingPrim.TargetVelocitySpeed > 0.1f )
249 {
250 // The range near the character's feet where we will consider stairs
251 // float nearFeetHeightMin = m_controllingPrim.RawPosition.Z - (m_controllingPrim.Size.Z / 2f) + 0.05f;
252 // Note: there is a problem with the computation of the capsule height. Thus RawPosition is off
253 // from the height. Revisit size and this computation when height is scaled properly.
254 float nearFeetHeightMin = m_controllingPrim.RawPosition.Z - (m_controllingPrim.Size.Z / 2f) - 0.05f;
255 float nearFeetHeightMax = nearFeetHeightMin + BSParam.AvatarStepHeight;
256
257 // Look for a collision point that is near the character's feet and is oriented the same as the charactor is.
258 // Find the highest 'good' collision.
259 OMV.Vector3 highestTouchPosition = OMV.Vector3.Zero;
260 foreach (KeyValuePair<uint, ContactPoint> kvp in m_controllingPrim.CollisionsLastTick.m_objCollisionList)
261 {
262 // Don't care about collisions with the terrain
263 if (kvp.Key > m_physicsScene.TerrainManager.HighestTerrainID)
264 {
265 OMV.Vector3 touchPosition = kvp.Value.Position;
266 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}",
267 m_controllingPrim.LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
268 if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
269 {
270 // This contact is within the 'near the feet' range.
271 // The normal should be our contact point to the object so it is pointing away
272 // thus the difference between our facing orientation and the normal should be small.
273 OMV.Vector3 directionFacing = OMV.Vector3.UnitX * m_controllingPrim.RawOrientation;
274 OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
275 float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
276 if (diff < BSParam.AvatarStepApproachFactor)
277 {
278 if (highestTouchPosition.Z < touchPosition.Z)
279 highestTouchPosition = touchPosition;
280 }
281 }
282 }
283 }
284 m_walkingUpStairs = 0;
285 // If there is a good step sensing, move the avatar over the step.
286 if (highestTouchPosition != OMV.Vector3.Zero)
287 {
288 // Remember that we are going up stairs. This is needed because collisions
289 // will stop when we move up so this smoothes out that effect.
290 m_walkingUpStairs = BSParam.AvatarStepSmoothingSteps;
291
292 m_lastStepUp = highestTouchPosition.Z - nearFeetHeightMin;
293 ret = ComputeStairCorrection(m_lastStepUp);
294 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,touchPos={1},nearFeetMin={2},ret={3}",
295 m_controllingPrim.LocalID, highestTouchPosition, nearFeetHeightMin, ret);
296 }
297 }
298 else
299 {
300 // If we used to be going up stairs but are not now, smooth the case where collision goes away while
301 // we are bouncing up the stairs.
302 if (m_walkingUpStairs > 0)
303 {
304 m_walkingUpStairs--;
305 ret = ComputeStairCorrection(m_lastStepUp);
306 }
307 }
308
309 return ret;
310 }
311
312 private OMV.Vector3 ComputeStairCorrection(float stepUp)
313 {
314 OMV.Vector3 ret = OMV.Vector3.Zero;
315 OMV.Vector3 displacement = OMV.Vector3.Zero;
316
317 if (stepUp > 0f)
318 {
319 // Found the stairs contact point. Push up a little to raise the character.
320 if (BSParam.AvatarStepForceFactor > 0f)
321 {
322 float upForce = stepUp * m_controllingPrim.Mass * BSParam.AvatarStepForceFactor;
323 ret = new OMV.Vector3(0f, 0f, upForce);
324 }
325
326 // Also move the avatar up for the new height
327 if (BSParam.AvatarStepUpCorrectionFactor > 0f)
328 {
329 // Move the avatar up related to the height of the collision
330 displacement = new OMV.Vector3(0f, 0f, stepUp * BSParam.AvatarStepUpCorrectionFactor);
331 m_controllingPrim.ForcePosition = m_controllingPrim.RawPosition + displacement;
332 }
333 else
334 {
335 if (BSParam.AvatarStepUpCorrectionFactor < 0f)
336 {
337 // Move the avatar up about the specified step height
338 displacement = new OMV.Vector3(0f, 0f, BSParam.AvatarStepHeight);
339 m_controllingPrim.ForcePosition = m_controllingPrim.RawPosition + displacement;
340 }
341 }
342 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs.ComputeStairCorrection,disp={1},force={2}",
343 m_controllingPrim.LocalID, displacement, ret);
344
345 }
346 return ret;
347 }
348}
349}
350
351
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs
new file mode 100755
index 0000000..8a79809
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs
@@ -0,0 +1,173 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OpenSim.Region.Physics.Manager;
34
35using OMV = OpenMetaverse;
36
37namespace OpenSim.Region.Physics.BulletSPlugin
38{
39public class BSActorHover : BSActor
40{
41 private BSFMotor m_hoverMotor;
42
43 public BSActorHover(BSScene physicsScene, BSPhysObject pObj, string actorName)
44 : base(physicsScene, pObj, actorName)
45 {
46 m_hoverMotor = null;
47 m_physicsScene.DetailLog("{0},BSActorHover,constructor", m_controllingPrim.LocalID);
48 }
49
50 // BSActor.isActive
51 public override bool isActive
52 {
53 get { return Enabled; }
54 }
55
56 // Release any connections and resources used by the actor.
57 // BSActor.Dispose()
58 public override void Dispose()
59 {
60 Enabled = false;
61 }
62
63 // Called when physical parameters (properties set in Bullet) need to be re-applied.
64 // Called at taint-time.
65 // BSActor.Refresh()
66 public override void Refresh()
67 {
68 m_physicsScene.DetailLog("{0},BSActorHover,refresh", m_controllingPrim.LocalID);
69
70 // If not active any more, turn me off
71 if (!m_controllingPrim.HoverActive)
72 {
73 SetEnabled(false);
74 }
75
76 // If the object is physically active, add the hoverer prestep action
77 if (isActive)
78 {
79 ActivateHover();
80 }
81 else
82 {
83 DeactivateHover();
84 }
85 }
86
87 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
88 // Register a prestep action to restore physical requirements before the next simulation step.
89 // Called at taint-time.
90 // BSActor.RemoveDependencies()
91 public override void RemoveDependencies()
92 {
93 // Nothing to do for the hoverer since it is all software at pre-step action time.
94 }
95
96 // If a hover motor has not been created, create one and start the hovering.
97 private void ActivateHover()
98 {
99 if (m_hoverMotor == null)
100 {
101 // Turning the target on
102 m_hoverMotor = new BSFMotor("BSActorHover",
103 m_controllingPrim.HoverTau, // timeScale
104 BSMotor.Infinite, // decay time scale
105 1f // efficiency
106 );
107 m_hoverMotor.SetTarget(ComputeCurrentHoverHeight());
108 m_hoverMotor.SetCurrent(m_controllingPrim.RawPosition.Z);
109 m_hoverMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG so motor will output detail log messages.
110
111 m_physicsScene.BeforeStep += Hoverer;
112 }
113 }
114
115 private void DeactivateHover()
116 {
117 if (m_hoverMotor != null)
118 {
119 m_physicsScene.BeforeStep -= Hoverer;
120 m_hoverMotor = null;
121 }
122 }
123
124 // Called just before the simulation step. Update the vertical position for hoverness.
125 private void Hoverer(float timeStep)
126 {
127 // Don't do hovering while the object is selected.
128 if (!isActive)
129 return;
130
131 m_hoverMotor.SetCurrent(m_controllingPrim.RawPosition.Z);
132 m_hoverMotor.SetTarget(ComputeCurrentHoverHeight());
133 float targetHeight = m_hoverMotor.Step(timeStep);
134
135 // 'targetHeight' is where we'd like the Z of the prim to be at this moment.
136 // Compute the amount of force to push us there.
137 float moveForce = (targetHeight - m_controllingPrim.RawPosition.Z) * m_controllingPrim.RawMass;
138 // Undo anything the object thinks it's doing at the moment
139 moveForce = -m_controllingPrim.RawVelocity.Z * m_controllingPrim.Mass;
140
141 m_physicsScene.PE.ApplyCentralImpulse(m_controllingPrim.PhysBody, new OMV.Vector3(0f, 0f, moveForce));
142 m_physicsScene.DetailLog("{0},BSPrim.Hover,move,targHt={1},moveForce={2},mass={3}",
143 m_controllingPrim.LocalID, targetHeight, moveForce, m_controllingPrim.RawMass);
144 }
145
146 // Based on current position, determine what we should be hovering at now.
147 // Must recompute often. What if we walked offa cliff>
148 private float ComputeCurrentHoverHeight()
149 {
150 float ret = m_controllingPrim.HoverHeight;
151 float groundHeight = m_physicsScene.TerrainManager.GetTerrainHeightAtXYZ(m_controllingPrim.RawPosition);
152
153 switch (m_controllingPrim.HoverType)
154 {
155 case PIDHoverType.Ground:
156 ret = groundHeight + m_controllingPrim.HoverHeight;
157 break;
158 case PIDHoverType.GroundAndWater:
159 float waterHeight = m_physicsScene.TerrainManager.GetWaterLevelAtXYZ(m_controllingPrim.RawPosition);
160 if (groundHeight > waterHeight)
161 {
162 ret = groundHeight + m_controllingPrim.HoverHeight;
163 }
164 else
165 {
166 ret = waterHeight + m_controllingPrim.HoverHeight;
167 }
168 break;
169 }
170 return ret;
171 }
172}
173}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs
new file mode 100755
index 0000000..8b0fdeb
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs
@@ -0,0 +1,187 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OMV = OpenMetaverse;
34
35namespace OpenSim.Region.Physics.BulletSPlugin
36{
37public class BSActorLockAxis : BSActor
38{
39 BSConstraint LockAxisConstraint = null;
40
41 public BSActorLockAxis(BSScene physicsScene, BSPhysObject pObj, string actorName)
42 : base(physicsScene, pObj, actorName)
43 {
44 m_physicsScene.DetailLog("{0},BSActorLockAxis,constructor", m_controllingPrim.LocalID);
45 LockAxisConstraint = null;
46 }
47
48 // BSActor.isActive
49 public override bool isActive
50 {
51 get { return Enabled && m_controllingPrim.IsPhysicallyActive; }
52 }
53
54 // Release any connections and resources used by the actor.
55 // BSActor.Dispose()
56 public override void Dispose()
57 {
58 RemoveAxisLockConstraint();
59 }
60
61 // Called when physical parameters (properties set in Bullet) need to be re-applied.
62 // Called at taint-time.
63 // BSActor.Refresh()
64 public override void Refresh()
65 {
66 m_physicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}",
67 m_controllingPrim.LocalID, m_controllingPrim.LockedAngularAxis, Enabled, m_controllingPrim.IsPhysicallyActive);
68 // If all the axis are free, we don't need to exist
69 if (m_controllingPrim.LockedAngularAxis == m_controllingPrim.LockedAxisFree)
70 {
71 Enabled = false;
72 }
73
74 // If the object is physically active, add the axis locking constraint
75 if (isActive)
76 {
77 AddAxisLockConstraint();
78 }
79 else
80 {
81 RemoveAxisLockConstraint();
82 }
83 }
84
85 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
86 // Register a prestep action to restore physical requirements before the next simulation step.
87 // Called at taint-time.
88 // BSActor.RemoveDependencies()
89 public override void RemoveDependencies()
90 {
91 if (LockAxisConstraint != null)
92 {
93 // If a constraint is set up, remove it from the physical scene
94 RemoveAxisLockConstraint();
95 // Schedule a call before the next simulation step to restore the constraint.
96 m_physicsScene.PostTaintObject("BSActorLockAxis:" + ActorName, m_controllingPrim.LocalID, delegate()
97 {
98 Refresh();
99 });
100 }
101 }
102
103 private void AddAxisLockConstraint()
104 {
105 if (LockAxisConstraint == null)
106 {
107 // Lock that axis by creating a 6DOF constraint that has one end in the world and
108 // the other in the object.
109 // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=20817
110 // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=26380
111
112 // Remove any existing axis constraint (just to be sure)
113 RemoveAxisLockConstraint();
114
115 BSConstraint6Dof axisConstrainer = new BSConstraint6Dof(m_physicsScene.World, m_controllingPrim.PhysBody,
116 OMV.Vector3.Zero, OMV.Quaternion.Identity,
117 false /* useLinearReferenceFrameB */, true /* disableCollisionsBetweenLinkedBodies */);
118 LockAxisConstraint = axisConstrainer;
119 m_physicsScene.Constraints.AddConstraint(LockAxisConstraint);
120
121 // The constraint is tied to the world and oriented to the prim.
122
123 // Free to move linearly in the region
124 OMV.Vector3 linearLow = OMV.Vector3.Zero;
125 OMV.Vector3 linearHigh = m_physicsScene.TerrainManager.DefaultRegionSize;
126 if (m_controllingPrim.LockedLinearAxis.X != BSPhysObject.FreeAxis)
127 {
128 linearLow.X = m_controllingPrim.RawPosition.X;
129 linearHigh.X = m_controllingPrim.RawPosition.X;
130 }
131 if (m_controllingPrim.LockedLinearAxis.Y != BSPhysObject.FreeAxis)
132 {
133 linearLow.Y = m_controllingPrim.RawPosition.Y;
134 linearHigh.Y = m_controllingPrim.RawPosition.Y;
135 }
136 if (m_controllingPrim.LockedLinearAxis.Z != BSPhysObject.FreeAxis)
137 {
138 linearLow.Z = m_controllingPrim.RawPosition.Z;
139 linearHigh.Z = m_controllingPrim.RawPosition.Z;
140 }
141 axisConstrainer.SetLinearLimits(linearLow, linearHigh);
142
143 // Angular with some axis locked
144 float fPI = (float)Math.PI;
145 OMV.Vector3 angularLow = new OMV.Vector3(-fPI, -fPI, -fPI);
146 OMV.Vector3 angularHigh = new OMV.Vector3(fPI, fPI, fPI);
147 if (m_controllingPrim.LockedAngularAxis.X != BSPhysObject.FreeAxis)
148 {
149 angularLow.X = 0f;
150 angularHigh.X = 0f;
151 }
152 if (m_controllingPrim.LockedAngularAxis.Y != BSPhysObject.FreeAxis)
153 {
154 angularLow.Y = 0f;
155 angularHigh.Y = 0f;
156 }
157 if (m_controllingPrim.LockedAngularAxis.Z != BSPhysObject.FreeAxis)
158 {
159 angularLow.Z = 0f;
160 angularHigh.Z = 0f;
161 }
162 if (!axisConstrainer.SetAngularLimits(angularLow, angularHigh))
163 {
164 m_physicsScene.DetailLog("{0},BSActorLockAxis.AddAxisLockConstraint,failedSetAngularLimits", m_controllingPrim.LocalID);
165 }
166
167 m_physicsScene.DetailLog("{0},BSActorLockAxis.AddAxisLockConstraint,create,linLow={1},linHi={2},angLow={3},angHi={4}",
168 m_controllingPrim.LocalID, linearLow, linearHigh, angularLow, angularHigh);
169
170 // Constants from one of the posts mentioned above and used in Bullet's ConstraintDemo.
171 axisConstrainer.TranslationalLimitMotor(true /* enable */, 5.0f, 0.1f);
172
173 axisConstrainer.RecomputeConstraintVariables(m_controllingPrim.RawMass);
174 }
175 }
176
177 private void RemoveAxisLockConstraint()
178 {
179 if (LockAxisConstraint != null)
180 {
181 m_physicsScene.Constraints.RemoveAndDestroyConstraint(LockAxisConstraint);
182 LockAxisConstraint = null;
183 m_physicsScene.DetailLog("{0},BSActorLockAxis.RemoveAxisLockConstraint,destroyingConstraint", m_controllingPrim.LocalID);
184 }
185 }
186}
187}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs
new file mode 100755
index 0000000..75ff24e
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs
@@ -0,0 +1,157 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OpenSim.Region.Physics.Manager;
34
35using OMV = OpenMetaverse;
36
37namespace OpenSim.Region.Physics.BulletSPlugin
38{
39public class BSActorMoveToTarget : BSActor
40{
41 private BSVMotor m_targetMotor;
42
43 public BSActorMoveToTarget(BSScene physicsScene, BSPhysObject pObj, string actorName)
44 : base(physicsScene, pObj, actorName)
45 {
46 m_targetMotor = null;
47 m_physicsScene.DetailLog("{0},BSActorMoveToTarget,constructor", m_controllingPrim.LocalID);
48 }
49
50 // BSActor.isActive
51 public override bool isActive
52 {
53 get { return Enabled; }
54 }
55
56 // Release any connections and resources used by the actor.
57 // BSActor.Dispose()
58 public override void Dispose()
59 {
60 Enabled = false;
61 }
62
63 // Called when physical parameters (properties set in Bullet) need to be re-applied.
64 // Called at taint-time.
65 // BSActor.Refresh()
66 public override void Refresh()
67 {
68 m_physicsScene.DetailLog("{0},BSActorMoveToTarget,refresh,enabled={1},active={2},target={3},tau={4}",
69 m_controllingPrim.LocalID, Enabled, m_controllingPrim.MoveToTargetActive,
70 m_controllingPrim.MoveToTargetTarget, m_controllingPrim.MoveToTargetTau );
71
72 // If not active any more...
73 if (!m_controllingPrim.MoveToTargetActive)
74 {
75 Enabled = false;
76 }
77
78 if (isActive)
79 {
80 ActivateMoveToTarget();
81 }
82 else
83 {
84 DeactivateMoveToTarget();
85 }
86 }
87
88 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
89 // Register a prestep action to restore physical requirements before the next simulation step.
90 // Called at taint-time.
91 // BSActor.RemoveDependencies()
92 public override void RemoveDependencies()
93 {
94 // Nothing to do for the moveToTarget since it is all software at pre-step action time.
95 }
96
97 // If a hover motor has not been created, create one and start the hovering.
98 private void ActivateMoveToTarget()
99 {
100 if (m_targetMotor == null)
101 {
102 // We're taking over after this.
103 m_controllingPrim.ZeroMotion(true);
104
105 m_targetMotor = new BSVMotor("BSActorMoveToTargget.Activate",
106 m_controllingPrim.MoveToTargetTau, // timeScale
107 BSMotor.Infinite, // decay time scale
108 1f // efficiency
109 );
110 m_targetMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG so motor will output detail log messages.
111 m_targetMotor.SetTarget(m_controllingPrim.MoveToTargetTarget);
112 m_targetMotor.SetCurrent(m_controllingPrim.RawPosition);
113
114 m_physicsScene.BeforeStep += Mover;
115 }
116 }
117
118 private void DeactivateMoveToTarget()
119 {
120 if (m_targetMotor != null)
121 {
122 m_physicsScene.BeforeStep -= Mover;
123 m_targetMotor = null;
124 }
125 }
126
127 // Called just before the simulation step. Update the vertical position for hoverness.
128 private void Mover(float timeStep)
129 {
130 // Don't do hovering while the object is selected.
131 if (!isActive)
132 return;
133
134 OMV.Vector3 origPosition = m_controllingPrim.RawPosition; // DEBUG DEBUG (for printout below)
135
136 // 'movePosition' is where we'd like the prim to be at this moment.
137 OMV.Vector3 movePosition = m_controllingPrim.RawPosition + m_targetMotor.Step(timeStep);
138
139 // If we are very close to our target, turn off the movement motor.
140 if (m_targetMotor.ErrorIsZero())
141 {
142 m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover,zeroMovement,movePos={1},pos={2},mass={3}",
143 m_controllingPrim.LocalID, movePosition, m_controllingPrim.RawPosition, m_controllingPrim.Mass);
144 m_controllingPrim.ForcePosition = m_targetMotor.TargetValue;
145 // Setting the position does not cause the physics engine to generate a property update. Force it.
146 m_physicsScene.PE.PushUpdate(m_controllingPrim.PhysBody);
147 }
148 else
149 {
150 m_controllingPrim.ForcePosition = movePosition;
151 // Setting the position does not cause the physics engine to generate a property update. Force it.
152 m_physicsScene.PE.PushUpdate(m_controllingPrim.PhysBody);
153 }
154 m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover,move,fromPos={1},movePos={2}", m_controllingPrim.LocalID, origPosition, movePosition);
155 }
156}
157}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs
new file mode 100755
index 0000000..96fa0b6
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs
@@ -0,0 +1,137 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OpenSim.Region.Physics.Manager;
34
35using OMV = OpenMetaverse;
36
37namespace OpenSim.Region.Physics.BulletSPlugin
38{
39public class BSActorSetForce : BSActor
40{
41 BSFMotor m_forceMotor;
42
43 public BSActorSetForce(BSScene physicsScene, BSPhysObject pObj, string actorName)
44 : base(physicsScene, pObj, actorName)
45 {
46 m_forceMotor = null;
47 m_physicsScene.DetailLog("{0},BSActorSetForce,constructor", m_controllingPrim.LocalID);
48 }
49
50 // BSActor.isActive
51 public override bool isActive
52 {
53 get { return Enabled && m_controllingPrim.IsPhysicallyActive; }
54 }
55
56 // Release any connections and resources used by the actor.
57 // BSActor.Dispose()
58 public override void Dispose()
59 {
60 Enabled = false;
61 }
62
63 // Called when physical parameters (properties set in Bullet) need to be re-applied.
64 // Called at taint-time.
65 // BSActor.Refresh()
66 public override void Refresh()
67 {
68 m_physicsScene.DetailLog("{0},BSActorSetForce,refresh", m_controllingPrim.LocalID);
69
70 // If not active any more, get rid of me (shouldn't ever happen, but just to be safe)
71 if (m_controllingPrim.RawForce == OMV.Vector3.Zero)
72 {
73 m_physicsScene.DetailLog("{0},BSActorSetForce,refresh,notSetForce,removing={1}", m_controllingPrim.LocalID, ActorName);
74 Enabled = false;
75 return;
76 }
77
78 // If the object is physically active, add the hoverer prestep action
79 if (isActive)
80 {
81 ActivateSetForce();
82 }
83 else
84 {
85 DeactivateSetForce();
86 }
87 }
88
89 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
90 // Register a prestep action to restore physical requirements before the next simulation step.
91 // Called at taint-time.
92 // BSActor.RemoveDependencies()
93 public override void RemoveDependencies()
94 {
95 // Nothing to do for the hoverer since it is all software at pre-step action time.
96 }
97
98 // If a hover motor has not been created, create one and start the hovering.
99 private void ActivateSetForce()
100 {
101 if (m_forceMotor == null)
102 {
103 // A fake motor that might be used someday
104 m_forceMotor = new BSFMotor("setForce", 1f, 1f, 1f);
105
106 m_physicsScene.BeforeStep += Mover;
107 }
108 }
109
110 private void DeactivateSetForce()
111 {
112 if (m_forceMotor != null)
113 {
114 m_physicsScene.BeforeStep -= Mover;
115 m_forceMotor = null;
116 }
117 }
118
119 // Called just before the simulation step. Update the vertical position for hoverness.
120 private void Mover(float timeStep)
121 {
122 // Don't do force while the object is selected.
123 if (!isActive)
124 return;
125
126 m_physicsScene.DetailLog("{0},BSActorSetForce,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawForce);
127 if (m_controllingPrim.PhysBody.HasPhysicalBody)
128 {
129 m_physicsScene.PE.ApplyCentralForce(m_controllingPrim.PhysBody, m_controllingPrim.RawForce);
130 m_controllingPrim.ActivateIfPhysical(false);
131 }
132
133 // TODO:
134 }
135}
136}
137
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs
new file mode 100755
index 0000000..65098e1
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs
@@ -0,0 +1,138 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Text;
32
33using OpenSim.Region.Physics.Manager;
34
35using OMV = OpenMetaverse;
36
37namespace OpenSim.Region.Physics.BulletSPlugin
38{
39public class BSActorSetTorque : BSActor
40{
41 BSFMotor m_torqueMotor;
42
43 public BSActorSetTorque(BSScene physicsScene, BSPhysObject pObj, string actorName)
44 : base(physicsScene, pObj, actorName)
45 {
46 m_torqueMotor = null;
47 m_physicsScene.DetailLog("{0},BSActorSetTorque,constructor", m_controllingPrim.LocalID);
48 }
49
50 // BSActor.isActive
51 public override bool isActive
52 {
53 get { return Enabled && m_controllingPrim.IsPhysicallyActive; }
54 }
55
56 // Release any connections and resources used by the actor.
57 // BSActor.Dispose()
58 public override void Dispose()
59 {
60 Enabled = false;
61 }
62
63 // Called when physical parameters (properties set in Bullet) need to be re-applied.
64 // Called at taint-time.
65 // BSActor.Refresh()
66 public override void Refresh()
67 {
68 m_physicsScene.DetailLog("{0},BSActorSetTorque,refresh,torque={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque);
69
70 // If not active any more, get rid of me (shouldn't ever happen, but just to be safe)
71 if (m_controllingPrim.RawTorque == OMV.Vector3.Zero)
72 {
73 m_physicsScene.DetailLog("{0},BSActorSetTorque,refresh,notSetTorque,disabling={1}", m_controllingPrim.LocalID, ActorName);
74 Enabled = false;
75 return;
76 }
77
78 // If the object is physically active, add the hoverer prestep action
79 if (isActive)
80 {
81 ActivateSetTorque();
82 }
83 else
84 {
85 DeactivateSetTorque();
86 }
87 }
88
89 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
90 // Register a prestep action to restore physical requirements before the next simulation step.
91 // Called at taint-time.
92 // BSActor.RemoveDependencies()
93 public override void RemoveDependencies()
94 {
95 // Nothing to do for the hoverer since it is all software at pre-step action time.
96 }
97
98 // If a hover motor has not been created, create one and start the hovering.
99 private void ActivateSetTorque()
100 {
101 if (m_torqueMotor == null)
102 {
103 // A fake motor that might be used someday
104 m_torqueMotor = new BSFMotor("setTorque", 1f, 1f, 1f);
105
106 m_physicsScene.BeforeStep += Mover;
107 }
108 }
109
110 private void DeactivateSetTorque()
111 {
112 if (m_torqueMotor != null)
113 {
114 m_physicsScene.BeforeStep -= Mover;
115 m_torqueMotor = null;
116 }
117 }
118
119 // Called just before the simulation step. Update the vertical position for hoverness.
120 private void Mover(float timeStep)
121 {
122 // Don't do force while the object is selected.
123 if (!isActive)
124 return;
125
126 m_physicsScene.DetailLog("{0},BSActorSetTorque,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque);
127 if (m_controllingPrim.PhysBody.HasPhysicalBody)
128 {
129 m_controllingPrim.AddAngularForce(m_controllingPrim.RawTorque, false, true);
130 m_controllingPrim.ActivateIfPhysical(false);
131 }
132
133 // TODO:
134 }
135}
136}
137
138
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs
new file mode 100755
index 0000000..fff63e4
--- /dev/null
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs
@@ -0,0 +1,160 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyrightD
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30
31namespace OpenSim.Region.Physics.BulletSPlugin
32{
33public class BSActorCollection
34{
35 private BSScene m_physicsScene { get; set; }
36 private Dictionary<string, BSActor> m_actors;
37
38 public BSActorCollection(BSScene physicsScene)
39 {
40 m_physicsScene = physicsScene;
41 m_actors = new Dictionary<string, BSActor>();
42 }
43 public void Add(string name, BSActor actor)
44 {
45 lock (m_actors)
46 {
47 if (!m_actors.ContainsKey(name))
48 {
49 m_actors[name] = actor;
50 }
51 }
52 }
53 public bool RemoveAndRelease(string name)
54 {
55 bool ret = false;
56 lock (m_actors)
57 {
58 if (m_actors.ContainsKey(name))
59 {
60 BSActor beingRemoved = m_actors[name];
61 m_actors.Remove(name);
62 beingRemoved.Dispose();
63 ret = true;
64 }
65 }
66 return ret;
67 }
68 public void Clear()
69 {
70 lock (m_actors)
71 {
72 Release();
73 m_actors.Clear();
74 }
75 }
76 public void Dispose()
77 {
78 Clear();
79 }
80 public bool HasActor(string name)
81 {
82 return m_actors.ContainsKey(name);
83 }
84 public bool TryGetActor(string actorName, out BSActor theActor)
85 {
86 return m_actors.TryGetValue(actorName, out theActor);
87 }
88 public void ForEachActor(Action<BSActor> act)
89 {
90 lock (m_actors)
91 {
92 foreach (KeyValuePair<string, BSActor> kvp in m_actors)
93 act(kvp.Value);
94 }
95 }
96
97 public void Enable(bool enabl)
98 {
99 ForEachActor(a => a.SetEnabled(enabl));
100 }
101 public void Release()
102 {
103 ForEachActor(a => a.Dispose());
104 }
105 public void Refresh()
106 {
107 ForEachActor(a => a.Refresh());
108 }
109 public void RemoveDependencies()
110 {
111 ForEachActor(a => a.RemoveDependencies());
112 }
113}
114
115// =============================================================================
116/// <summary>
117/// Each physical object can have 'actors' who are pushing the object around.
118/// This can be used for hover, locking axis, making vehicles, etc.
119/// Each physical object can have multiple actors acting on it.
120///
121/// An actor usually registers itself with physics scene events (pre-step action)
122/// and modifies the parameters on the host physical object.
123/// </summary>
124public abstract class BSActor
125{
126 protected BSScene m_physicsScene { get; private set; }
127 protected BSPhysObject m_controllingPrim { get; private set; }
128 public virtual bool Enabled { get; set; }
129 public string ActorName { get; private set; }
130
131 public BSActor(BSScene physicsScene, BSPhysObject pObj, string actorName)
132 {
133 m_physicsScene = physicsScene;
134 m_controllingPrim = pObj;
135 ActorName = actorName;
136 Enabled = true;
137 }
138
139 // Return 'true' if activily updating the prim
140 public virtual bool isActive
141 {
142 get { return Enabled; }
143 }
144
145 // Turn the actor on an off. Only used by ActorCollection to set all enabled/disabled.
146 // Anyone else should assign true/false to 'Enabled'.
147 public void SetEnabled(bool setEnabled)
148 {
149 Enabled = setEnabled;
150 }
151 // Release any connections and resources used by the actor.
152 public abstract void Dispose();
153 // Called when physical parameters (properties set in Bullet) need to be re-applied.
154 public abstract void Refresh();
155 // The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
156 // Register a prestep action to restore physical requirements before the next simulation step.
157 public abstract void RemoveDependencies();
158
159}
160}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs
index 5765b0d..6cdc112 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs
@@ -70,6 +70,8 @@ public enum BSPhysicsShapeType
70 SHAPE_COMPOUND = 22, 70 SHAPE_COMPOUND = 22,
71 SHAPE_HEIGHTMAP = 23, 71 SHAPE_HEIGHTMAP = 23,
72 SHAPE_AVATAR = 24, 72 SHAPE_AVATAR = 24,
73 SHAPE_CONVEXHULL= 25,
74 SHAPE_GIMPACT = 26,
73}; 75};
74 76
75// The native shapes have predefined shape hash keys 77// The native shapes have predefined shape hash keys
@@ -191,6 +193,21 @@ public struct ConfigurationParameters
191 public const float numericFalse = 0f; 193 public const float numericFalse = 0f;
192} 194}
193 195
196// Parameters passed for the conversion of a mesh to a hull using Bullet's HACD library.
197[StructLayout(LayoutKind.Sequential)]
198public struct HACDParams
199{
200 // usual default values
201 public float maxVerticesPerHull; // 100
202 public float minClusters; // 2
203 public float compacityWeight; // 0.1
204 public float volumeWeight; // 0.0
205 public float concavity; // 100
206 public float addExtraDistPoints; // false
207 public float addNeighboursDistPoints; // false
208 public float addFacesPoints; // false
209 public float shouldAdjustCollisionMargin; // false
210}
194 211
195// The states a bullet collision object can have 212// The states a bullet collision object can have
196public enum ActivationState : uint 213public enum ActivationState : uint
@@ -282,7 +299,7 @@ public abstract class BSAPITemplate
282{ 299{
283// Returns the name of the underlying Bullet engine 300// Returns the name of the underlying Bullet engine
284public abstract string BulletEngineName { get; } 301public abstract string BulletEngineName { get; }
285public abstract string BulletEngineVersion { get; protected set;} 302public abstract string BulletEngineVersion { get; protected set;}
286 303
287// Initialization and simulation 304// Initialization and simulation
288public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms, 305public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms,
@@ -305,10 +322,20 @@ public abstract BulletShape CreateMeshShape(BulletWorld world,
305 int indicesCount, int[] indices, 322 int indicesCount, int[] indices,
306 int verticesCount, float[] vertices ); 323 int verticesCount, float[] vertices );
307 324
325public abstract BulletShape CreateGImpactShape(BulletWorld world,
326 int indicesCount, int[] indices,
327 int verticesCount, float[] vertices );
328
308public abstract BulletShape CreateHullShape(BulletWorld world, 329public abstract BulletShape CreateHullShape(BulletWorld world,
309 int hullCount, float[] hulls); 330 int hullCount, float[] hulls);
310 331
311public abstract BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape); 332public abstract BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape, HACDParams parms);
333
334public abstract BulletShape BuildConvexHullShapeFromMesh(BulletWorld world, BulletShape meshShape);
335
336public abstract BulletShape CreateConvexHullShape(BulletWorld world,
337 int indicesCount, int[] indices,
338 int verticesCount, float[] vertices );
312 339
313public abstract BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData); 340public abstract BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData);
314 341
@@ -351,7 +378,7 @@ public abstract void DestroyObject(BulletWorld sim, BulletBody obj);
351// ===================================================================================== 378// =====================================================================================
352public abstract BulletShape CreateGroundPlaneShape(UInt32 id, float height, float collisionMargin); 379public abstract BulletShape CreateGroundPlaneShape(UInt32 id, float height, float collisionMargin);
353 380
354public abstract BulletShape CreateTerrainShape(UInt32 id, Vector3 size, float minHeight, float maxHeight, float[] heightMap, 381public abstract BulletShape CreateTerrainShape(UInt32 id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
355 float scaleFactor, float collisionMargin); 382 float scaleFactor, float collisionMargin);
356 383
357// ===================================================================================== 384// =====================================================================================
@@ -366,7 +393,7 @@ public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world,
366 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); 393 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
367 394
368public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1, 395public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1,
369 Vector3 frameInBloc, Quaternion frameInBrot, 396 Vector3 frameInBloc, Quaternion frameInBrot,
370 bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies); 397 bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies);
371 398
372public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, 399public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 90c2d9c..48f842e 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -46,9 +46,6 @@ public sealed class BSCharacter : BSPhysObject
46 private OMV.Vector3 _position; 46 private OMV.Vector3 _position;
47 private float _mass; 47 private float _mass;
48 private float _avatarVolume; 48 private float _avatarVolume;
49 private OMV.Vector3 _force;
50 private OMV.Vector3 _velocity;
51 private OMV.Vector3 _torque;
52 private float _collisionScore; 49 private float _collisionScore;
53 private OMV.Vector3 _acceleration; 50 private OMV.Vector3 _acceleration;
54 private OMV.Quaternion _orientation; 51 private OMV.Quaternion _orientation;
@@ -62,15 +59,12 @@ public sealed class BSCharacter : BSPhysObject
62 private bool _kinematic; 59 private bool _kinematic;
63 private float _buoyancy; 60 private float _buoyancy;
64 61
65 private BSVMotor _velocityMotor; 62 private BSActorAvatarMove m_moveActor;
63 private const string AvatarMoveActorName = "BSCharacter.AvatarMove";
66 64
67 private OMV.Vector3 _PIDTarget; 65 private OMV.Vector3 _PIDTarget;
68 private bool _usePID; 66 private bool _usePID;
69 private float _PIDTau; 67 private float _PIDTau;
70 private bool _useHoverPID;
71 private float _PIDHoverHeight;
72 private PIDHoverType _PIDHoverType;
73 private float _PIDHoverTao;
74 68
75 public BSCharacter(uint localID, String avName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size, bool isFlying) 69 public BSCharacter(uint localID, String avName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size, bool isFlying)
76 : base(parent_scene, localID, avName, "BSCharacter") 70 : base(parent_scene, localID, avName, "BSCharacter")
@@ -80,7 +74,7 @@ public sealed class BSCharacter : BSPhysObject
80 74
81 _flying = isFlying; 75 _flying = isFlying;
82 _orientation = OMV.Quaternion.Identity; 76 _orientation = OMV.Quaternion.Identity;
83 _velocity = OMV.Vector3.Zero; 77 RawVelocity = OMV.Vector3.Zero;
84 _buoyancy = ComputeBuoyancyFromFlying(isFlying); 78 _buoyancy = ComputeBuoyancyFromFlying(isFlying);
85 Friction = BSParam.AvatarStandingFriction; 79 Friction = BSParam.AvatarStandingFriction;
86 Density = BSParam.AvatarDensity / BSParam.DensityScaleFactor; 80 Density = BSParam.AvatarDensity / BSParam.DensityScaleFactor;
@@ -97,17 +91,22 @@ public sealed class BSCharacter : BSPhysObject
97 // set _avatarVolume and _mass based on capsule size, _density and Scale 91 // set _avatarVolume and _mass based on capsule size, _density and Scale
98 ComputeAvatarVolumeAndMass(); 92 ComputeAvatarVolumeAndMass();
99 93
100 SetupMovementMotor(); 94 // The avatar's movement is controlled by this motor that speeds up and slows down
95 // the avatar seeking to reach the motor's target speed.
96 // This motor runs as a prestep action for the avatar so it will keep the avatar
97 // standing as well as moving. Destruction of the avatar will destroy the pre-step action.
98 m_moveActor = new BSActorAvatarMove(PhysScene, this, AvatarMoveActorName);
99 PhysicalActors.Add(AvatarMoveActorName, m_moveActor);
101 100
102 DetailLog("{0},BSCharacter.create,call,size={1},scale={2},density={3},volume={4},mass={5}", 101 DetailLog("{0},BSCharacter.create,call,size={1},scale={2},density={3},volume={4},mass={5}",
103 LocalID, _size, Scale, Density, _avatarVolume, RawMass); 102 LocalID, _size, Scale, Density, _avatarVolume, RawMass);
104 103
105 // do actual creation in taint time 104 // do actual creation in taint time
106 PhysicsScene.TaintedObject("BSCharacter.create", delegate() 105 PhysScene.TaintedObject("BSCharacter.create", delegate()
107 { 106 {
108 DetailLog("{0},BSCharacter.create,taint", LocalID); 107 DetailLog("{0},BSCharacter.create,taint", LocalID);
109 // New body and shape into PhysBody and PhysShape 108 // New body and shape into PhysBody and PhysShape
110 PhysicsScene.Shapes.GetBodyAndShape(true, PhysicsScene.World, this); 109 PhysScene.Shapes.GetBodyAndShape(true, PhysScene.World, this);
111 110
112 SetPhysicalProperties(); 111 SetPhysicalProperties();
113 }); 112 });
@@ -120,214 +119,63 @@ public sealed class BSCharacter : BSPhysObject
120 base.Destroy(); 119 base.Destroy();
121 120
122 DetailLog("{0},BSCharacter.Destroy", LocalID); 121 DetailLog("{0},BSCharacter.Destroy", LocalID);
123 PhysicsScene.TaintedObject("BSCharacter.destroy", delegate() 122 PhysScene.TaintedObject("BSCharacter.destroy", delegate()
124 { 123 {
125 PhysicsScene.Shapes.DereferenceBody(PhysBody, null /* bodyCallback */); 124 PhysScene.Shapes.DereferenceBody(PhysBody, null /* bodyCallback */);
126 PhysBody.Clear(); 125 PhysBody.Clear();
127 PhysicsScene.Shapes.DereferenceShape(PhysShape, null /* bodyCallback */); 126 PhysShape.Dereference(PhysScene);
128 PhysShape.Clear(); 127 PhysShape = new BSShapeNull();
129 }); 128 });
130 } 129 }
131 130
132 private void SetPhysicalProperties() 131 private void SetPhysicalProperties()
133 { 132 {
134 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, PhysBody); 133 PhysScene.PE.RemoveObjectFromWorld(PhysScene.World, PhysBody);
135 134
136 ZeroMotion(true); 135 ZeroMotion(true);
137 ForcePosition = _position; 136 ForcePosition = _position;
138 137
139 // Set the velocity 138 // Set the velocity
140 _velocityMotor.Reset(); 139 if (m_moveActor != null)
141 _velocityMotor.SetTarget(_velocity); 140 m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, false);
142 _velocityMotor.SetCurrent(_velocity); 141
143 ForceVelocity = _velocity; 142 ForceVelocity = RawVelocity;
144 143
145 // This will enable or disable the flying buoyancy of the avatar. 144 // This will enable or disable the flying buoyancy of the avatar.
146 // Needs to be reset especially when an avatar is recreated after crossing a region boundry. 145 // Needs to be reset especially when an avatar is recreated after crossing a region boundry.
147 Flying = _flying; 146 Flying = _flying;
148 147
149 PhysicsScene.PE.SetRestitution(PhysBody, BSParam.AvatarRestitution); 148 PhysScene.PE.SetRestitution(PhysBody, BSParam.AvatarRestitution);
150 PhysicsScene.PE.SetMargin(PhysShape, PhysicsScene.Params.collisionMargin); 149 PhysScene.PE.SetMargin(PhysShape.physShapeInfo, PhysScene.Params.collisionMargin);
151 PhysicsScene.PE.SetLocalScaling(PhysShape, Scale); 150 PhysScene.PE.SetLocalScaling(PhysShape.physShapeInfo, Scale);
152 PhysicsScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold); 151 PhysScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold);
153 if (BSParam.CcdMotionThreshold > 0f) 152 if (BSParam.CcdMotionThreshold > 0f)
154 { 153 {
155 PhysicsScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold); 154 PhysScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold);
156 PhysicsScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius); 155 PhysScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius);
157 } 156 }
158 157
159 UpdatePhysicalMassProperties(RawMass, false); 158 UpdatePhysicalMassProperties(RawMass, false);
160 159
161 // Make so capsule does not fall over 160 // Make so capsule does not fall over
162 PhysicsScene.PE.SetAngularFactorV(PhysBody, OMV.Vector3.Zero); 161 PhysScene.PE.SetAngularFactorV(PhysBody, OMV.Vector3.Zero);
162
163 // The avatar mover sets some parameters.
164 PhysicalActors.Refresh();
163 165
164 PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_CHARACTER_OBJECT); 166 PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_CHARACTER_OBJECT);
165 167
166 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, PhysBody); 168 PhysScene.PE.AddObjectToWorld(PhysScene.World, PhysBody);
167 169
168 // PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ACTIVE_TAG); 170 // PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ACTIVE_TAG);
169 PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.DISABLE_DEACTIVATION); 171 PhysScene.PE.ForceActivationState(PhysBody, ActivationState.DISABLE_DEACTIVATION);
170 PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, PhysBody); 172 PhysScene.PE.UpdateSingleAabb(PhysScene.World, PhysBody);
171 173
172 // Do this after the object has been added to the world 174 // Do this after the object has been added to the world
173 PhysBody.collisionType = CollisionType.Avatar; 175 PhysBody.collisionType = CollisionType.Avatar;
174 PhysBody.ApplyCollisionMask(PhysicsScene); 176 PhysBody.ApplyCollisionMask(PhysScene);
175 }
176
177 // The avatar's movement is controlled by this motor that speeds up and slows down
178 // the avatar seeking to reach the motor's target speed.
179 // This motor runs as a prestep action for the avatar so it will keep the avatar
180 // standing as well as moving. Destruction of the avatar will destroy the pre-step action.
181 private void SetupMovementMotor()
182 {
183 // Infinite decay and timescale values so motor only changes current to target values.
184 _velocityMotor = new BSVMotor("BSCharacter.Velocity",
185 0.2f, // time scale
186 BSMotor.Infinite, // decay time scale
187 BSMotor.InfiniteVector, // friction timescale
188 1f // efficiency
189 );
190 // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
191
192 RegisterPreStepAction("BSCharactor.Movement", LocalID, delegate(float timeStep)
193 {
194 // TODO: Decide if the step parameters should be changed depending on the avatar's
195 // state (flying, colliding, ...). There is code in ODE to do this.
196
197 // COMMENTARY: when the user is making the avatar walk, except for falling, the velocity
198 // specified for the avatar is the one that should be used. For falling, if the avatar
199 // is not flying and is not colliding then it is presumed to be falling and the Z
200 // component is not fooled with (thus allowing gravity to do its thing).
201 // When the avatar is standing, though, the user has specified a velocity of zero and
202 // the avatar should be standing. But if the avatar is pushed by something in the world
203 // (raising elevator platform, moving vehicle, ...) the avatar should be allowed to
204 // move. Thus, the velocity cannot be forced to zero. The problem is that small velocity
205 // errors can creap in and the avatar will slowly float off in some direction.
206 // So, the problem is that, when an avatar is standing, we cannot tell creaping error
207 // from real pushing.
208 // The code below uses whether the collider is static or moving to decide whether to zero motion.
209
210 _velocityMotor.Step(timeStep);
211
212 // If we're not supposed to be moving, make sure things are zero.
213 if (_velocityMotor.ErrorIsZero() && _velocityMotor.TargetValue == OMV.Vector3.Zero)
214 {
215 // The avatar shouldn't be moving
216 _velocityMotor.Zero();
217
218 if (IsColliding)
219 {
220 // If we are colliding with a stationary object, presume we're standing and don't move around
221 if (!ColliderIsMoving)
222 {
223 DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", LocalID);
224 ZeroMotion(true /* inTaintTime */);
225 }
226
227 // Standing has more friction on the ground
228 if (Friction != BSParam.AvatarStandingFriction)
229 {
230 Friction = BSParam.AvatarStandingFriction;
231 PhysicsScene.PE.SetFriction(PhysBody, Friction);
232 }
233 }
234 else
235 {
236 if (Flying)
237 {
238 // Flying and not collising and velocity nearly zero.
239 ZeroMotion(true /* inTaintTime */);
240 }
241 }
242
243 DetailLog("{0},BSCharacter.MoveMotor,taint,stopping,target={1},colliding={2}", LocalID, _velocityMotor.TargetValue, IsColliding);
244 }
245 else
246 {
247 // Supposed to be moving.
248 OMV.Vector3 stepVelocity = _velocityMotor.CurrentValue;
249
250 if (Friction != BSParam.AvatarFriction)
251 {
252 // Probably starting up walking. Set friction to moving friction.
253 Friction = BSParam.AvatarFriction;
254 PhysicsScene.PE.SetFriction(PhysBody, Friction);
255 }
256
257 // If falling, we keep the world's downward vector no matter what the other axis specify.
258 // The check for _velocity.Z < 0 makes jumping work (temporary upward force).
259 if (!Flying && !IsColliding)
260 {
261 if (_velocity.Z < 0)
262 stepVelocity.Z = _velocity.Z;
263 // DetailLog("{0},BSCharacter.MoveMotor,taint,overrideStepZWithWorldZ,stepVel={1}", LocalID, stepVelocity);
264 }
265
266 // 'stepVelocity' is now the speed we'd like the avatar to move in. Turn that into an instantanous force.
267 OMV.Vector3 moveForce = (stepVelocity - _velocity) * Mass;
268
269 // Should we check for move force being small and forcing velocity to zero?
270
271 // Add special movement force to allow avatars to walk up stepped surfaces.
272 moveForce += WalkUpStairs();
273
274 DetailLog("{0},BSCharacter.MoveMotor,move,stepVel={1},vel={2},mass={3},moveForce={4}", LocalID, stepVelocity, _velocity, Mass, moveForce);
275 PhysicsScene.PE.ApplyCentralImpulse(PhysBody, moveForce);
276 }
277 });
278 } 177 }
279 178
280 // Decide if the character is colliding with a low object and compute a force to pop the
281 // avatar up so it can walk up and over the low objects.
282 private OMV.Vector3 WalkUpStairs()
283 {
284 OMV.Vector3 ret = OMV.Vector3.Zero;
285
286 // This test is done if moving forward, not flying and is colliding with something.
287 // DetailLog("{0},BSCharacter.WalkUpStairs,IsColliding={1},flying={2},targSpeed={3},collisions={4}",
288 // LocalID, IsColliding, Flying, TargetSpeed, CollisionsLastTick.Count);
289 if (IsColliding && !Flying && TargetVelocitySpeed > 0.1f /* && ForwardSpeed < 0.1f */)
290 {
291 // The range near the character's feet where we will consider stairs
292 float nearFeetHeightMin = RawPosition.Z - (Size.Z / 2f) + 0.05f;
293 float nearFeetHeightMax = nearFeetHeightMin + BSParam.AvatarStepHeight;
294
295 // Look for a collision point that is near the character's feet and is oriented the same as the charactor is
296 foreach (KeyValuePair<uint, ContactPoint> kvp in CollisionsLastTick.m_objCollisionList)
297 {
298 // Don't care about collisions with the terrain
299 if (kvp.Key > PhysicsScene.TerrainManager.HighestTerrainID)
300 {
301 OMV.Vector3 touchPosition = kvp.Value.Position;
302 // DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}",
303 // LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
304 if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
305 {
306 // This contact is within the 'near the feet' range.
307 // The normal should be our contact point to the object so it is pointing away
308 // thus the difference between our facing orientation and the normal should be small.
309 OMV.Vector3 directionFacing = OMV.Vector3.UnitX * RawOrientation;
310 OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
311 float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
312 if (diff < BSParam.AvatarStepApproachFactor)
313 {
314 // Found the stairs contact point. Push up a little to raise the character.
315 float upForce = (touchPosition.Z - nearFeetHeightMin) * Mass * BSParam.AvatarStepForceFactor;
316 ret = new OMV.Vector3(0f, 0f, upForce);
317
318 // Also move the avatar up for the new height
319 OMV.Vector3 displacement = new OMV.Vector3(0f, 0f, BSParam.AvatarStepHeight / 2f);
320 ForcePosition = RawPosition + displacement;
321 }
322 DetailLog("{0},BSCharacter.WalkUpStairs,touchPos={1},nearFeetMin={2},faceDir={3},norm={4},diff={5},ret={6}",
323 LocalID, touchPosition, nearFeetHeightMin, directionFacing, touchNormal, diff, ret);
324 }
325 }
326 }
327 }
328
329 return ret;
330 }
331 179
332 public override void RequestPhysicsterseUpdate() 180 public override void RequestPhysicsterseUpdate()
333 { 181 {
@@ -355,14 +203,14 @@ public sealed class BSCharacter : BSPhysObject
355 DetailLog("{0},BSCharacter.setSize,call,size={1},scale={2},density={3},volume={4},mass={5}", 203 DetailLog("{0},BSCharacter.setSize,call,size={1},scale={2},density={3},volume={4},mass={5}",
356 LocalID, _size, Scale, Density, _avatarVolume, RawMass); 204 LocalID, _size, Scale, Density, _avatarVolume, RawMass);
357 205
358 PhysicsScene.TaintedObject("BSCharacter.setSize", delegate() 206 PhysScene.TaintedObject("BSCharacter.setSize", delegate()
359 { 207 {
360 if (PhysBody.HasPhysicalBody && PhysShape.HasPhysicalShape) 208 if (PhysBody.HasPhysicalBody && PhysShape.physShapeInfo.HasPhysicalShape)
361 { 209 {
362 PhysicsScene.PE.SetLocalScaling(PhysShape, Scale); 210 PhysScene.PE.SetLocalScaling(PhysShape.physShapeInfo, Scale);
363 UpdatePhysicalMassProperties(RawMass, true); 211 UpdatePhysicalMassProperties(RawMass, true);
364 // Make sure this change appears as a property update event 212 // Make sure this change appears as a property update event
365 PhysicsScene.PE.PushUpdate(PhysBody); 213 PhysScene.PE.PushUpdate(PhysBody);
366 } 214 }
367 }); 215 });
368 216
@@ -373,11 +221,6 @@ public sealed class BSCharacter : BSPhysObject
373 { 221 {
374 set { BaseShape = value; } 222 set { BaseShape = value; }
375 } 223 }
376 // I want the physics engine to make an avatar capsule
377 public override BSPhysicsShapeType PreferredPhysicalShape
378 {
379 get {return BSPhysicsShapeType.SHAPE_CAPSULE; }
380 }
381 224
382 public override bool Grabbed { 225 public override bool Grabbed {
383 set { _grabbed = value; } 226 set { _grabbed = value; }
@@ -399,29 +242,29 @@ public sealed class BSCharacter : BSPhysObject
399 // Called at taint time! 242 // Called at taint time!
400 public override void ZeroMotion(bool inTaintTime) 243 public override void ZeroMotion(bool inTaintTime)
401 { 244 {
402 _velocity = OMV.Vector3.Zero; 245 RawVelocity = OMV.Vector3.Zero;
403 _acceleration = OMV.Vector3.Zero; 246 _acceleration = OMV.Vector3.Zero;
404 _rotationalVelocity = OMV.Vector3.Zero; 247 _rotationalVelocity = OMV.Vector3.Zero;
405 248
406 // Zero some other properties directly into the physics engine 249 // Zero some other properties directly into the physics engine
407 PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.ZeroMotion", delegate() 250 PhysScene.TaintedObject(inTaintTime, "BSCharacter.ZeroMotion", delegate()
408 { 251 {
409 if (PhysBody.HasPhysicalBody) 252 if (PhysBody.HasPhysicalBody)
410 PhysicsScene.PE.ClearAllForces(PhysBody); 253 PhysScene.PE.ClearAllForces(PhysBody);
411 }); 254 });
412 } 255 }
413 public override void ZeroAngularMotion(bool inTaintTime) 256 public override void ZeroAngularMotion(bool inTaintTime)
414 { 257 {
415 _rotationalVelocity = OMV.Vector3.Zero; 258 _rotationalVelocity = OMV.Vector3.Zero;
416 259
417 PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.ZeroMotion", delegate() 260 PhysScene.TaintedObject(inTaintTime, "BSCharacter.ZeroMotion", delegate()
418 { 261 {
419 if (PhysBody.HasPhysicalBody) 262 if (PhysBody.HasPhysicalBody)
420 { 263 {
421 PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, OMV.Vector3.Zero); 264 PhysScene.PE.SetInterpolationAngularVelocity(PhysBody, OMV.Vector3.Zero);
422 PhysicsScene.PE.SetAngularVelocity(PhysBody, OMV.Vector3.Zero); 265 PhysScene.PE.SetAngularVelocity(PhysBody, OMV.Vector3.Zero);
423 // The next also get rid of applied linear force but the linear velocity is untouched. 266 // The next also get rid of applied linear force but the linear velocity is untouched.
424 PhysicsScene.PE.ClearForces(PhysBody); 267 PhysScene.PE.ClearForces(PhysBody);
425 } 268 }
426 }); 269 });
427 } 270 }
@@ -443,7 +286,7 @@ public sealed class BSCharacter : BSPhysObject
443 set { 286 set {
444 _position = value; 287 _position = value;
445 288
446 PhysicsScene.TaintedObject("BSCharacter.setPosition", delegate() 289 PhysScene.TaintedObject("BSCharacter.setPosition", delegate()
447 { 290 {
448 DetailLog("{0},BSCharacter.SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation); 291 DetailLog("{0},BSCharacter.SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation);
449 PositionSanityCheck(); 292 PositionSanityCheck();
@@ -453,14 +296,14 @@ public sealed class BSCharacter : BSPhysObject
453 } 296 }
454 public override OMV.Vector3 ForcePosition { 297 public override OMV.Vector3 ForcePosition {
455 get { 298 get {
456 _position = PhysicsScene.PE.GetPosition(PhysBody); 299 _position = PhysScene.PE.GetPosition(PhysBody);
457 return _position; 300 return _position;
458 } 301 }
459 set { 302 set {
460 _position = value; 303 _position = value;
461 if (PhysBody.HasPhysicalBody) 304 if (PhysBody.HasPhysicalBody)
462 { 305 {
463 PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); 306 PhysScene.PE.SetTranslation(PhysBody, _position, _orientation);
464 } 307 }
465 } 308 }
466 } 309 }
@@ -474,18 +317,18 @@ public sealed class BSCharacter : BSPhysObject
474 bool ret = false; 317 bool ret = false;
475 318
476 // TODO: check for out of bounds 319 // TODO: check for out of bounds
477 if (!PhysicsScene.TerrainManager.IsWithinKnownTerrain(RawPosition)) 320 if (!PhysScene.TerrainManager.IsWithinKnownTerrain(RawPosition))
478 { 321 {
479 // The character is out of the known/simulated area. 322 // The character is out of the known/simulated area.
480 // Force the avatar position to be within known. ScenePresence will use the position 323 // Force the avatar position to be within known. ScenePresence will use the position
481 // plus the velocity to decide if the avatar is moving out of the region. 324 // plus the velocity to decide if the avatar is moving out of the region.
482 RawPosition = PhysicsScene.TerrainManager.ClampPositionIntoKnownTerrain(RawPosition); 325 RawPosition = PhysScene.TerrainManager.ClampPositionIntoKnownTerrain(RawPosition);
483 DetailLog("{0},BSCharacter.PositionSanityCheck,notWithinKnownTerrain,clampedPos={1}", LocalID, RawPosition); 326 DetailLog("{0},BSCharacter.PositionSanityCheck,notWithinKnownTerrain,clampedPos={1}", LocalID, RawPosition);
484 return true; 327 return true;
485 } 328 }
486 329
487 // If below the ground, move the avatar up 330 // If below the ground, move the avatar up
488 float terrainHeight = PhysicsScene.TerrainManager.GetTerrainHeightAtXYZ(RawPosition); 331 float terrainHeight = PhysScene.TerrainManager.GetTerrainHeightAtXYZ(RawPosition);
489 if (Position.Z < terrainHeight) 332 if (Position.Z < terrainHeight)
490 { 333 {
491 DetailLog("{0},BSCharacter.PositionSanityCheck,adjustForUnderGround,pos={1},terrain={2}", LocalID, _position, terrainHeight); 334 DetailLog("{0},BSCharacter.PositionSanityCheck,adjustForUnderGround,pos={1},terrain={2}", LocalID, _position, terrainHeight);
@@ -494,7 +337,7 @@ public sealed class BSCharacter : BSPhysObject
494 } 337 }
495 if ((CurrentCollisionFlags & CollisionFlags.BS_FLOATS_ON_WATER) != 0) 338 if ((CurrentCollisionFlags & CollisionFlags.BS_FLOATS_ON_WATER) != 0)
496 { 339 {
497 float waterHeight = PhysicsScene.TerrainManager.GetWaterLevelAtXYZ(_position); 340 float waterHeight = PhysScene.TerrainManager.GetWaterLevelAtXYZ(_position);
498 if (Position.Z < waterHeight) 341 if (Position.Z < waterHeight)
499 { 342 {
500 _position.Z = waterHeight; 343 _position.Z = waterHeight;
@@ -515,7 +358,7 @@ public sealed class BSCharacter : BSPhysObject
515 { 358 {
516 // The new position value must be pushed into the physics engine but we can't 359 // The new position value must be pushed into the physics engine but we can't
517 // just assign to "Position" because of potential call loops. 360 // just assign to "Position" because of potential call loops.
518 PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.PositionSanityCheck", delegate() 361 PhysScene.TaintedObject(inTaintTime, "BSCharacter.PositionSanityCheck", delegate()
519 { 362 {
520 DetailLog("{0},BSCharacter.PositionSanityCheck,taint,pos={1},orient={2}", LocalID, _position, _orientation); 363 DetailLog("{0},BSCharacter.PositionSanityCheck,taint,pos={1},orient={2}", LocalID, _position, _orientation);
521 ForcePosition = _position; 364 ForcePosition = _position;
@@ -528,25 +371,25 @@ public sealed class BSCharacter : BSPhysObject
528 public override float Mass { get { return _mass; } } 371 public override float Mass { get { return _mass; } }
529 372
530 // used when we only want this prim's mass and not the linkset thing 373 // used when we only want this prim's mass and not the linkset thing
531 public override float RawMass { 374 public override float RawMass {
532 get {return _mass; } 375 get {return _mass; }
533 } 376 }
534 public override void UpdatePhysicalMassProperties(float physMass, bool inWorld) 377 public override void UpdatePhysicalMassProperties(float physMass, bool inWorld)
535 { 378 {
536 OMV.Vector3 localInertia = PhysicsScene.PE.CalculateLocalInertia(PhysShape, physMass); 379 OMV.Vector3 localInertia = PhysScene.PE.CalculateLocalInertia(PhysShape.physShapeInfo, physMass);
537 PhysicsScene.PE.SetMassProps(PhysBody, physMass, localInertia); 380 PhysScene.PE.SetMassProps(PhysBody, physMass, localInertia);
538 } 381 }
539 382
540 public override OMV.Vector3 Force { 383 public override OMV.Vector3 Force {
541 get { return _force; } 384 get { return RawForce; }
542 set { 385 set {
543 _force = value; 386 RawForce = value;
544 // m_log.DebugFormat("{0}: Force = {1}", LogHeader, _force); 387 // m_log.DebugFormat("{0}: Force = {1}", LogHeader, _force);
545 PhysicsScene.TaintedObject("BSCharacter.SetForce", delegate() 388 PhysScene.TaintedObject("BSCharacter.SetForce", delegate()
546 { 389 {
547 DetailLog("{0},BSCharacter.setForce,taint,force={1}", LocalID, _force); 390 DetailLog("{0},BSCharacter.setForce,taint,force={1}", LocalID, RawForce);
548 if (PhysBody.HasPhysicalBody) 391 if (PhysBody.HasPhysicalBody)
549 PhysicsScene.PE.SetObjectForce(PhysBody, _force); 392 PhysScene.PE.SetObjectForce(PhysBody, RawForce);
550 }); 393 });
551 } 394 }
552 } 395 }
@@ -569,61 +412,49 @@ public sealed class BSCharacter : BSPhysObject
569 { 412 {
570 get 413 get
571 { 414 {
572 return m_targetVelocity; 415 return base.m_targetVelocity;
573 } 416 }
574 set 417 set
575 { 418 {
576 DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value); 419 DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value);
577 m_targetVelocity = value; 420 m_targetVelocity = value;
578 OMV.Vector3 targetVel = value; 421 OMV.Vector3 targetVel = value;
579 if (_setAlwaysRun) 422 if (_setAlwaysRun && !_flying)
580 targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 0f); 423 targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 0f);
581 424
582 PhysicsScene.TaintedObject("BSCharacter.setTargetVelocity", delegate() 425 if (m_moveActor != null)
583 { 426 m_moveActor.SetVelocityAndTarget(RawVelocity, targetVel, false /* inTaintTime */);
584 _velocityMotor.Reset();
585 _velocityMotor.SetTarget(targetVel);
586 _velocityMotor.SetCurrent(_velocity);
587 _velocityMotor.Enabled = true;
588 });
589 } 427 }
590 } 428 }
591 public override OMV.Vector3 RawVelocity
592 {
593 get { return _velocity; }
594 set { _velocity = value; }
595 }
596 // Directly setting velocity means this is what the user really wants now. 429 // Directly setting velocity means this is what the user really wants now.
597 public override OMV.Vector3 Velocity { 430 public override OMV.Vector3 Velocity {
598 get { return _velocity; } 431 get { return RawVelocity; }
599 set { 432 set {
600 _velocity = value; 433 RawVelocity = value;
601 // m_log.DebugFormat("{0}: set velocity = {1}", LogHeader, _velocity); 434 // m_log.DebugFormat("{0}: set velocity = {1}", LogHeader, RawVelocity);
602 PhysicsScene.TaintedObject("BSCharacter.setVelocity", delegate() 435 PhysScene.TaintedObject("BSCharacter.setVelocity", delegate()
603 { 436 {
604 _velocityMotor.Reset(); 437 if (m_moveActor != null)
605 _velocityMotor.SetCurrent(_velocity); 438 m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, true /* inTaintTime */);
606 _velocityMotor.SetTarget(_velocity);
607 _velocityMotor.Enabled = false;
608 439
609 DetailLog("{0},BSCharacter.setVelocity,taint,vel={1}", LocalID, _velocity); 440 DetailLog("{0},BSCharacter.setVelocity,taint,vel={1}", LocalID, RawVelocity);
610 ForceVelocity = _velocity; 441 ForceVelocity = RawVelocity;
611 }); 442 });
612 } 443 }
613 } 444 }
614 public override OMV.Vector3 ForceVelocity { 445 public override OMV.Vector3 ForceVelocity {
615 get { return _velocity; } 446 get { return RawVelocity; }
616 set { 447 set {
617 PhysicsScene.AssertInTaintTime("BSCharacter.ForceVelocity"); 448 PhysScene.AssertInTaintTime("BSCharacter.ForceVelocity");
618 449
619 _velocity = value; 450 RawVelocity = value;
620 PhysicsScene.PE.SetLinearVelocity(PhysBody, _velocity); 451 PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity);
621 PhysicsScene.PE.Activate(PhysBody, true); 452 PhysScene.PE.Activate(PhysBody, true);
622 } 453 }
623 } 454 }
624 public override OMV.Vector3 Torque { 455 public override OMV.Vector3 Torque {
625 get { return _torque; } 456 get { return RawTorque; }
626 set { _torque = value; 457 set { RawTorque = value;
627 } 458 }
628 } 459 }
629 public override float CollisionScore { 460 public override float CollisionScore {
@@ -648,9 +479,19 @@ public sealed class BSCharacter : BSPhysObject
648 if (_orientation != value) 479 if (_orientation != value)
649 { 480 {
650 _orientation = value; 481 _orientation = value;
651 PhysicsScene.TaintedObject("BSCharacter.setOrientation", delegate() 482 PhysScene.TaintedObject("BSCharacter.setOrientation", delegate()
652 { 483 {
653 ForceOrientation = _orientation; 484 // Bullet assumes we know what we are doing when forcing orientation
485 // so it lets us go against all the rules and just compensates for them later.
486 // This forces rotation to be only around the Z axis and doesn't change any of the other axis.
487 // This keeps us from flipping the capsule over which the veiwer does not understand.
488 float oRoll, oPitch, oYaw;
489 _orientation.GetEulerAngles(out oRoll, out oPitch, out oYaw);
490 OMV.Quaternion trimmedOrientation = OMV.Quaternion.CreateFromEulers(0f, 0f, oYaw);
491 // DetailLog("{0},BSCharacter.setOrientation,taint,val={1},valDir={2},conv={3},convDir={4}",
492 // LocalID, _orientation, OMV.Vector3.UnitX * _orientation,
493 // trimmedOrientation, OMV.Vector3.UnitX * trimmedOrientation);
494 ForceOrientation = trimmedOrientation;
654 }); 495 });
655 } 496 }
656 } 497 }
@@ -660,7 +501,7 @@ public sealed class BSCharacter : BSPhysObject
660 { 501 {
661 get 502 get
662 { 503 {
663 _orientation = PhysicsScene.PE.GetOrientation(PhysBody); 504 _orientation = PhysScene.PE.GetOrientation(PhysBody);
664 return _orientation; 505 return _orientation;
665 } 506 }
666 set 507 set
@@ -669,7 +510,7 @@ public sealed class BSCharacter : BSPhysObject
669 if (PhysBody.HasPhysicalBody) 510 if (PhysBody.HasPhysicalBody)
670 { 511 {
671 // _position = PhysicsScene.PE.GetPosition(BSBody); 512 // _position = PhysicsScene.PE.GetPosition(BSBody);
672 PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); 513 PhysScene.PE.SetTranslation(PhysBody, _position, _orientation);
673 } 514 }
674 } 515 }
675 } 516 }
@@ -718,14 +559,14 @@ public sealed class BSCharacter : BSPhysObject
718 public override bool FloatOnWater { 559 public override bool FloatOnWater {
719 set { 560 set {
720 _floatOnWater = value; 561 _floatOnWater = value;
721 PhysicsScene.TaintedObject("BSCharacter.setFloatOnWater", delegate() 562 PhysScene.TaintedObject("BSCharacter.setFloatOnWater", delegate()
722 { 563 {
723 if (PhysBody.HasPhysicalBody) 564 if (PhysBody.HasPhysicalBody)
724 { 565 {
725 if (_floatOnWater) 566 if (_floatOnWater)
726 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); 567 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER);
727 else 568 else
728 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); 569 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER);
729 } 570 }
730 }); 571 });
731 } 572 }
@@ -746,7 +587,7 @@ public sealed class BSCharacter : BSPhysObject
746 public override float Buoyancy { 587 public override float Buoyancy {
747 get { return _buoyancy; } 588 get { return _buoyancy; }
748 set { _buoyancy = value; 589 set { _buoyancy = value;
749 PhysicsScene.TaintedObject("BSCharacter.setBuoyancy", delegate() 590 PhysScene.TaintedObject("BSCharacter.setBuoyancy", delegate()
750 { 591 {
751 DetailLog("{0},BSCharacter.setBuoyancy,taint,buoy={1}", LocalID, _buoyancy); 592 DetailLog("{0},BSCharacter.setBuoyancy,taint,buoy={1}", LocalID, _buoyancy);
752 ForceBuoyancy = _buoyancy; 593 ForceBuoyancy = _buoyancy;
@@ -755,8 +596,8 @@ public sealed class BSCharacter : BSPhysObject
755 } 596 }
756 public override float ForceBuoyancy { 597 public override float ForceBuoyancy {
757 get { return _buoyancy; } 598 get { return _buoyancy; }
758 set { 599 set {
759 PhysicsScene.AssertInTaintTime("BSCharacter.ForceBuoyancy"); 600 PhysScene.AssertInTaintTime("BSCharacter.ForceBuoyancy");
760 601
761 _buoyancy = value; 602 _buoyancy = value;
762 DetailLog("{0},BSCharacter.setForceBuoyancy,taint,buoy={1}", LocalID, _buoyancy); 603 DetailLog("{0},BSCharacter.setForceBuoyancy,taint,buoy={1}", LocalID, _buoyancy);
@@ -764,7 +605,7 @@ public sealed class BSCharacter : BSPhysObject
764 float grav = BSParam.Gravity * (1f - _buoyancy); 605 float grav = BSParam.Gravity * (1f - _buoyancy);
765 Gravity = new OMV.Vector3(0f, 0f, grav); 606 Gravity = new OMV.Vector3(0f, 0f, grav);
766 if (PhysBody.HasPhysicalBody) 607 if (PhysBody.HasPhysicalBody)
767 PhysicsScene.PE.SetGravity(PhysBody, Gravity); 608 PhysScene.PE.SetGravity(PhysBody, Gravity);
768 } 609 }
769 } 610 }
770 611
@@ -779,31 +620,10 @@ public sealed class BSCharacter : BSPhysObject
779 set { _PIDTau = value; } 620 set { _PIDTau = value; }
780 } 621 }
781 622
782 // Used for llSetHoverHeight and maybe vehicle height
783 // Hover Height will override MoveTo target's Z
784 public override bool PIDHoverActive {
785 set { _useHoverPID = value; }
786 }
787 public override float PIDHoverHeight {
788 set { _PIDHoverHeight = value; }
789 }
790 public override PIDHoverType PIDHoverType {
791 set { _PIDHoverType = value; }
792 }
793 public override float PIDHoverTau {
794 set { _PIDHoverTao = value; }
795 }
796
797 // For RotLookAt
798 public override OMV.Quaternion APIDTarget { set { return; } }
799 public override bool APIDActive { set { return; } }
800 public override float APIDStrength { set { return; } }
801 public override float APIDDamping { set { return; } }
802
803 public override void AddForce(OMV.Vector3 force, bool pushforce) 623 public override void AddForce(OMV.Vector3 force, bool pushforce)
804 { 624 {
805 // Since this force is being applied in only one step, make this a force per second. 625 // Since this force is being applied in only one step, make this a force per second.
806 OMV.Vector3 addForce = force / PhysicsScene.LastTimeStep; 626 OMV.Vector3 addForce = force / PhysScene.LastTimeStep;
807 AddForce(addForce, pushforce, false); 627 AddForce(addForce, pushforce, false);
808 } 628 }
809 private void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { 629 private void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) {
@@ -812,13 +632,13 @@ public sealed class BSCharacter : BSPhysObject
812 OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); 632 OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude);
813 // DetailLog("{0},BSCharacter.addForce,call,force={1}", LocalID, addForce); 633 // DetailLog("{0},BSCharacter.addForce,call,force={1}", LocalID, addForce);
814 634
815 PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.AddForce", delegate() 635 PhysScene.TaintedObject(inTaintTime, "BSCharacter.AddForce", delegate()
816 { 636 {
817 // Bullet adds this central force to the total force for this tick 637 // Bullet adds this central force to the total force for this tick
818 // DetailLog("{0},BSCharacter.addForce,taint,force={1}", LocalID, addForce); 638 // DetailLog("{0},BSCharacter.addForce,taint,force={1}", LocalID, addForce);
819 if (PhysBody.HasPhysicalBody) 639 if (PhysBody.HasPhysicalBody)
820 { 640 {
821 PhysicsScene.PE.ApplyCentralForce(PhysBody, addForce); 641 PhysScene.PE.ApplyCentralForce(PhysBody, addForce);
822 } 642 }
823 }); 643 });
824 } 644 }
@@ -829,7 +649,7 @@ public sealed class BSCharacter : BSPhysObject
829 } 649 }
830 } 650 }
831 651
832 public override void AddAngularForce(OMV.Vector3 force, bool pushforce) { 652 public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) {
833 } 653 }
834 public override void SetMomentum(OMV.Vector3 momentum) { 654 public override void SetMomentum(OMV.Vector3 momentum) {
835 } 655 }
@@ -837,14 +657,14 @@ public sealed class BSCharacter : BSPhysObject
837 private OMV.Vector3 ComputeAvatarScale(OMV.Vector3 size) 657 private OMV.Vector3 ComputeAvatarScale(OMV.Vector3 size)
838 { 658 {
839 OMV.Vector3 newScale; 659 OMV.Vector3 newScale;
840 660
841 // Bullet's capsule total height is the "passed height + radius * 2"; 661 // Bullet's capsule total height is the "passed height + radius * 2";
842 // The base capsule is 1 diameter and 2 height (passed radius=0.5, passed height = 1) 662 // The base capsule is 1 unit in diameter and 2 units in height (passed radius=0.5, passed height = 1)
843 // The number we pass in for 'scaling' is the multiplier to get that base 663 // The number we pass in for 'scaling' is the multiplier to get that base
844 // shape to be the size desired. 664 // shape to be the size desired.
845 // So, when creating the scale for the avatar height, we take the passed height 665 // So, when creating the scale for the avatar height, we take the passed height
846 // (size.Z) and remove the caps. 666 // (size.Z) and remove the caps.
847 // Another oddity of the Bullet capsule implementation is that it presumes the Y 667 // An oddity of the Bullet capsule implementation is that it presumes the Y
848 // dimension is the radius of the capsule. Even though some of the code allows 668 // dimension is the radius of the capsule. Even though some of the code allows
849 // for a asymmetrical capsule, other parts of the code presume it is cylindrical. 669 // for a asymmetrical capsule, other parts of the code presume it is cylindrical.
850 670
@@ -852,8 +672,27 @@ public sealed class BSCharacter : BSPhysObject
852 newScale.X = size.X / 2f; 672 newScale.X = size.X / 2f;
853 newScale.Y = size.Y / 2f; 673 newScale.Y = size.Y / 2f;
854 674
675 float heightAdjust = BSParam.AvatarHeightMidFudge;
676 if (BSParam.AvatarHeightLowFudge != 0f || BSParam.AvatarHeightHighFudge != 0f)
677 {
678 // An avatar is between 1.61 and 2.12 meters. Midpoint is 1.87m.
679 // The "times 4" relies on the fact that the difference from the midpoint to the extremes is exactly 0.25
680 float midHeightOffset = size.Z - 1.87f;
681 if (midHeightOffset < 0f)
682 {
683 // Small avatar. Add the adjustment based on the distance from midheight
684 heightAdjust += -1f * midHeightOffset * 4f * BSParam.AvatarHeightLowFudge;
685 }
686 else
687 {
688 // Large avatar. Add the adjustment based on the distance from midheight
689 heightAdjust += midHeightOffset * 4f * BSParam.AvatarHeightHighFudge;
690 }
691 }
855 // The total scale height is the central cylindar plus the caps on the two ends. 692 // The total scale height is the central cylindar plus the caps on the two ends.
856 newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2)) / 2f; 693 newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2) + heightAdjust) / 2f;
694 // m_log.DebugFormat("{0} ComputeAvatarScale: size={1},adj={2},scale={3}", LogHeader, size, heightAdjust, newScale);
695
857 // If smaller than the endcaps, just fake like we're almost that small 696 // If smaller than the endcaps, just fake like we're almost that small
858 if (newScale.Z < 0) 697 if (newScale.Z < 0)
859 newScale.Z = 0.1f; 698 newScale.Z = 0.1f;
@@ -882,15 +721,18 @@ public sealed class BSCharacter : BSPhysObject
882 // the world that things have changed. 721 // the world that things have changed.
883 public override void UpdateProperties(EntityProperties entprop) 722 public override void UpdateProperties(EntityProperties entprop)
884 { 723 {
885 _position = entprop.Position; 724 // Don't change position if standing on a stationary object.
725 if (!IsStationary)
726 _position = entprop.Position;
727
886 _orientation = entprop.Rotation; 728 _orientation = entprop.Rotation;
887 729
888 // Smooth velocity. OpenSimulator is VERY sensitive to changes in velocity of the avatar 730 // Smooth velocity. OpenSimulator is VERY sensitive to changes in velocity of the avatar
889 // and will send agent updates to the clients if velocity changes by more than 731 // and will send agent updates to the clients if velocity changes by more than
890 // 0.001m/s. Bullet introduces a lot of jitter in the velocity which causes many 732 // 0.001m/s. Bullet introduces a lot of jitter in the velocity which causes many
891 // extra updates. 733 // extra updates.
892 if (!entprop.Velocity.ApproxEquals(_velocity, 0.1f)) 734 if (!entprop.Velocity.ApproxEquals(RawVelocity, 0.1f))
893 _velocity = entprop.Velocity; 735 RawVelocity = entprop.Velocity;
894 736
895 _acceleration = entprop.Acceleration; 737 _acceleration = entprop.Acceleration;
896 _rotationalVelocity = entprop.RotationalVelocity; 738 _rotationalVelocity = entprop.RotationalVelocity;
@@ -913,7 +755,7 @@ public sealed class BSCharacter : BSPhysObject
913 // base.RequestPhysicsterseUpdate(); 755 // base.RequestPhysicsterseUpdate();
914 756
915 DetailLog("{0},BSCharacter.UpdateProperties,call,pos={1},orient={2},vel={3},accel={4},rotVel={5}", 757 DetailLog("{0},BSCharacter.UpdateProperties,call,pos={1},orient={2},vel={3},accel={4},rotVel={5}",
916 LocalID, _position, _orientation, _velocity, _acceleration, _rotationalVelocity); 758 LocalID, _position, _orientation, RawVelocity, _acceleration, _rotationalVelocity);
917 } 759 }
918} 760}
919} 761}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs
index b813974..42b5c49 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs
@@ -85,7 +85,9 @@ public abstract class BSConstraint : IDisposable
85 { 85 {
86 bool ret = false; 86 bool ret = false;
87 if (m_enabled) 87 if (m_enabled)
88 {
88 ret = PhysicsScene.PE.SetAngularLimits(m_constraint, low, high); 89 ret = PhysicsScene.PE.SetAngularLimits(m_constraint, low, high);
90 }
89 return ret; 91 return ret;
90 } 92 }
91 93
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs
index 476a0e5..d0949f5 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs
@@ -97,14 +97,14 @@ public sealed class BSConstraint6Dof : BSConstraint
97 97
98 // A 6 Dof constraint that is fixed in the world and constrained to a on-the-fly created static object 98 // A 6 Dof constraint that is fixed in the world and constrained to a on-the-fly created static object
99 public BSConstraint6Dof(BulletWorld world, BulletBody obj1, Vector3 frameInBloc, Quaternion frameInBrot, 99 public BSConstraint6Dof(BulletWorld world, BulletBody obj1, Vector3 frameInBloc, Quaternion frameInBrot,
100 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies) 100 bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies)
101 : base(world) 101 : base(world)
102 { 102 {
103 m_body1 = obj1; 103 m_body1 = obj1;
104 m_body2 = obj1; // Look out for confusion down the road 104 m_body2 = obj1; // Look out for confusion down the road
105 m_constraint = PhysicsScene.PE.Create6DofConstraintFixed(m_world, m_body1, 105 m_constraint = PhysicsScene.PE.Create6DofConstraintFixed(m_world, m_body1,
106 frameInBloc, frameInBrot, 106 frameInBloc, frameInBrot,
107 useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies); 107 useLinearReferenceFrameB, disableCollisionsBetweenLinkedBodies);
108 m_enabled = true; 108 m_enabled = true;
109 world.physicsScene.DetailLog("{0},BS6DofConstraint,createFixed,wID={1},rID={2},rBody={3}", 109 world.physicsScene.DetailLog("{0},BS6DofConstraint,createFixed,wID={1},rID={2},rBody={3}",
110 BSScene.DetailLogZero, world.worldID, obj1.ID, obj1.AddrString); 110 BSScene.DetailLogZero, world.worldID, obj1.ID, obj1.AddrString);
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraintHinge.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraintHinge.cs
index 7714a03..ed89f63 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraintHinge.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraintHinge.cs
@@ -45,7 +45,7 @@ public sealed class BSConstraintHinge : BSConstraint
45 m_body1 = obj1; 45 m_body1 = obj1;
46 m_body2 = obj2; 46 m_body2 = obj2;
47 m_constraint = PhysicsScene.PE.CreateHingeConstraint(world, obj1, obj2, 47 m_constraint = PhysicsScene.PE.CreateHingeConstraint(world, obj1, obj2,
48 pivotInA, pivotInB, axisInA, axisInB, 48 pivotInA, pivotInB, axisInA, axisInB,
49 useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies); 49 useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
50 m_enabled = true; 50 m_enabled = true;
51 } 51 }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index 65df741..311cf4f 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -40,13 +40,14 @@ using OpenSim.Region.Physics.Manager;
40 40
41namespace OpenSim.Region.Physics.BulletSPlugin 41namespace OpenSim.Region.Physics.BulletSPlugin
42{ 42{
43 public sealed class BSDynamics 43 public sealed class BSDynamics : BSActor
44 { 44 {
45 private static string LogHeader = "[BULLETSIM VEHICLE]"; 45 private static string LogHeader = "[BULLETSIM VEHICLE]";
46 46
47 private BSScene PhysicsScene { get; set; }
48 // the prim this dynamic controller belongs to 47 // the prim this dynamic controller belongs to
49 private BSPrim Prim { get; set; } 48 private BSPrim ControllingPrim { get; set; }
49
50 private bool m_haveRegisteredForSceneEvents;
50 51
51 // mass of the vehicle fetched each time we're calles 52 // mass of the vehicle fetched each time we're calles
52 private float m_vehicleMass; 53 private float m_vehicleMass;
@@ -129,11 +130,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
129 public bool enableAngularDeflection; 130 public bool enableAngularDeflection;
130 public bool enableAngularBanking; 131 public bool enableAngularBanking;
131 132
132 public BSDynamics(BSScene myScene, BSPrim myPrim) 133 public BSDynamics(BSScene myScene, BSPrim myPrim, string actorName)
134 : base(myScene, myPrim, actorName)
133 { 135 {
134 PhysicsScene = myScene; 136 ControllingPrim = myPrim;
135 Prim = myPrim;
136 Type = Vehicle.TYPE_NONE; 137 Type = Vehicle.TYPE_NONE;
138 m_haveRegisteredForSceneEvents = false;
137 SetupVehicleDebugging(); 139 SetupVehicleDebugging();
138 } 140 }
139 141
@@ -144,7 +146,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
144 enableAngularVerticalAttraction = true; 146 enableAngularVerticalAttraction = true;
145 enableAngularDeflection = false; 147 enableAngularDeflection = false;
146 enableAngularBanking = true; 148 enableAngularBanking = true;
147 if (BSParam.VehicleDebuggingEnabled) 149 if (BSParam.VehicleDebuggingEnable)
148 { 150 {
149 enableAngularVerticalAttraction = true; 151 enableAngularVerticalAttraction = true;
150 enableAngularDeflection = false; 152 enableAngularDeflection = false;
@@ -155,7 +157,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
155 // Return 'true' if this vehicle is doing vehicle things 157 // Return 'true' if this vehicle is doing vehicle things
156 public bool IsActive 158 public bool IsActive
157 { 159 {
158 get { return (Type != Vehicle.TYPE_NONE && Prim.IsPhysicallyActive); } 160 get { return (Type != Vehicle.TYPE_NONE && ControllingPrim.IsPhysicallyActive); }
159 } 161 }
160 162
161 // Return 'true' if this a vehicle that should be sitting on the ground 163 // Return 'true' if this a vehicle that should be sitting on the ground
@@ -167,7 +169,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
167 #region Vehicle parameter setting 169 #region Vehicle parameter setting
168 public void ProcessFloatVehicleParam(Vehicle pParam, float pValue) 170 public void ProcessFloatVehicleParam(Vehicle pParam, float pValue)
169 { 171 {
170 VDetailLog("{0},ProcessFloatVehicleParam,param={1},val={2}", Prim.LocalID, pParam, pValue); 172 VDetailLog("{0},ProcessFloatVehicleParam,param={1},val={2}", ControllingPrim.LocalID, pParam, pValue);
171 switch (pParam) 173 switch (pParam)
172 { 174 {
173 case Vehicle.ANGULAR_DEFLECTION_EFFICIENCY: 175 case Vehicle.ANGULAR_DEFLECTION_EFFICIENCY:
@@ -195,7 +197,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
195 break; 197 break;
196 case Vehicle.BUOYANCY: 198 case Vehicle.BUOYANCY:
197 m_VehicleBuoyancy = ClampInRange(-1f, pValue, 1f); 199 m_VehicleBuoyancy = ClampInRange(-1f, pValue, 1f);
198 m_VehicleGravity = Prim.ComputeGravity(m_VehicleBuoyancy); 200 m_VehicleGravity = ControllingPrim.ComputeGravity(m_VehicleBuoyancy);
199 break; 201 break;
200 case Vehicle.HOVER_EFFICIENCY: 202 case Vehicle.HOVER_EFFICIENCY:
201 m_VhoverEfficiency = ClampInRange(0f, pValue, 1f); 203 m_VhoverEfficiency = ClampInRange(0f, pValue, 1f);
@@ -233,7 +235,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin
233 // set all of the components to the same value 235 // set all of the components to the same value
234 case Vehicle.ANGULAR_FRICTION_TIMESCALE: 236 case Vehicle.ANGULAR_FRICTION_TIMESCALE:
235 m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue); 237 m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue);
236 m_angularMotor.FrictionTimescale = m_angularFrictionTimescale;
237 break; 238 break;
238 case Vehicle.ANGULAR_MOTOR_DIRECTION: 239 case Vehicle.ANGULAR_MOTOR_DIRECTION:
239 m_angularMotorDirection = new Vector3(pValue, pValue, pValue); 240 m_angularMotorDirection = new Vector3(pValue, pValue, pValue);
@@ -242,7 +243,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin
242 break; 243 break;
243 case Vehicle.LINEAR_FRICTION_TIMESCALE: 244 case Vehicle.LINEAR_FRICTION_TIMESCALE:
244 m_linearFrictionTimescale = new Vector3(pValue, pValue, pValue); 245 m_linearFrictionTimescale = new Vector3(pValue, pValue, pValue);
245 m_linearMotor.FrictionTimescale = m_linearFrictionTimescale;
246 break; 246 break;
247 case Vehicle.LINEAR_MOTOR_DIRECTION: 247 case Vehicle.LINEAR_MOTOR_DIRECTION:
248 m_linearMotorDirection = new Vector3(pValue, pValue, pValue); 248 m_linearMotorDirection = new Vector3(pValue, pValue, pValue);
@@ -258,12 +258,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
258 258
259 internal void ProcessVectorVehicleParam(Vehicle pParam, Vector3 pValue) 259 internal void ProcessVectorVehicleParam(Vehicle pParam, Vector3 pValue)
260 { 260 {
261 VDetailLog("{0},ProcessVectorVehicleParam,param={1},val={2}", Prim.LocalID, pParam, pValue); 261 VDetailLog("{0},ProcessVectorVehicleParam,param={1},val={2}", ControllingPrim.LocalID, pParam, pValue);
262 switch (pParam) 262 switch (pParam)
263 { 263 {
264 case Vehicle.ANGULAR_FRICTION_TIMESCALE: 264 case Vehicle.ANGULAR_FRICTION_TIMESCALE:
265 m_angularFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); 265 m_angularFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z);
266 m_angularMotor.FrictionTimescale = m_angularFrictionTimescale;
267 break; 266 break;
268 case Vehicle.ANGULAR_MOTOR_DIRECTION: 267 case Vehicle.ANGULAR_MOTOR_DIRECTION:
269 // Limit requested angular speed to 2 rps= 4 pi rads/sec 268 // Limit requested angular speed to 2 rps= 4 pi rads/sec
@@ -276,7 +275,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin
276 break; 275 break;
277 case Vehicle.LINEAR_FRICTION_TIMESCALE: 276 case Vehicle.LINEAR_FRICTION_TIMESCALE:
278 m_linearFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); 277 m_linearFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z);
279 m_linearMotor.FrictionTimescale = m_linearFrictionTimescale;
280 break; 278 break;
281 case Vehicle.LINEAR_MOTOR_DIRECTION: 279 case Vehicle.LINEAR_MOTOR_DIRECTION:
282 m_linearMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z); 280 m_linearMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z);
@@ -294,7 +292,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
294 292
295 internal void ProcessRotationVehicleParam(Vehicle pParam, Quaternion pValue) 293 internal void ProcessRotationVehicleParam(Vehicle pParam, Quaternion pValue)
296 { 294 {
297 VDetailLog("{0},ProcessRotationalVehicleParam,param={1},val={2}", Prim.LocalID, pParam, pValue); 295 VDetailLog("{0},ProcessRotationalVehicleParam,param={1},val={2}", ControllingPrim.LocalID, pParam, pValue);
298 switch (pParam) 296 switch (pParam)
299 { 297 {
300 case Vehicle.REFERENCE_FRAME: 298 case Vehicle.REFERENCE_FRAME:
@@ -308,7 +306,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
308 306
309 internal void ProcessVehicleFlags(int pParam, bool remove) 307 internal void ProcessVehicleFlags(int pParam, bool remove)
310 { 308 {
311 VDetailLog("{0},ProcessVehicleFlags,param={1},remove={2}", Prim.LocalID, pParam, remove); 309 VDetailLog("{0},ProcessVehicleFlags,param={1},remove={2}", ControllingPrim.LocalID, pParam, remove);
312 VehicleFlag parm = (VehicleFlag)pParam; 310 VehicleFlag parm = (VehicleFlag)pParam;
313 if (pParam == -1) 311 if (pParam == -1)
314 m_flags = (VehicleFlag)0; 312 m_flags = (VehicleFlag)0;
@@ -323,7 +321,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
323 321
324 public void ProcessTypeChange(Vehicle pType) 322 public void ProcessTypeChange(Vehicle pType)
325 { 323 {
326 VDetailLog("{0},ProcessTypeChange,type={1}", Prim.LocalID, pType); 324 VDetailLog("{0},ProcessTypeChange,type={1}", ControllingPrim.LocalID, pType);
327 // Set Defaults For Type 325 // Set Defaults For Type
328 Type = pType; 326 Type = pType;
329 switch (pType) 327 switch (pType)
@@ -557,34 +555,40 @@ namespace OpenSim.Region.Physics.BulletSPlugin
557 break; 555 break;
558 } 556 }
559 557
560 // Update any physical parameters based on this type. 558 m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f);
561 Refresh(); 559 m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
562
563 m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale,
564 m_linearMotorDecayTimescale, m_linearFrictionTimescale,
565 1f);
566 m_linearMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
567 560
568 m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, 561 m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f);
569 m_angularMotorDecayTimescale, m_angularFrictionTimescale, 562 m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
570 1f);
571 m_angularMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
572 563
573 /* Not implemented 564 /* Not implemented
574 m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale, 565 m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
575 BSMotor.Infinite, BSMotor.InfiniteVector, 566 BSMotor.Infinite, BSMotor.InfiniteVector,
576 m_verticalAttractionEfficiency); 567 m_verticalAttractionEfficiency);
577 // Z goes away and we keep X and Y 568 // Z goes away and we keep X and Y
578 m_verticalAttractionMotor.FrictionTimescale = new Vector3(BSMotor.Infinite, BSMotor.Infinite, 0.1f);
579 m_verticalAttractionMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging) 569 m_verticalAttractionMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
580 */ 570 */
571
572 if (this.Type == Vehicle.TYPE_NONE)
573 {
574 UnregisterForSceneEvents();
575 }
576 else
577 {
578 RegisterForSceneEvents();
579 }
580
581 // Update any physical parameters based on this type.
582 Refresh();
581 } 583 }
582 #endregion // Vehicle parameter setting 584 #endregion // Vehicle parameter setting
583 585
584 public void Refresh() 586 // BSActor.Refresh()
587 public override void Refresh()
585 { 588 {
586 // If asking for a refresh, reset the physical parameters before the next simulation step. 589 // If asking for a refresh, reset the physical parameters before the next simulation step.
587 PhysicsScene.PostTaintObject("BSDynamics.Refresh", Prim.LocalID, delegate() 590 // Called whether active or not since the active state may be updated before the next step.
591 m_physicsScene.PostTaintObject("BSDynamics.Refresh", ControllingPrim.LocalID, delegate()
588 { 592 {
589 SetPhysicalParameters(); 593 SetPhysicalParameters();
590 }); 594 });
@@ -597,49 +601,91 @@ namespace OpenSim.Region.Physics.BulletSPlugin
597 if (IsActive) 601 if (IsActive)
598 { 602 {
599 // Remember the mass so we don't have to fetch it every step 603 // Remember the mass so we don't have to fetch it every step
600 m_vehicleMass = Prim.TotalMass; 604 m_vehicleMass = ControllingPrim.TotalMass;
601 605
602 // Friction affects are handled by this vehicle code 606 // Friction affects are handled by this vehicle code
603 PhysicsScene.PE.SetFriction(Prim.PhysBody, BSParam.VehicleFriction); 607 m_physicsScene.PE.SetFriction(ControllingPrim.PhysBody, BSParam.VehicleFriction);
604 PhysicsScene.PE.SetRestitution(Prim.PhysBody, BSParam.VehicleRestitution); 608 m_physicsScene.PE.SetRestitution(ControllingPrim.PhysBody, BSParam.VehicleRestitution);
605 609
606 // Moderate angular movement introduced by Bullet. 610 // Moderate angular movement introduced by Bullet.
607 // TODO: possibly set AngularFactor and LinearFactor for the type of vehicle. 611 // TODO: possibly set AngularFactor and LinearFactor for the type of vehicle.
608 // Maybe compute linear and angular factor and damping from params. 612 // Maybe compute linear and angular factor and damping from params.
609 PhysicsScene.PE.SetAngularDamping(Prim.PhysBody, BSParam.VehicleAngularDamping); 613 m_physicsScene.PE.SetAngularDamping(ControllingPrim.PhysBody, BSParam.VehicleAngularDamping);
610 PhysicsScene.PE.SetLinearFactor(Prim.PhysBody, BSParam.VehicleLinearFactor); 614 m_physicsScene.PE.SetLinearFactor(ControllingPrim.PhysBody, BSParam.VehicleLinearFactor);
611 PhysicsScene.PE.SetAngularFactorV(Prim.PhysBody, BSParam.VehicleAngularFactor); 615 m_physicsScene.PE.SetAngularFactorV(ControllingPrim.PhysBody, BSParam.VehicleAngularFactor);
612 616
613 // Vehicles report collision events so we know when it's on the ground 617 // Vehicles report collision events so we know when it's on the ground
614 PhysicsScene.PE.AddToCollisionFlags(Prim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS); 618 m_physicsScene.PE.AddToCollisionFlags(ControllingPrim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS);
615 619
616 Prim.Inertia = PhysicsScene.PE.CalculateLocalInertia(Prim.PhysShape, m_vehicleMass); 620 Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(ControllingPrim.PhysShape.physShapeInfo, m_vehicleMass);
617 PhysicsScene.PE.SetMassProps(Prim.PhysBody, m_vehicleMass, Prim.Inertia); 621 ControllingPrim.Inertia = inertia * BSParam.VehicleInertiaFactor;
618 PhysicsScene.PE.UpdateInertiaTensor(Prim.PhysBody); 622 m_physicsScene.PE.SetMassProps(ControllingPrim.PhysBody, m_vehicleMass, ControllingPrim.Inertia);
623 m_physicsScene.PE.UpdateInertiaTensor(ControllingPrim.PhysBody);
619 624
620 // Set the gravity for the vehicle depending on the buoyancy 625 // Set the gravity for the vehicle depending on the buoyancy
621 // TODO: what should be done if prim and vehicle buoyancy differ? 626 // TODO: what should be done if prim and vehicle buoyancy differ?
622 m_VehicleGravity = Prim.ComputeGravity(m_VehicleBuoyancy); 627 m_VehicleGravity = ControllingPrim.ComputeGravity(m_VehicleBuoyancy);
623 // The actual vehicle gravity is set to zero in Bullet so we can do all the application of same. 628 // The actual vehicle gravity is set to zero in Bullet so we can do all the application of same.
624 PhysicsScene.PE.SetGravity(Prim.PhysBody, Vector3.Zero); 629 m_physicsScene.PE.SetGravity(ControllingPrim.PhysBody, Vector3.Zero);
625 630
626 VDetailLog("{0},BSDynamics.SetPhysicalParameters,mass={1},inert={2},vehGrav={3},aDamp={4},frict={5},rest={6},lFact={7},aFact={8}", 631 VDetailLog("{0},BSDynamics.SetPhysicalParameters,mass={1},inert={2},vehGrav={3},aDamp={4},frict={5},rest={6},lFact={7},aFact={8}",
627 Prim.LocalID, m_vehicleMass, Prim.Inertia, m_VehicleGravity, 632 ControllingPrim.LocalID, m_vehicleMass, ControllingPrim.Inertia, m_VehicleGravity,
628 BSParam.VehicleAngularDamping, BSParam.VehicleFriction, BSParam.VehicleRestitution, 633 BSParam.VehicleAngularDamping, BSParam.VehicleFriction, BSParam.VehicleRestitution,
629 BSParam.VehicleLinearFactor, BSParam.VehicleAngularFactor 634 BSParam.VehicleLinearFactor, BSParam.VehicleAngularFactor
630 ); 635 );
631 } 636 }
632 else 637 else
633 { 638 {
634 if (Prim.PhysBody.HasPhysicalBody) 639 if (ControllingPrim.PhysBody.HasPhysicalBody)
635 PhysicsScene.PE.RemoveFromCollisionFlags(Prim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS); 640 m_physicsScene.PE.RemoveFromCollisionFlags(ControllingPrim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS);
636 } 641 }
637 } 642 }
638 643
639 public bool RemoveBodyDependencies(BSPhysObject prim) 644 // BSActor.RemoveBodyDependencies
645 public override void RemoveDependencies()
640 { 646 {
641 Refresh(); 647 Refresh();
642 return IsActive; 648 }
649
650 // BSActor.Release()
651 public override void Dispose()
652 {
653 UnregisterForSceneEvents();
654 Type = Vehicle.TYPE_NONE;
655 Enabled = false;
656 return;
657 }
658
659 private void RegisterForSceneEvents()
660 {
661 if (!m_haveRegisteredForSceneEvents)
662 {
663 m_physicsScene.BeforeStep += this.Step;
664 m_physicsScene.AfterStep += this.PostStep;
665 ControllingPrim.OnPreUpdateProperty += this.PreUpdateProperty;
666 m_haveRegisteredForSceneEvents = true;
667 }
668 }
669
670 private void UnregisterForSceneEvents()
671 {
672 if (m_haveRegisteredForSceneEvents)
673 {
674 m_physicsScene.BeforeStep -= this.Step;
675 m_physicsScene.AfterStep -= this.PostStep;
676 ControllingPrim.OnPreUpdateProperty -= this.PreUpdateProperty;
677 m_haveRegisteredForSceneEvents = false;
678 }
679 }
680
681 private void PreUpdateProperty(ref EntityProperties entprop)
682 {
683 // A temporary kludge to suppress the rotational effects introduced on vehicles by Bullet
684 // TODO: handle physics introduced by Bullet with computed vehicle physics.
685 if (IsActive)
686 {
687 entprop.RotationalVelocity = Vector3.Zero;
688 }
643 } 689 }
644 690
645 #region Known vehicle value functions 691 #region Known vehicle value functions
@@ -686,14 +732,14 @@ namespace OpenSim.Region.Physics.BulletSPlugin
686 if (m_knownChanged != 0) 732 if (m_knownChanged != 0)
687 { 733 {
688 if ((m_knownChanged & m_knownChangedPosition) != 0) 734 if ((m_knownChanged & m_knownChangedPosition) != 0)
689 Prim.ForcePosition = m_knownPosition; 735 ControllingPrim.ForcePosition = m_knownPosition;
690 736
691 if ((m_knownChanged & m_knownChangedOrientation) != 0) 737 if ((m_knownChanged & m_knownChangedOrientation) != 0)
692 Prim.ForceOrientation = m_knownOrientation; 738 ControllingPrim.ForceOrientation = m_knownOrientation;
693 739
694 if ((m_knownChanged & m_knownChangedVelocity) != 0) 740 if ((m_knownChanged & m_knownChangedVelocity) != 0)
695 { 741 {
696 Prim.ForceVelocity = m_knownVelocity; 742 ControllingPrim.ForceVelocity = m_knownVelocity;
697 // Fake out Bullet by making it think the velocity is the same as last time. 743 // Fake out Bullet by making it think the velocity is the same as last time.
698 // Bullet does a bunch of smoothing for changing parameters. 744 // Bullet does a bunch of smoothing for changing parameters.
699 // Since the vehicle is demanding this setting, we override Bullet's smoothing 745 // Since the vehicle is demanding this setting, we override Bullet's smoothing
@@ -702,28 +748,28 @@ namespace OpenSim.Region.Physics.BulletSPlugin
702 } 748 }
703 749
704 if ((m_knownChanged & m_knownChangedForce) != 0) 750 if ((m_knownChanged & m_knownChangedForce) != 0)
705 Prim.AddForce((Vector3)m_knownForce, false /*pushForce*/, true /*inTaintTime*/); 751 ControllingPrim.AddForce((Vector3)m_knownForce, false /*pushForce*/, true /*inTaintTime*/);
706 752
707 if ((m_knownChanged & m_knownChangedForceImpulse) != 0) 753 if ((m_knownChanged & m_knownChangedForceImpulse) != 0)
708 Prim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/); 754 ControllingPrim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/);
709 755
710 if ((m_knownChanged & m_knownChangedRotationalVelocity) != 0) 756 if ((m_knownChanged & m_knownChangedRotationalVelocity) != 0)
711 { 757 {
712 Prim.ForceRotationalVelocity = m_knownRotationalVelocity; 758 ControllingPrim.ForceRotationalVelocity = m_knownRotationalVelocity;
713 // PhysicsScene.PE.SetInterpolationAngularVelocity(Prim.PhysBody, m_knownRotationalVelocity); 759 // PhysicsScene.PE.SetInterpolationAngularVelocity(Prim.PhysBody, m_knownRotationalVelocity);
714 } 760 }
715 761
716 if ((m_knownChanged & m_knownChangedRotationalImpulse) != 0) 762 if ((m_knownChanged & m_knownChangedRotationalImpulse) != 0)
717 Prim.ApplyTorqueImpulse((Vector3)m_knownRotationalImpulse, true /*inTaintTime*/); 763 ControllingPrim.ApplyTorqueImpulse((Vector3)m_knownRotationalImpulse, true /*inTaintTime*/);
718 764
719 if ((m_knownChanged & m_knownChangedRotationalForce) != 0) 765 if ((m_knownChanged & m_knownChangedRotationalForce) != 0)
720 { 766 {
721 Prim.AddAngularForce((Vector3)m_knownRotationalForce, false /*pushForce*/, true /*inTaintTime*/); 767 ControllingPrim.AddAngularForce((Vector3)m_knownRotationalForce, false /*pushForce*/, true /*inTaintTime*/);
722 } 768 }
723 769
724 // If we set one of the values (ie, the physics engine didn't do it) we must force 770 // If we set one of the values (ie, the physics engine didn't do it) we must force
725 // an UpdateProperties event to send the changes up to the simulator. 771 // an UpdateProperties event to send the changes up to the simulator.
726 PhysicsScene.PE.PushUpdate(Prim.PhysBody); 772 m_physicsScene.PE.PushUpdate(ControllingPrim.PhysBody);
727 } 773 }
728 m_knownChanged = 0; 774 m_knownChanged = 0;
729 } 775 }
@@ -736,7 +782,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
736 if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos) 782 if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos)
737 { 783 {
738 lastRememberedHeightPos = pos; 784 lastRememberedHeightPos = pos;
739 m_knownTerrainHeight = Prim.PhysicsScene.TerrainManager.GetTerrainHeightAtXYZ(pos); 785 m_knownTerrainHeight = ControllingPrim.PhysScene.TerrainManager.GetTerrainHeightAtXYZ(pos);
740 m_knownHas |= m_knownChangedTerrainHeight; 786 m_knownHas |= m_knownChangedTerrainHeight;
741 } 787 }
742 return m_knownTerrainHeight; 788 return m_knownTerrainHeight;
@@ -748,7 +794,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
748 { 794 {
749 if ((m_knownHas & m_knownChangedWaterLevel) == 0) 795 if ((m_knownHas & m_knownChangedWaterLevel) == 0)
750 { 796 {
751 m_knownWaterLevel = Prim.PhysicsScene.TerrainManager.GetWaterLevelAtXYZ(pos); 797 m_knownWaterLevel = ControllingPrim.PhysScene.TerrainManager.GetWaterLevelAtXYZ(pos);
752 m_knownHas |= m_knownChangedWaterLevel; 798 m_knownHas |= m_knownChangedWaterLevel;
753 } 799 }
754 return (float)m_knownWaterLevel; 800 return (float)m_knownWaterLevel;
@@ -760,7 +806,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
760 { 806 {
761 if ((m_knownHas & m_knownChangedPosition) == 0) 807 if ((m_knownHas & m_knownChangedPosition) == 0)
762 { 808 {
763 m_knownPosition = Prim.ForcePosition; 809 m_knownPosition = ControllingPrim.ForcePosition;
764 m_knownHas |= m_knownChangedPosition; 810 m_knownHas |= m_knownChangedPosition;
765 } 811 }
766 return m_knownPosition; 812 return m_knownPosition;
@@ -779,7 +825,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
779 { 825 {
780 if ((m_knownHas & m_knownChangedOrientation) == 0) 826 if ((m_knownHas & m_knownChangedOrientation) == 0)
781 { 827 {
782 m_knownOrientation = Prim.ForceOrientation; 828 m_knownOrientation = ControllingPrim.ForceOrientation;
783 m_knownHas |= m_knownChangedOrientation; 829 m_knownHas |= m_knownChangedOrientation;
784 } 830 }
785 return m_knownOrientation; 831 return m_knownOrientation;
@@ -798,7 +844,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
798 { 844 {
799 if ((m_knownHas & m_knownChangedVelocity) == 0) 845 if ((m_knownHas & m_knownChangedVelocity) == 0)
800 { 846 {
801 m_knownVelocity = Prim.ForceVelocity; 847 m_knownVelocity = ControllingPrim.ForceVelocity;
802 m_knownHas |= m_knownChangedVelocity; 848 m_knownHas |= m_knownChangedVelocity;
803 } 849 }
804 return m_knownVelocity; 850 return m_knownVelocity;
@@ -839,7 +885,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
839 { 885 {
840 if ((m_knownHas & m_knownChangedRotationalVelocity) == 0) 886 if ((m_knownHas & m_knownChangedRotationalVelocity) == 0)
841 { 887 {
842 m_knownRotationalVelocity = Prim.ForceRotationalVelocity; 888 m_knownRotationalVelocity = ControllingPrim.ForceRotationalVelocity;
843 m_knownHas |= m_knownChangedRotationalVelocity; 889 m_knownHas |= m_knownChangedRotationalVelocity;
844 } 890 }
845 return (Vector3)m_knownRotationalVelocity; 891 return (Vector3)m_knownRotationalVelocity;
@@ -914,11 +960,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
914 // for the physics engine to note the changes so an UpdateProperties event will happen. 960 // for the physics engine to note the changes so an UpdateProperties event will happen.
915 PushKnownChanged(); 961 PushKnownChanged();
916 962
917 if (PhysicsScene.VehiclePhysicalLoggingEnabled) 963 if (m_physicsScene.VehiclePhysicalLoggingEnabled)
918 PhysicsScene.PE.DumpRigidBody(PhysicsScene.World, Prim.PhysBody); 964 m_physicsScene.PE.DumpRigidBody(m_physicsScene.World, ControllingPrim.PhysBody);
919 965
920 VDetailLog("{0},BSDynamics.Step,done,pos={1}, force={2},velocity={3},angvel={4}", 966 VDetailLog("{0},BSDynamics.Step,done,pos={1}, force={2},velocity={3},angvel={4}",
921 Prim.LocalID, VehiclePosition, m_knownForce, VehicleVelocity, VehicleRotationalVelocity); 967 ControllingPrim.LocalID, VehiclePosition, m_knownForce, VehicleVelocity, VehicleRotationalVelocity);
922 } 968 }
923 969
924 // Called after the simulation step 970 // Called after the simulation step
@@ -926,8 +972,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin
926 { 972 {
927 if (!IsActive) return; 973 if (!IsActive) return;
928 974
929 if (PhysicsScene.VehiclePhysicalLoggingEnabled) 975 if (m_physicsScene.VehiclePhysicalLoggingEnabled)
930 PhysicsScene.PE.DumpRigidBody(PhysicsScene.World, Prim.PhysBody); 976 m_physicsScene.PE.DumpRigidBody(m_physicsScene.World, ControllingPrim.PhysBody);
931 } 977 }
932 978
933 // Apply the effect of the linear motor and other linear motions (like hover and float). 979 // Apply the effect of the linear motor and other linear motions (like hover and float).
@@ -966,13 +1012,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
966 Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG 1012 Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
967 VehicleVelocity /= VehicleVelocity.Length(); 1013 VehicleVelocity /= VehicleVelocity.Length();
968 VehicleVelocity *= BSParam.VehicleMaxLinearVelocity; 1014 VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
969 VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}", 1015 VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}",
970 Prim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity); 1016 ControllingPrim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity);
971 } 1017 }
972 else if (newVelocityLengthSq < 0.001f) 1018 else if (newVelocityLengthSq < 0.001f)
973 VehicleVelocity = Vector3.Zero; 1019 VehicleVelocity = Vector3.Zero;
974 1020
975 VDetailLog("{0}, MoveLinear,done,isColl={1},newVel={2}", Prim.LocalID, Prim.IsColliding, VehicleVelocity ); 1021 VDetailLog("{0}, MoveLinear,done,isColl={1},newVel={2}", ControllingPrim.LocalID, ControllingPrim.IsColliding, VehicleVelocity );
976 1022
977 } // end MoveLinear() 1023 } // end MoveLinear()
978 1024
@@ -983,6 +1029,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
983 Vector3 currentVelV = VehicleVelocity * Quaternion.Inverse(VehicleOrientation); 1029 Vector3 currentVelV = VehicleVelocity * Quaternion.Inverse(VehicleOrientation);
984 Vector3 linearMotorCorrectionV = m_linearMotor.Step(pTimestep, currentVelV); 1030 Vector3 linearMotorCorrectionV = m_linearMotor.Step(pTimestep, currentVelV);
985 1031
1032 // Friction reduces vehicle motion
1033 Vector3 frictionFactorW = ComputeFrictionFactor(m_linearFrictionTimescale, pTimestep);
1034 linearMotorCorrectionV -= (currentVelV * frictionFactorW);
1035
986 // Motor is vehicle coordinates. Rotate it to world coordinates 1036 // Motor is vehicle coordinates. Rotate it to world coordinates
987 Vector3 linearMotorVelocityW = linearMotorCorrectionV * VehicleOrientation; 1037 Vector3 linearMotorVelocityW = linearMotorCorrectionV * VehicleOrientation;
988 1038
@@ -996,8 +1046,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
996 // Add this correction to the velocity to make it faster/slower. 1046 // Add this correction to the velocity to make it faster/slower.
997 VehicleVelocity += linearMotorVelocityW; 1047 VehicleVelocity += linearMotorVelocityW;
998 1048
999 VDetailLog("{0}, MoveLinear,velocity,origVelW={1},velV={2},correctV={3},correctW={4},newVelW={5}", 1049
1000 Prim.LocalID, origVelW, currentVelV, linearMotorCorrectionV, linearMotorVelocityW, VehicleVelocity); 1050
1051 VDetailLog("{0}, MoveLinear,velocity,origVelW={1},velV={2},correctV={3},correctW={4},newVelW={5},fricFact={6}",
1052 ControllingPrim.LocalID, origVelW, currentVelV, linearMotorCorrectionV,
1053 linearMotorVelocityW, VehicleVelocity, frictionFactorW);
1001 } 1054 }
1002 1055
1003 public void ComputeLinearTerrainHeightCorrection(float pTimestep) 1056 public void ComputeLinearTerrainHeightCorrection(float pTimestep)
@@ -1011,7 +1064,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1011 newPosition.Z = GetTerrainHeight(VehiclePosition) + 1f; 1064 newPosition.Z = GetTerrainHeight(VehiclePosition) + 1f;
1012 VehiclePosition = newPosition; 1065 VehiclePosition = newPosition;
1013 VDetailLog("{0}, MoveLinear,terrainHeight,terrainHeight={1},pos={2}", 1066 VDetailLog("{0}, MoveLinear,terrainHeight,terrainHeight={1},pos={2}",
1014 Prim.LocalID, GetTerrainHeight(VehiclePosition), VehiclePosition); 1067 ControllingPrim.LocalID, GetTerrainHeight(VehiclePosition), VehiclePosition);
1015 } 1068 }
1016 } 1069 }
1017 1070
@@ -1041,7 +1094,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1041 if (VehiclePosition.Z > m_VhoverTargetHeight) 1094 if (VehiclePosition.Z > m_VhoverTargetHeight)
1042 m_VhoverTargetHeight = VehiclePosition.Z; 1095 m_VhoverTargetHeight = VehiclePosition.Z;
1043 } 1096 }
1044 1097
1045 if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0) 1098 if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0)
1046 { 1099 {
1047 if (Math.Abs(VehiclePosition.Z - m_VhoverTargetHeight) > 0.2f) 1100 if (Math.Abs(VehiclePosition.Z - m_VhoverTargetHeight) > 0.2f)
@@ -1050,7 +1103,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1050 pos.Z = m_VhoverTargetHeight; 1103 pos.Z = m_VhoverTargetHeight;
1051 VehiclePosition = pos; 1104 VehiclePosition = pos;
1052 1105
1053 VDetailLog("{0}, MoveLinear,hover,pos={1},lockHoverHeight", Prim.LocalID, pos); 1106 VDetailLog("{0}, MoveLinear,hover,pos={1},lockHoverHeight", ControllingPrim.LocalID, pos);
1054 } 1107 }
1055 } 1108 }
1056 else 1109 else
@@ -1079,7 +1132,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1079 */ 1132 */
1080 1133
1081 VDetailLog("{0}, MoveLinear,hover,pos={1},eff={2},hoverTS={3},height={4},target={5},err={6},corr={7}", 1134 VDetailLog("{0}, MoveLinear,hover,pos={1},eff={2},hoverTS={3},height={4},target={5},err={6},corr={7}",
1082 Prim.LocalID, VehiclePosition, m_VhoverEfficiency, 1135 ControllingPrim.LocalID, VehiclePosition, m_VhoverEfficiency,
1083 m_VhoverTimescale, m_VhoverHeight, m_VhoverTargetHeight, 1136 m_VhoverTimescale, m_VhoverHeight, m_VhoverTargetHeight,
1084 verticalError, verticalCorrection); 1137 verticalError, verticalCorrection);
1085 } 1138 }
@@ -1124,7 +1177,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1124 { 1177 {
1125 VehiclePosition = pos; 1178 VehiclePosition = pos;
1126 VDetailLog("{0}, MoveLinear,blockingEndPoint,block={1},origPos={2},pos={3}", 1179 VDetailLog("{0}, MoveLinear,blockingEndPoint,block={1},origPos={2},pos={3}",
1127 Prim.LocalID, m_BlockingEndPoint, posChange, pos); 1180 ControllingPrim.LocalID, m_BlockingEndPoint, posChange, pos);
1128 } 1181 }
1129 } 1182 }
1130 return changed; 1183 return changed;
@@ -1135,7 +1188,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1135 // used with conjunction with banking: the strength of the banking will decay when the 1188 // used with conjunction with banking: the strength of the banking will decay when the
1136 // vehicle no longer experiences collisions. The decay timescale is the same as 1189 // vehicle no longer experiences collisions. The decay timescale is the same as
1137 // VEHICLE_BANKING_TIMESCALE. This is to help prevent ground vehicles from steering 1190 // VEHICLE_BANKING_TIMESCALE. This is to help prevent ground vehicles from steering
1138 // when they are in mid jump. 1191 // when they are in mid jump.
1139 // TODO: this code is wrong. Also, what should it do for boats (height from water)? 1192 // TODO: this code is wrong. Also, what should it do for boats (height from water)?
1140 // This is just using the ground and a general collision check. Should really be using 1193 // This is just using the ground and a general collision check. Should really be using
1141 // a downward raycast to find what is below. 1194 // a downward raycast to find what is below.
@@ -1164,7 +1217,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1164 1217
1165 // Another approach is to measure if we're going up. If going up and not colliding, 1218 // Another approach is to measure if we're going up. If going up and not colliding,
1166 // the vehicle is in the air. Fix that by pushing down. 1219 // the vehicle is in the air. Fix that by pushing down.
1167 if (!Prim.IsColliding && VehicleVelocity.Z > 0.1) 1220 if (!ControllingPrim.IsColliding && VehicleVelocity.Z > 0.1)
1168 { 1221 {
1169 // Get rid of any of the velocity vector that is pushing us up. 1222 // Get rid of any of the velocity vector that is pushing us up.
1170 float upVelocity = VehicleVelocity.Z; 1223 float upVelocity = VehicleVelocity.Z;
@@ -1186,7 +1239,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1186 } 1239 }
1187 */ 1240 */
1188 VDetailLog("{0}, MoveLinear,limitMotorUp,collide={1},upVel={2},newVel={3}", 1241 VDetailLog("{0}, MoveLinear,limitMotorUp,collide={1},upVel={2},newVel={3}",
1189 Prim.LocalID, Prim.IsColliding, upVelocity, VehicleVelocity); 1242 ControllingPrim.LocalID, ControllingPrim.IsColliding, upVelocity, VehicleVelocity);
1190 } 1243 }
1191 } 1244 }
1192 } 1245 }
@@ -1196,14 +1249,14 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1196 Vector3 appliedGravity = m_VehicleGravity * m_vehicleMass; 1249 Vector3 appliedGravity = m_VehicleGravity * m_vehicleMass;
1197 1250
1198 // Hack to reduce downward force if the vehicle is probably sitting on the ground 1251 // Hack to reduce downward force if the vehicle is probably sitting on the ground
1199 if (Prim.IsColliding && IsGroundVehicle) 1252 if (ControllingPrim.IsColliding && IsGroundVehicle)
1200 appliedGravity *= BSParam.VehicleGroundGravityFudge; 1253 appliedGravity *= BSParam.VehicleGroundGravityFudge;
1201 1254
1202 VehicleAddForce(appliedGravity); 1255 VehicleAddForce(appliedGravity);
1203 1256
1204 VDetailLog("{0}, MoveLinear,applyGravity,vehGrav={1},collid={2},fudge={3},mass={4},appliedForce={3}", 1257 VDetailLog("{0}, MoveLinear,applyGravity,vehGrav={1},collid={2},fudge={3},mass={4},appliedForce={3}",
1205 Prim.LocalID, m_VehicleGravity, 1258 ControllingPrim.LocalID, m_VehicleGravity,
1206 Prim.IsColliding, BSParam.VehicleGroundGravityFudge, m_vehicleMass, appliedGravity); 1259 ControllingPrim.IsColliding, BSParam.VehicleGroundGravityFudge, m_vehicleMass, appliedGravity);
1207 } 1260 }
1208 1261
1209 // ======================================================================= 1262 // =======================================================================
@@ -1227,11 +1280,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1227 { 1280 {
1228 // The vehicle is not adding anything angular wise. 1281 // The vehicle is not adding anything angular wise.
1229 VehicleRotationalVelocity = Vector3.Zero; 1282 VehicleRotationalVelocity = Vector3.Zero;
1230 VDetailLog("{0}, MoveAngular,done,zero", Prim.LocalID); 1283 VDetailLog("{0}, MoveAngular,done,zero", ControllingPrim.LocalID);
1231 } 1284 }
1232 else 1285 else
1233 { 1286 {
1234 VDetailLog("{0}, MoveAngular,done,nonZero,angVel={1}", Prim.LocalID, VehicleRotationalVelocity); 1287 VDetailLog("{0}, MoveAngular,done,nonZero,angVel={1}", ControllingPrim.LocalID, VehicleRotationalVelocity);
1235 } 1288 }
1236 1289
1237 // ================================================================== 1290 // ==================================================================
@@ -1262,7 +1315,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1262 torqueFromOffset.Z = 0; 1315 torqueFromOffset.Z = 0;
1263 1316
1264 VehicleAddAngularForce(torqueFromOffset * m_vehicleMass); 1317 VehicleAddAngularForce(torqueFromOffset * m_vehicleMass);
1265 VDetailLog("{0}, BSDynamic.MoveAngular,motorOffset,applyTorqueImpulse={1}", Prim.LocalID, torqueFromOffset); 1318 VDetailLog("{0}, BSDynamic.MoveAngular,motorOffset,applyTorqueImpulse={1}", ControllingPrim.LocalID, torqueFromOffset);
1266 } 1319 }
1267 1320
1268 } 1321 }
@@ -1277,7 +1330,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1277 // From http://wiki.secondlife.com/wiki/LlSetVehicleFlags : 1330 // From http://wiki.secondlife.com/wiki/LlSetVehicleFlags :
1278 // This flag prevents linear deflection parallel to world z-axis. This is useful 1331 // This flag prevents linear deflection parallel to world z-axis. This is useful
1279 // for preventing ground vehicles with large linear deflection, like bumper cars, 1332 // for preventing ground vehicles with large linear deflection, like bumper cars,
1280 // from climbing their linear deflection into the sky. 1333 // from climbing their linear deflection into the sky.
1281 // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement 1334 // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement
1282 // TODO: This is here because this is where ODE put it but documentation says it 1335 // TODO: This is here because this is where ODE put it but documentation says it
1283 // is a linear effect. Where should this check go? 1336 // is a linear effect. Where should this check go?
@@ -1287,8 +1340,15 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1287 // angularMotorContributionV.Y = 0f; 1340 // angularMotorContributionV.Y = 0f;
1288 // } 1341 // }
1289 1342
1343 // Reduce any velocity by friction.
1344 Vector3 frictionFactorW = ComputeFrictionFactor(m_angularFrictionTimescale, pTimestep);
1345 angularMotorContributionV -= (currentAngularV * frictionFactorW);
1346
1290 VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation; 1347 VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation;
1291 VDetailLog("{0}, MoveAngular,angularTurning,angularMotorContrib={1}", Prim.LocalID, angularMotorContributionV); 1348
1349
1350
1351 VDetailLog("{0}, MoveAngular,angularTurning,angContribV={1}", ControllingPrim.LocalID, angularMotorContributionV);
1292 } 1352 }
1293 1353
1294 // From http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial: 1354 // From http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial:
@@ -1305,6 +1365,35 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1305 // If vertical attaction timescale is reasonable 1365 // If vertical attaction timescale is reasonable
1306 if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff) 1366 if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
1307 { 1367 {
1368 //Another formula to try got from :
1369 //http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html
1370
1371 Vector3 VehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
1372
1373 // Flipping what was originally a timescale into a speed variable and then multiplying it by 2
1374 // since only computing half the distance between the angles.
1375 float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f;
1376
1377 // Make a prediction of where the up axis will be when this is applied rather then where it is now as
1378 // this makes for a smoother adjustment and less fighting between the various forces.
1379 Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
1380
1381 // This is only half the distance to the target so it will take 2 seconds to complete the turn.
1382 Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
1383
1384 // Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared
1385 Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed;
1386
1387 VehicleRotationalVelocity += vertContributionV;
1388
1389 VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
1390 ControllingPrim.LocalID,
1391 VehicleUpAxis,
1392 predictedUp,
1393 torqueVector,
1394 vertContributionV);
1395 //=====================================================================
1396 /*
1308 // Possible solution derived from a discussion at: 1397 // Possible solution derived from a discussion at:
1309 // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no 1398 // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
1310 1399
@@ -1334,11 +1423,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1334 VehicleRotationalVelocity += vertContributionV; 1423 VehicleRotationalVelocity += vertContributionV;
1335 1424
1336 VDetailLog("{0}, MoveAngular,verticalAttraction,diffAxis={1},diffAng={2},corrRot={3},contrib={4}", 1425 VDetailLog("{0}, MoveAngular,verticalAttraction,diffAxis={1},diffAng={2},corrRot={3},contrib={4}",
1337 Prim.LocalID, 1426 ControllingPrim.LocalID,
1338 differenceAxis, 1427 differenceAxis,
1339 differenceAngle, 1428 differenceAngle,
1340 correctionRotation, 1429 correctionRotation,
1341 vertContributionV); 1430 vertContributionV);
1431 */
1342 1432
1343 // =================================================================== 1433 // ===================================================================
1344 /* 1434 /*
@@ -1380,7 +1470,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1380 VehicleRotationalVelocity += (vertContributionV * VehicleOrientation); 1470 VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
1381 1471
1382 VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}", 1472 VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}",
1383 Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV, 1473 Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV,
1384 m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV); 1474 m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV);
1385 */ 1475 */
1386 } 1476 }
@@ -1433,9 +1523,9 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1433 VehicleRotationalVelocity += deflectContributionV * VehicleOrientation; 1523 VehicleRotationalVelocity += deflectContributionV * VehicleOrientation;
1434 1524
1435 VDetailLog("{0}, MoveAngular,Deflection,movingDir={1},pointingDir={2},deflectError={3},ret={4}", 1525 VDetailLog("{0}, MoveAngular,Deflection,movingDir={1},pointingDir={2},deflectError={3},ret={4}",
1436 Prim.LocalID, movingDirection, pointingDirection, deflectionError, deflectContributionV); 1526 ControllingPrim.LocalID, movingDirection, pointingDirection, deflectionError, deflectContributionV);
1437 VDetailLog("{0}, MoveAngular,Deflection,fwdSpd={1},defEff={2},defTS={3}", 1527 VDetailLog("{0}, MoveAngular,Deflection,fwdSpd={1},defEff={2},defTS={3}",
1438 Prim.LocalID, VehicleForwardSpeed, m_angularDeflectionEfficiency, m_angularDeflectionTimescale); 1528 ControllingPrim.LocalID, VehicleForwardSpeed, m_angularDeflectionEfficiency, m_angularDeflectionTimescale);
1439 } 1529 }
1440 } 1530 }
1441 1531
@@ -1447,13 +1537,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1447 // produce a angular velocity around the yaw-axis, causing the vehicle to turn. The magnitude 1537 // produce a angular velocity around the yaw-axis, causing the vehicle to turn. The magnitude
1448 // of the yaw effect will be proportional to the 1538 // of the yaw effect will be proportional to the
1449 // VEHICLE_BANKING_EFFICIENCY, the angle of the roll rotation, and sometimes the vehicle's 1539 // VEHICLE_BANKING_EFFICIENCY, the angle of the roll rotation, and sometimes the vehicle's
1450 // velocity along its preferred axis of motion. 1540 // velocity along its preferred axis of motion.
1451 // The VEHICLE_BANKING_EFFICIENCY can vary between -1 and +1. When it is positive then any 1541 // The VEHICLE_BANKING_EFFICIENCY can vary between -1 and +1. When it is positive then any
1452 // positive rotation (by the right-hand rule) about the roll-axis will effect a 1542 // positive rotation (by the right-hand rule) about the roll-axis will effect a
1453 // (negative) torque around the yaw-axis, making it turn to the right--that is the 1543 // (negative) torque around the yaw-axis, making it turn to the right--that is the
1454 // vehicle will lean into the turn, which is how real airplanes and motorcycle's work. 1544 // vehicle will lean into the turn, which is how real airplanes and motorcycle's work.
1455 // Negating the banking coefficient will make it so that the vehicle leans to the 1545 // Negating the banking coefficient will make it so that the vehicle leans to the
1456 // outside of the turn (not very "physical" but might allow interesting vehicles so why not?). 1546 // outside of the turn (not very "physical" but might allow interesting vehicles so why not?).
1457 // The VEHICLE_BANKING_MIX is a fake (i.e. non-physical) parameter that is useful for making 1547 // The VEHICLE_BANKING_MIX is a fake (i.e. non-physical) parameter that is useful for making
1458 // banking vehicles do what you want rather than what the laws of physics allow. 1548 // banking vehicles do what you want rather than what the laws of physics allow.
1459 // For example, consider a real motorcycle...it must be moving forward in order for 1549 // For example, consider a real motorcycle...it must be moving forward in order for
@@ -1465,11 +1555,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1465 // totally static (0.0) and totally dynamic (1.0). By "static" we mean that the 1555 // totally static (0.0) and totally dynamic (1.0). By "static" we mean that the
1466 // banking effect depends only on the vehicle's rotation about its roll-axis compared 1556 // banking effect depends only on the vehicle's rotation about its roll-axis compared
1467 // to "dynamic" where the banking is also proportional to its velocity along its 1557 // to "dynamic" where the banking is also proportional to its velocity along its
1468 // roll-axis. Finding the best value of the "mixture" will probably require trial and error. 1558 // roll-axis. Finding the best value of the "mixture" will probably require trial and error.
1469 // The time it takes for the banking behavior to defeat a preexisting angular velocity about the 1559 // The time it takes for the banking behavior to defeat a preexisting angular velocity about the
1470 // world z-axis is determined by the VEHICLE_BANKING_TIMESCALE. So if you want the vehicle to 1560 // world z-axis is determined by the VEHICLE_BANKING_TIMESCALE. So if you want the vehicle to
1471 // bank quickly then give it a banking timescale of about a second or less, otherwise you can 1561 // bank quickly then give it a banking timescale of about a second or less, otherwise you can
1472 // make a sluggish vehicle by giving it a timescale of several seconds. 1562 // make a sluggish vehicle by giving it a timescale of several seconds.
1473 public void ComputeAngularBanking() 1563 public void ComputeAngularBanking()
1474 { 1564 {
1475 if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff) 1565 if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
@@ -1498,10 +1588,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1498 1588
1499 //VehicleRotationalVelocity += bankingContributionV * VehicleOrientation; 1589 //VehicleRotationalVelocity += bankingContributionV * VehicleOrientation;
1500 VehicleRotationalVelocity += bankingContributionV; 1590 VehicleRotationalVelocity += bankingContributionV;
1501 1591
1502 1592
1503 VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}", 1593 VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}",
1504 Prim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV); 1594 ControllingPrim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV);
1505 } 1595 }
1506 } 1596 }
1507 1597
@@ -1540,11 +1630,28 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1540 if (rotq != m_rot) 1630 if (rotq != m_rot)
1541 { 1631 {
1542 VehicleOrientation = m_rot; 1632 VehicleOrientation = m_rot;
1543 VDetailLog("{0}, LimitRotation,done,orig={1},new={2}", Prim.LocalID, rotq, m_rot); 1633 VDetailLog("{0}, LimitRotation,done,orig={1},new={2}", ControllingPrim.LocalID, rotq, m_rot);
1544 } 1634 }
1545 1635
1546 } 1636 }
1547 1637
1638 // Given a friction vector (reduction in seconds) and a timestep, return the factor to reduce
1639 // some value by to apply this friction.
1640 private Vector3 ComputeFrictionFactor(Vector3 friction, float pTimestep)
1641 {
1642 Vector3 frictionFactor = Vector3.Zero;
1643 if (friction != BSMotor.InfiniteVector)
1644 {
1645 // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep;
1646 // Individual friction components can be 'infinite' so compute each separately.
1647 frictionFactor.X = (friction.X == BSMotor.Infinite) ? 0f : (1f / friction.X);
1648 frictionFactor.Y = (friction.Y == BSMotor.Infinite) ? 0f : (1f / friction.Y);
1649 frictionFactor.Z = (friction.Z == BSMotor.Infinite) ? 0f : (1f / friction.Z);
1650 frictionFactor *= pTimestep;
1651 }
1652 return frictionFactor;
1653 }
1654
1548 private float ClampInRange(float low, float val, float high) 1655 private float ClampInRange(float low, float val, float high)
1549 { 1656 {
1550 return Math.Max(low, Math.Min(val, high)); 1657 return Math.Max(low, Math.Min(val, high));
@@ -1554,8 +1661,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1554 // Invoke the detailed logger and output something if it's enabled. 1661 // Invoke the detailed logger and output something if it's enabled.
1555 private void VDetailLog(string msg, params Object[] args) 1662 private void VDetailLog(string msg, params Object[] args)
1556 { 1663 {
1557 if (Prim.PhysicsScene.VehicleLoggingEnabled) 1664 if (ControllingPrim.PhysScene.VehicleLoggingEnabled)
1558 Prim.PhysicsScene.DetailLog(msg, args); 1665 ControllingPrim.PhysScene.DetailLog(msg, args);
1559 } 1666 }
1560 } 1667 }
1561} 1668}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
index 4ece1eb..76c2187 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
@@ -80,7 +80,7 @@ public abstract class BSLinkset
80 80
81 public BSPrimLinkable LinksetRoot { get; protected set; } 81 public BSPrimLinkable LinksetRoot { get; protected set; }
82 82
83 public BSScene PhysicsScene { get; private set; } 83 protected BSScene m_physicsScene { get; private set; }
84 84
85 static int m_nextLinksetID = 1; 85 static int m_nextLinksetID = 1;
86 public int LinksetID { get; private set; } 86 public int LinksetID { get; private set; }
@@ -93,13 +93,6 @@ public abstract class BSLinkset
93 // to the physical representation is done via the tainting mechenism. 93 // to the physical representation is done via the tainting mechenism.
94 protected object m_linksetActivityLock = new Object(); 94 protected object m_linksetActivityLock = new Object();
95 95
96 // Some linksets have a preferred physical shape.
97 // Returns SHAPE_UNKNOWN if there is no preference. Causes the correct shape to be selected.
98 public virtual BSPhysicsShapeType PreferredPhysicalShape(BSPrimLinkable requestor)
99 {
100 return BSPhysicsShapeType.SHAPE_UNKNOWN;
101 }
102
103 // We keep the prim's mass in the linkset structure since it could be dependent on other prims 96 // We keep the prim's mass in the linkset structure since it could be dependent on other prims
104 public float LinksetMass { get; protected set; } 97 public float LinksetMass { get; protected set; }
105 98
@@ -122,7 +115,7 @@ public abstract class BSLinkset
122 // We create LOTS of linksets. 115 // We create LOTS of linksets.
123 if (m_nextLinksetID <= 0) 116 if (m_nextLinksetID <= 0)
124 m_nextLinksetID = 1; 117 m_nextLinksetID = 1;
125 PhysicsScene = scene; 118 m_physicsScene = scene;
126 LinksetRoot = parent; 119 LinksetRoot = parent;
127 m_children = new HashSet<BSPrimLinkable>(); 120 m_children = new HashSet<BSPrimLinkable>();
128 LinksetMass = parent.RawMass; 121 LinksetMass = parent.RawMass;
@@ -165,7 +158,7 @@ public abstract class BSLinkset
165 } 158 }
166 159
167 // The child is down to a linkset of just itself 160 // The child is down to a linkset of just itself
168 return BSLinkset.Factory(PhysicsScene, child); 161 return BSLinkset.Factory(m_physicsScene, child);
169 } 162 }
170 163
171 // Return 'true' if the passed object is the root object of this linkset 164 // Return 'true' if the passed object is the root object of this linkset
@@ -221,7 +214,7 @@ public abstract class BSLinkset
221 // I am the root of a linkset and a new child is being added 214 // I am the root of a linkset and a new child is being added
222 // Called while LinkActivity is locked. 215 // Called while LinkActivity is locked.
223 protected abstract void AddChildToLinkset(BSPrimLinkable child); 216 protected abstract void AddChildToLinkset(BSPrimLinkable child);
224 217
225 // I am the root of a linkset and one of my children is being removed. 218 // I am the root of a linkset and one of my children is being removed.
226 // Safe to call even if the child is not really in my linkset. 219 // Safe to call even if the child is not really in my linkset.
227 protected abstract void RemoveChildFromLinkset(BSPrimLinkable child); 220 protected abstract void RemoveChildFromLinkset(BSPrimLinkable child);
@@ -263,7 +256,7 @@ public abstract class BSLinkset
263 // This is called when the root body is changing. 256 // This is called when the root body is changing.
264 // Returns 'true' of something was actually removed and would need restoring 257 // Returns 'true' of something was actually removed and would need restoring
265 // Called at taint-time!! 258 // Called at taint-time!!
266 public abstract bool RemoveBodyDependencies(BSPrimLinkable child); 259 public abstract bool RemoveDependencies(BSPrimLinkable child);
267 260
268 // ================================================================ 261 // ================================================================
269 protected virtual float ComputeLinksetMass() 262 protected virtual float ComputeLinksetMass()
@@ -323,8 +316,8 @@ public abstract class BSLinkset
323 // Invoke the detailed logger and output something if it's enabled. 316 // Invoke the detailed logger and output something if it's enabled.
324 protected void DetailLog(string msg, params Object[] args) 317 protected void DetailLog(string msg, params Object[] args)
325 { 318 {
326 if (PhysicsScene.PhysicsLogging.Enabled) 319 if (m_physicsScene.PhysicsLogging.Enabled)
327 PhysicsScene.DetailLog(msg, args); 320 m_physicsScene.DetailLog(msg, args);
328 } 321 }
329 322
330} 323}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
index e05562a..350a5d1 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
@@ -35,6 +35,7 @@ using OMV = OpenMetaverse;
35namespace OpenSim.Region.Physics.BulletSPlugin 35namespace OpenSim.Region.Physics.BulletSPlugin
36{ 36{
37 37
38 /*
38// When a child is linked, the relationship position of the child to the parent 39// When a child is linked, the relationship position of the child to the parent
39// is remembered so the child's world position can be recomputed when it is 40// is remembered so the child's world position can be recomputed when it is
40// removed from the linkset. 41// removed from the linkset.
@@ -88,6 +89,7 @@ sealed class BSLinksetCompoundInfo : BSLinksetInfo
88 return buff.ToString(); 89 return buff.ToString();
89 } 90 }
90}; 91};
92 */
91 93
92public sealed class BSLinksetCompound : BSLinkset 94public sealed class BSLinksetCompound : BSLinkset
93{ 95{
@@ -98,19 +100,6 @@ public sealed class BSLinksetCompound : BSLinkset
98 { 100 {
99 } 101 }
100 102
101 // For compound implimented linksets, if there are children, use compound shape for the root.
102 public override BSPhysicsShapeType PreferredPhysicalShape(BSPrimLinkable requestor)
103 {
104 // Returning 'unknown' means we don't have a preference.
105 BSPhysicsShapeType ret = BSPhysicsShapeType.SHAPE_UNKNOWN;
106 if (IsRoot(requestor) && HasAnyChildren)
107 {
108 ret = BSPhysicsShapeType.SHAPE_COMPOUND;
109 }
110 // DetailLog("{0},BSLinksetCompound.PreferredPhysicalShape,call,shape={1}", LinksetRoot.LocalID, ret);
111 return ret;
112 }
113
114 // When physical properties are changed the linkset needs to recalculate 103 // When physical properties are changed the linkset needs to recalculate
115 // its internal properties. 104 // its internal properties.
116 public override void Refresh(BSPrimLinkable requestor) 105 public override void Refresh(BSPrimLinkable requestor)
@@ -124,14 +113,14 @@ public sealed class BSLinksetCompound : BSLinkset
124 // Schedule a refresh to happen after all the other taint processing. 113 // Schedule a refresh to happen after all the other taint processing.
125 private void ScheduleRebuild(BSPrimLinkable requestor) 114 private void ScheduleRebuild(BSPrimLinkable requestor)
126 { 115 {
127 DetailLog("{0},BSLinksetCompound.ScheduleRebuild,,rebuilding={1},hasChildren={2},actuallyScheduling={3}", 116 DetailLog("{0},BSLinksetCompound.ScheduleRebuild,,rebuilding={1},hasChildren={2},actuallyScheduling={3}",
128 requestor.LocalID, Rebuilding, HasAnyChildren, (!Rebuilding && HasAnyChildren)); 117 requestor.LocalID, Rebuilding, HasAnyChildren, (!Rebuilding && HasAnyChildren));
129 // When rebuilding, it is possible to set properties that would normally require a rebuild. 118 // When rebuilding, it is possible to set properties that would normally require a rebuild.
130 // If already rebuilding, don't request another rebuild. 119 // If already rebuilding, don't request another rebuild.
131 // If a linkset with just a root prim (simple non-linked prim) don't bother rebuilding. 120 // If a linkset with just a root prim (simple non-linked prim) don't bother rebuilding.
132 if (!Rebuilding && HasAnyChildren) 121 if (!Rebuilding && HasAnyChildren)
133 { 122 {
134 PhysicsScene.PostTaintObject("BSLinksetCompound.ScheduleRebuild", LinksetRoot.LocalID, delegate() 123 m_physicsScene.PostTaintObject("BSLinksetCompound.ScheduleRebuild", LinksetRoot.LocalID, delegate()
135 { 124 {
136 if (HasAnyChildren) 125 if (HasAnyChildren)
137 RecomputeLinksetCompound(); 126 RecomputeLinksetCompound();
@@ -153,26 +142,11 @@ public sealed class BSLinksetCompound : BSLinkset
153 // The root is going dynamic. Rebuild the linkset so parts and mass get computed properly. 142 // The root is going dynamic. Rebuild the linkset so parts and mass get computed properly.
154 ScheduleRebuild(LinksetRoot); 143 ScheduleRebuild(LinksetRoot);
155 } 144 }
156 else
157 {
158 // The origional prims are removed from the world as the shape of the root compound
159 // shape takes over.
160 PhysicsScene.PE.AddToCollisionFlags(child.PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE);
161 PhysicsScene.PE.ForceActivationState(child.PhysBody, ActivationState.DISABLE_SIMULATION);
162 // We don't want collisions from the old linkset children.
163 PhysicsScene.PE.RemoveFromCollisionFlags(child.PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
164
165 child.PhysBody.collisionType = CollisionType.LinksetChild;
166
167 ret = true;
168 }
169 return ret; 145 return ret;
170 } 146 }
171 147
172 // The object is going static (non-physical). Do any setup necessary for a static linkset. 148 // The object is going static (non-physical). We do not do anything for static linksets.
173 // Return 'true' if any properties updated on the passed object. 149 // Return 'true' if any properties updated on the passed object.
174 // This doesn't normally happen -- OpenSim removes the objects from the physical
175 // world if it is a static linkset.
176 // Called at taint-time! 150 // Called at taint-time!
177 public override bool MakeStatic(BSPrimLinkable child) 151 public override bool MakeStatic(BSPrimLinkable child)
178 { 152 {
@@ -180,19 +154,9 @@ public sealed class BSLinksetCompound : BSLinkset
180 DetailLog("{0},BSLinksetCompound.MakeStatic,call,IsRoot={1}", child.LocalID, IsRoot(child)); 154 DetailLog("{0},BSLinksetCompound.MakeStatic,call,IsRoot={1}", child.LocalID, IsRoot(child));
181 if (IsRoot(child)) 155 if (IsRoot(child))
182 { 156 {
157 // Schedule a rebuild to verify that the root shape is set to the real shape.
183 ScheduleRebuild(LinksetRoot); 158 ScheduleRebuild(LinksetRoot);
184 } 159 }
185 else
186 {
187 // The non-physical children can come back to life.
188 PhysicsScene.PE.RemoveFromCollisionFlags(child.PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE);
189
190 child.PhysBody.collisionType = CollisionType.LinksetChild;
191
192 // Don't force activation so setting of DISABLE_SIMULATION can stay if used.
193 PhysicsScene.PE.Activate(child.PhysBody, false);
194 ret = true;
195 }
196 return ret; 160 return ret;
197 } 161 }
198 162
@@ -200,13 +164,20 @@ public sealed class BSLinksetCompound : BSLinkset
200 // Called at taint-time. 164 // Called at taint-time.
201 public override void UpdateProperties(UpdatedProperties whichUpdated, BSPrimLinkable updated) 165 public override void UpdateProperties(UpdatedProperties whichUpdated, BSPrimLinkable updated)
202 { 166 {
167 if (!LinksetRoot.IsPhysicallyActive)
168 {
169 // No reason to do this physical stuff for static linksets.
170 DetailLog("{0},BSLinksetCompound.UpdateProperties,notPhysical", LinksetRoot.LocalID);
171 return;
172 }
173
203 // The user moving a child around requires the rebuilding of the linkset compound shape 174 // The user moving a child around requires the rebuilding of the linkset compound shape
204 // One problem is this happens when a border is crossed -- the simulator implementation 175 // One problem is this happens when a border is crossed -- the simulator implementation
205 // stores the position into the group which causes the move of the object 176 // stores the position into the group which causes the move of the object
206 // but it also means all the child positions get updated. 177 // but it also means all the child positions get updated.
207 // What would cause an unnecessary rebuild so we make sure the linkset is in a 178 // What would cause an unnecessary rebuild so we make sure the linkset is in a
208 // region before bothering to do a rebuild. 179 // region before bothering to do a rebuild.
209 if (!IsRoot(updated) && PhysicsScene.TerrainManager.IsWithinKnownTerrain(LinksetRoot.RawPosition)) 180 if (!IsRoot(updated) && m_physicsScene.TerrainManager.IsWithinKnownTerrain(LinksetRoot.RawPosition))
210 { 181 {
211 // If a child of the linkset is updating only the position or rotation, that can be done 182 // If a child of the linkset is updating only the position or rotation, that can be done
212 // without rebuilding the linkset. 183 // without rebuilding the linkset.
@@ -218,22 +189,22 @@ public sealed class BSLinksetCompound : BSLinkset
218 // and that is caused by us updating the object. 189 // and that is caused by us updating the object.
219 if ((whichUpdated & ~(UpdatedProperties.Position | UpdatedProperties.Orientation)) == 0) 190 if ((whichUpdated & ~(UpdatedProperties.Position | UpdatedProperties.Orientation)) == 0)
220 { 191 {
221 // Find the physical instance of the child 192 // Find the physical instance of the child
222 if (LinksetRoot.PhysShape.HasPhysicalShape && PhysicsScene.PE.IsCompound(LinksetRoot.PhysShape)) 193 if (LinksetRoot.PhysShape.HasPhysicalShape && m_physicsScene.PE.IsCompound(LinksetRoot.PhysShape.physShapeInfo))
223 { 194 {
224 // It is possible that the linkset is still under construction and the child is not yet 195 // It is possible that the linkset is still under construction and the child is not yet
225 // inserted into the compound shape. A rebuild of the linkset in a pre-step action will 196 // inserted into the compound shape. A rebuild of the linkset in a pre-step action will
226 // build the whole thing with the new position or rotation. 197 // build the whole thing with the new position or rotation.
227 // The index must be checked because Bullet references the child array but does no validity 198 // The index must be checked because Bullet references the child array but does no validity
228 // checking of the child index passed. 199 // checking of the child index passed.
229 int numLinksetChildren = PhysicsScene.PE.GetNumberOfCompoundChildren(LinksetRoot.PhysShape); 200 int numLinksetChildren = m_physicsScene.PE.GetNumberOfCompoundChildren(LinksetRoot.PhysShape.physShapeInfo);
230 if (updated.LinksetChildIndex < numLinksetChildren) 201 if (updated.LinksetChildIndex < numLinksetChildren)
231 { 202 {
232 BulletShape linksetChildShape = PhysicsScene.PE.GetChildShapeFromCompoundShapeIndex(LinksetRoot.PhysShape, updated.LinksetChildIndex); 203 BulletShape linksetChildShape = m_physicsScene.PE.GetChildShapeFromCompoundShapeIndex(LinksetRoot.PhysShape.physShapeInfo, updated.LinksetChildIndex);
233 if (linksetChildShape.HasPhysicalShape) 204 if (linksetChildShape.HasPhysicalShape)
234 { 205 {
235 // Found the child shape within the compound shape 206 // Found the child shape within the compound shape
236 PhysicsScene.PE.UpdateChildTransform(LinksetRoot.PhysShape, updated.LinksetChildIndex, 207 m_physicsScene.PE.UpdateChildTransform(LinksetRoot.PhysShape.physShapeInfo, updated.LinksetChildIndex,
237 updated.RawPosition - LinksetRoot.RawPosition, 208 updated.RawPosition - LinksetRoot.RawPosition,
238 updated.RawOrientation * OMV.Quaternion.Inverse(LinksetRoot.RawOrientation), 209 updated.RawOrientation * OMV.Quaternion.Inverse(LinksetRoot.RawOrientation),
239 true /* shouldRecalculateLocalAabb */); 210 true /* shouldRecalculateLocalAabb */);
@@ -275,75 +246,22 @@ public sealed class BSLinksetCompound : BSLinkset
275 } 246 }
276 247
277 // Routine called when rebuilding the body of some member of the linkset. 248 // Routine called when rebuilding the body of some member of the linkset.
278 // Since we don't keep in world relationships, do nothing unless it's a child changing. 249 // If one of the bodies is being changed, the linkset needs rebuilding.
250 // For instance, a linkset is built and then a mesh asset is read in and the mesh is recreated.
279 // Returns 'true' of something was actually removed and would need restoring 251 // Returns 'true' of something was actually removed and would need restoring
280 // Called at taint-time!! 252 // Called at taint-time!!
281 public override bool RemoveBodyDependencies(BSPrimLinkable child) 253 public override bool RemoveDependencies(BSPrimLinkable child)
282 { 254 {
283 bool ret = false; 255 bool ret = false;
284 256
285 DetailLog("{0},BSLinksetCompound.RemoveBodyDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}", 257 DetailLog("{0},BSLinksetCompound.RemoveBodyDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}",
286 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody, IsRoot(child)); 258 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody, IsRoot(child));
287 259
288 if (!IsRoot(child)) 260 ScheduleRebuild(child);
289 {
290 // Because it is a convenient time, recompute child world position and rotation based on
291 // its position in the linkset.
292 RecomputeChildWorldPosition(child, true /* inTaintTime */);
293 child.LinksetInfo = null;
294 }
295
296 // Cannot schedule a refresh/rebuild here because this routine is called when
297 // the linkset is being rebuilt.
298 // InternalRefresh(LinksetRoot);
299 261
300 return ret; 262 return ret;
301 } 263 }
302 264
303 // When the linkset is built, the child shape is added to the compound shape relative to the
304 // root shape. The linkset then moves around but this does not move the actual child
305 // prim. The child prim's location must be recomputed based on the location of the root shape.
306 private void RecomputeChildWorldPosition(BSPrimLinkable child, bool inTaintTime)
307 {
308 // For the moment (20130201), disable this computation (converting the child physical addr back to
309 // a region address) until we have a good handle on center-of-mass offsets and what the physics
310 // engine moving a child actually means.
311 // The simulator keeps track of where children should be as the linkset moves. Setting
312 // the pos/rot here does not effect that knowledge as there is no good way for the
313 // physics engine to send the simulator an update for a child.
314
315 /*
316 BSLinksetCompoundInfo lci = child.LinksetInfo as BSLinksetCompoundInfo;
317 if (lci != null)
318 {
319 if (inTaintTime)
320 {
321 OMV.Vector3 oldPos = child.RawPosition;
322 child.ForcePosition = LinksetRoot.RawPosition + lci.OffsetFromRoot;
323 child.ForceOrientation = LinksetRoot.RawOrientation * lci.OffsetRot;
324 DetailLog("{0},BSLinksetCompound.RecomputeChildWorldPosition,oldPos={1},lci={2},newPos={3}",
325 child.LocalID, oldPos, lci, child.RawPosition);
326 }
327 else
328 {
329 // TaintedObject is not used here so the raw position is set now and not at taint-time.
330 child.Position = LinksetRoot.RawPosition + lci.OffsetFromRoot;
331 child.Orientation = LinksetRoot.RawOrientation * lci.OffsetRot;
332 }
333 }
334 else
335 {
336 // This happens when children have been added to the linkset but the linkset
337 // has not been constructed yet. So like, at taint time, adding children to a linkset
338 // and then changing properties of the children (makePhysical, for instance)
339 // but the post-print action of actually rebuilding the linkset has not yet happened.
340 // PhysicsScene.Logger.WarnFormat("{0} Restoring linkset child position failed because of no relative position computed. ID={1}",
341 // LogHeader, child.LocalID);
342 DetailLog("{0},BSLinksetCompound.recomputeChildWorldPosition,noRelativePositonInfo", child.LocalID);
343 }
344 */
345 }
346
347 // ================================================================ 265 // ================================================================
348 266
349 // Add a new child to the linkset. 267 // Add a new child to the linkset.
@@ -376,7 +294,6 @@ public sealed class BSLinksetCompound : BSLinkset
376 child.LocalID, child.PhysBody.AddrString); 294 child.LocalID, child.PhysBody.AddrString);
377 295
378 // Cause the child's body to be rebuilt and thus restored to normal operation 296 // Cause the child's body to be rebuilt and thus restored to normal operation
379 RecomputeChildWorldPosition(child, false);
380 child.LinksetInfo = null; 297 child.LinksetInfo = null;
381 child.ForceBodyShapeRebuild(false); 298 child.ForceBodyShapeRebuild(false);
382 299
@@ -399,108 +316,105 @@ public sealed class BSLinksetCompound : BSLinkset
399 // Constraint linksets are rebuilt every time. 316 // Constraint linksets are rebuilt every time.
400 // Note that this works for rebuilding just the root after a linkset is taken apart. 317 // Note that this works for rebuilding just the root after a linkset is taken apart.
401 // Called at taint time!! 318 // Called at taint time!!
402 private bool disableCOM = true; // DEBUG DEBUG: disable until we get this debugged 319 private bool UseBulletSimRootOffsetHack = false; // Attempt to have Bullet track the coords of root compound shape
320 private bool disableCOM = true; // For basic linkset debugging, turn off the center-of-mass setting
403 private void RecomputeLinksetCompound() 321 private void RecomputeLinksetCompound()
404 { 322 {
405 try 323 try
406 { 324 {
407 // Suppress rebuilding while rebuilding. (We know rebuilding is on only one thread.)
408 Rebuilding = true; 325 Rebuilding = true;
409 326
410 // Cause the root shape to be rebuilt as a compound object with just the root in it 327 // No matter what is being done, force the root prim's PhysBody and PhysShape to get set
411 LinksetRoot.ForceBodyShapeRebuild(true /* inTaintTime */); 328 // to what they should be as if the root was not in a linkset.
329 // Not that bad since we only get into this routine if there are children in the linkset and
330 // something has been updated/changed.
331 LinksetRoot.ForceBodyShapeRebuild(true);
412 332
413 // The center of mass for the linkset is the geometric center of the group. 333 // There is no reason to build all this physical stuff for a non-physical linkset.
414 // Compute a displacement for each component so it is relative to the center-of-mass. 334 if (!LinksetRoot.IsPhysicallyActive)
415 // Bullet presumes an object's origin (relative <0,0,0>) is its center-of-mass
416 OMV.Vector3 centerOfMassW = LinksetRoot.RawPosition;
417 if (!disableCOM) // DEBUG DEBUG
418 { 335 {
419 // Compute a center-of-mass in world coordinates. 336 // Clean up any old linkset shape and make sure the root shape is set to the root object.
420 centerOfMassW = ComputeLinksetCenterOfMass(); 337 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,notPhysical", LinksetRoot.LocalID);
421 }
422 338
423 OMV.Quaternion invRootOrientation = OMV.Quaternion.Inverse(LinksetRoot.RawOrientation); 339 return; // Note the 'finally' clause at the botton which will get executed.
424 340 }
425 // 'centerDisplacement' is the value to subtract from children to give physical offset position
426 OMV.Vector3 centerDisplacement = (centerOfMassW - LinksetRoot.RawPosition) * invRootOrientation;
427 LinksetRoot.SetEffectiveCenterOfMassW(centerDisplacement);
428 341
429 // This causes the physical position of the root prim to be offset to accomodate for the displacements 342 // Get a new compound shape to build the linkset shape in.
430 LinksetRoot.ForcePosition = LinksetRoot.RawPosition; 343 BSShape linksetShape = BSShapeCompound.GetReference(m_physicsScene);
431 344
432 // Update the local transform for the root child shape so it is offset from the <0,0,0> which is COM 345 // The center of mass for the linkset is the geometric center of the group.
433 PhysicsScene.PE.UpdateChildTransform(LinksetRoot.PhysShape, 0 /* childIndex */, 346 // Compute a displacement for each component so it is relative to the center-of-mass.
434 -centerDisplacement, 347 // Bullet presumes an object's origin (relative <0,0,0>) is its center-of-mass
435 OMV.Quaternion.Identity, // LinksetRoot.RawOrientation, 348 OMV.Vector3 centerOfMassW = ComputeLinksetCenterOfMass();
436 false /* shouldRecalculateLocalAabb (is done later after linkset built) */);
437 349
438 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,com={1},rootPos={2},centerDisp={3}", 350 OMV.Quaternion invRootOrientation = OMV.Quaternion.Normalize(OMV.Quaternion.Inverse(LinksetRoot.RawOrientation));
439 LinksetRoot.LocalID, centerOfMassW, LinksetRoot.RawPosition, centerDisplacement);
440 351
441 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,start,rBody={1},rShape={2},numChildren={3}", 352 // 'centerDisplacement' is the value to subtract from children to give physical offset position
442 LinksetRoot.LocalID, LinksetRoot.PhysBody, LinksetRoot.PhysShape, NumberOfChildren); 353 OMV.Vector3 centerDisplacementV = (centerOfMassW - LinksetRoot.RawPosition) * invRootOrientation;
354 if (UseBulletSimRootOffsetHack || disableCOM)
355 {
356 centerDisplacementV = OMV.Vector3.Zero;
357 LinksetRoot.ClearDisplacement();
358 }
359 else
360 {
361 LinksetRoot.SetEffectiveCenterOfMassDisplacement(centerDisplacementV);
362 }
363 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,rootPos={1},com={2},comDisp={3}",
364 LinksetRoot.LocalID, LinksetRoot.RawPosition, centerOfMassW, centerDisplacementV);
443 365
444 // Add a shape for each of the other children in the linkset 366 // Add the shapes of all the components of the linkset
445 int memberIndex = 1; 367 int memberIndex = 1;
446 ForEachMember(delegate(BSPrimLinkable cPrim) 368 ForEachMember(delegate(BSPrimLinkable cPrim)
447 { 369 {
448 if (IsRoot(cPrim)) 370 // Root shape is always index zero.
371 cPrim.LinksetChildIndex = IsRoot(cPrim) ? 0 : memberIndex;
372
373 // Get a reference to the shape of the child and add that shape to the linkset compound shape
374 BSShape childShape = cPrim.PhysShape.GetReference(m_physicsScene, cPrim);
375 OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacementV;
376 OMV.Quaternion offsetRot = OMV.Quaternion.Normalize(cPrim.RawOrientation) * invRootOrientation;
377 m_physicsScene.PE.AddChildShapeToCompoundShape(linksetShape.physShapeInfo, childShape.physShapeInfo, offsetPos, offsetRot);
378 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addChild,indx={1},cShape={2},offPos={3},offRot={4}",
379 LinksetRoot.LocalID, memberIndex, childShape, offsetPos, offsetRot);
380
381 // Since we are borrowing the shape of the child, disable the origional child body
382 if (!IsRoot(cPrim))
449 { 383 {
450 cPrim.LinksetChildIndex = 0; 384 m_physicsScene.PE.AddToCollisionFlags(cPrim.PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE);
385 m_physicsScene.PE.ForceActivationState(cPrim.PhysBody, ActivationState.DISABLE_SIMULATION);
386 // We don't want collisions from the old linkset children.
387 m_physicsScene.PE.RemoveFromCollisionFlags(cPrim.PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
388 cPrim.PhysBody.collisionType = CollisionType.LinksetChild;
451 } 389 }
452 else
453 {
454 cPrim.LinksetChildIndex = memberIndex;
455 390
456 if (cPrim.PhysShape.isNativeShape) 391 memberIndex++;
457 {
458 // A native shape is turned into a hull collision shape because native
459 // shapes are not shared so we have to hullify it so it will be tracked
460 // and freed at the correct time. This also solves the scaling problem
461 // (native shapes scale but hull/meshes are assumed to not be).
462 // TODO: decide of the native shape can just be used in the compound shape.
463 // Use call to CreateGeomNonSpecial().
464 BulletShape saveShape = cPrim.PhysShape;
465 cPrim.PhysShape.Clear(); // Don't let the create free the child's shape
466 PhysicsScene.Shapes.CreateGeomMeshOrHull(cPrim, null);
467 BulletShape newShape = cPrim.PhysShape;
468 cPrim.PhysShape = saveShape;
469
470 OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacement;
471 OMV.Quaternion offsetRot = cPrim.RawOrientation * invRootOrientation;
472 PhysicsScene.PE.AddChildShapeToCompoundShape(LinksetRoot.PhysShape, newShape, offsetPos, offsetRot);
473 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addNative,indx={1},rShape={2},cShape={3},offPos={4},offRot={5}",
474 LinksetRoot.LocalID, memberIndex, LinksetRoot.PhysShape, newShape, offsetPos, offsetRot);
475 }
476 else
477 {
478 // For the shared shapes (meshes and hulls), just use the shape in the child.
479 // The reference count added here will be decremented when the compound shape
480 // is destroyed in BSShapeCollection (the child shapes are looped over and dereferenced).
481 if (PhysicsScene.Shapes.ReferenceShape(cPrim.PhysShape))
482 {
483 PhysicsScene.Logger.ErrorFormat("{0} Rebuilt sharable shape when building linkset! Region={1}, primID={2}, shape={3}",
484 LogHeader, PhysicsScene.RegionName, cPrim.LocalID, cPrim.PhysShape);
485 }
486 OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacement;
487 OMV.Quaternion offsetRot = cPrim.RawOrientation * invRootOrientation;
488 PhysicsScene.PE.AddChildShapeToCompoundShape(LinksetRoot.PhysShape, cPrim.PhysShape, offsetPos, offsetRot);
489 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addNonNative,indx={1},rShape={2},cShape={3},offPos={4},offRot={5}",
490 LinksetRoot.LocalID, memberIndex, LinksetRoot.PhysShape, cPrim.PhysShape, offsetPos, offsetRot);
491 392
492 }
493 memberIndex++;
494 }
495 return false; // 'false' says to move onto the next child in the list 393 return false; // 'false' says to move onto the next child in the list
496 }); 394 });
497 395
396 // Replace the root shape with the built compound shape.
397 // Object removed and added to world to get collision cache rebuilt for new shape.
398 LinksetRoot.PhysShape.Dereference(m_physicsScene);
399 LinksetRoot.PhysShape = linksetShape;
400 m_physicsScene.PE.RemoveObjectFromWorld(m_physicsScene.World, LinksetRoot.PhysBody);
401 m_physicsScene.PE.SetCollisionShape(m_physicsScene.World, LinksetRoot.PhysBody, linksetShape.physShapeInfo);
402 m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, LinksetRoot.PhysBody);
403 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addBody,body={1},shape={2}",
404 LinksetRoot.LocalID, LinksetRoot.PhysBody, linksetShape);
405
498 // With all of the linkset packed into the root prim, it has the mass of everyone. 406 // With all of the linkset packed into the root prim, it has the mass of everyone.
499 LinksetMass = ComputeLinksetMass(); 407 LinksetMass = ComputeLinksetMass();
500 LinksetRoot.UpdatePhysicalMassProperties(LinksetMass, true); 408 LinksetRoot.UpdatePhysicalMassProperties(LinksetMass, true);
501 409
502 // Enable the physical position updator to return the position and rotation of the root shape 410 if (UseBulletSimRootOffsetHack)
503 PhysicsScene.PE.AddToCollisionFlags(LinksetRoot.PhysBody, CollisionFlags.BS_RETURN_ROOT_COMPOUND_SHAPE); 411 {
412 // Enable the physical position updator to return the position and rotation of the root shape.
413 // This enables a feature in the C++ code to return the world coordinates of the first shape in the
414 // compound shape. This eleviates the need to offset the returned physical position by the
415 // center-of-mass offset.
416 m_physicsScene.PE.AddToCollisionFlags(LinksetRoot.PhysBody, CollisionFlags.BS_RETURN_ROOT_COMPOUND_SHAPE);
417 }
504 } 418 }
505 finally 419 finally
506 { 420 {
@@ -508,7 +422,7 @@ public sealed class BSLinksetCompound : BSLinkset
508 } 422 }
509 423
510 // See that the Aabb surrounds the new shape 424 // See that the Aabb surrounds the new shape
511 PhysicsScene.PE.RecalculateCompoundShapeLocalAabb(LinksetRoot.PhysShape); 425 m_physicsScene.PE.RecalculateCompoundShapeLocalAabb(LinksetRoot.PhysShape.physShapeInfo);
512 } 426 }
513} 427}
514} \ No newline at end of file 428} \ No newline at end of file
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs
index 6d252ca..a06a44d 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs
@@ -51,7 +51,7 @@ public sealed class BSLinksetConstraints : BSLinkset
51 if (HasAnyChildren && IsRoot(requestor)) 51 if (HasAnyChildren && IsRoot(requestor))
52 { 52 {
53 // Queue to happen after all the other taint processing 53 // Queue to happen after all the other taint processing
54 PhysicsScene.PostTaintObject("BSLinksetContraints.Refresh", requestor.LocalID, delegate() 54 m_physicsScene.PostTaintObject("BSLinksetContraints.Refresh", requestor.LocalID, delegate()
55 { 55 {
56 if (HasAnyChildren && IsRoot(requestor)) 56 if (HasAnyChildren && IsRoot(requestor))
57 RecomputeLinksetConstraints(); 57 RecomputeLinksetConstraints();
@@ -93,11 +93,11 @@ public sealed class BSLinksetConstraints : BSLinkset
93 // up to rebuild the constraints before the next simulation step. 93 // up to rebuild the constraints before the next simulation step.
94 // Returns 'true' of something was actually removed and would need restoring 94 // Returns 'true' of something was actually removed and would need restoring
95 // Called at taint-time!! 95 // Called at taint-time!!
96 public override bool RemoveBodyDependencies(BSPrimLinkable child) 96 public override bool RemoveDependencies(BSPrimLinkable child)
97 { 97 {
98 bool ret = false; 98 bool ret = false;
99 99
100 DetailLog("{0},BSLinksetConstraint.RemoveBodyDependencies,removeChildrenForRoot,rID={1},rBody={2}", 100 DetailLog("{0},BSLinksetConstraint.RemoveDependencies,removeChildrenForRoot,rID={1},rBody={2}",
101 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody.AddrString); 101 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody.AddrString);
102 102
103 lock (m_linksetActivityLock) 103 lock (m_linksetActivityLock)
@@ -142,7 +142,7 @@ public sealed class BSLinksetConstraints : BSLinkset
142 rootx.LocalID, rootx.PhysBody.AddrString, 142 rootx.LocalID, rootx.PhysBody.AddrString,
143 childx.LocalID, childx.PhysBody.AddrString); 143 childx.LocalID, childx.PhysBody.AddrString);
144 144
145 PhysicsScene.TaintedObject("BSLinksetConstraints.RemoveChildFromLinkset", delegate() 145 m_physicsScene.TaintedObject("BSLinksetConstraints.RemoveChildFromLinkset", delegate()
146 { 146 {
147 PhysicallyUnlinkAChildFromRoot(rootx, childx); 147 PhysicallyUnlinkAChildFromRoot(rootx, childx);
148 }); 148 });
@@ -187,7 +187,7 @@ public sealed class BSLinksetConstraints : BSLinkset
187 // http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4818 187 // http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4818
188 188
189 BSConstraint6Dof constrain = new BSConstraint6Dof( 189 BSConstraint6Dof constrain = new BSConstraint6Dof(
190 PhysicsScene.World, rootPrim.PhysBody, childPrim.PhysBody, midPoint, true, true ); 190 m_physicsScene.World, rootPrim.PhysBody, childPrim.PhysBody, midPoint, true, true );
191 // PhysicsScene.World, childPrim.BSBody, rootPrim.BSBody, midPoint, true, true ); 191 // PhysicsScene.World, childPrim.BSBody, rootPrim.BSBody, midPoint, true, true );
192 192
193 /* NOTE: below is an attempt to build constraint with full frame computation, etc. 193 /* NOTE: below is an attempt to build constraint with full frame computation, etc.
@@ -216,7 +216,7 @@ public sealed class BSLinksetConstraints : BSLinkset
216 // ================================================================================== 216 // ==================================================================================
217 */ 217 */
218 218
219 PhysicsScene.Constraints.AddConstraint(constrain); 219 m_physicsScene.Constraints.AddConstraint(constrain);
220 220
221 // zero linear and angular limits makes the objects unable to move in relation to each other 221 // zero linear and angular limits makes the objects unable to move in relation to each other
222 constrain.SetLinearLimits(OMV.Vector3.Zero, OMV.Vector3.Zero); 222 constrain.SetLinearLimits(OMV.Vector3.Zero, OMV.Vector3.Zero);
@@ -248,10 +248,10 @@ public sealed class BSLinksetConstraints : BSLinkset
248 childPrim.LocalID, childPrim.PhysBody.AddrString); 248 childPrim.LocalID, childPrim.PhysBody.AddrString);
249 249
250 // Find the constraint for this link and get rid of it from the overall collection and from my list 250 // Find the constraint for this link and get rid of it from the overall collection and from my list
251 if (PhysicsScene.Constraints.RemoveAndDestroyConstraint(rootPrim.PhysBody, childPrim.PhysBody)) 251 if (m_physicsScene.Constraints.RemoveAndDestroyConstraint(rootPrim.PhysBody, childPrim.PhysBody))
252 { 252 {
253 // Make the child refresh its location 253 // Make the child refresh its location
254 PhysicsScene.PE.PushUpdate(childPrim.PhysBody); 254 m_physicsScene.PE.PushUpdate(childPrim.PhysBody);
255 ret = true; 255 ret = true;
256 } 256 }
257 257
@@ -265,7 +265,7 @@ public sealed class BSLinksetConstraints : BSLinkset
265 { 265 {
266 DetailLog("{0},BSLinksetConstraint.PhysicallyUnlinkAllChildren,taint", rootPrim.LocalID); 266 DetailLog("{0},BSLinksetConstraint.PhysicallyUnlinkAllChildren,taint", rootPrim.LocalID);
267 267
268 return PhysicsScene.Constraints.RemoveAndDestroyConstraint(rootPrim.PhysBody); 268 return m_physicsScene.Constraints.RemoveAndDestroyConstraint(rootPrim.PhysBody);
269 } 269 }
270 270
271 // Call each of the constraints that make up this linkset and recompute the 271 // Call each of the constraints that make up this linkset and recompute the
@@ -289,7 +289,7 @@ public sealed class BSLinksetConstraints : BSLinkset
289 child.UpdatePhysicalMassProperties(linksetMass, true); 289 child.UpdatePhysicalMassProperties(linksetMass, true);
290 290
291 BSConstraint constrain; 291 BSConstraint constrain;
292 if (!PhysicsScene.Constraints.TryGetConstraint(LinksetRoot.PhysBody, child.PhysBody, out constrain)) 292 if (!m_physicsScene.Constraints.TryGetConstraint(LinksetRoot.PhysBody, child.PhysBody, out constrain))
293 { 293 {
294 // If constraint doesn't exist yet, create it. 294 // If constraint doesn't exist yet, create it.
295 constrain = BuildConstraint(LinksetRoot, child); 295 constrain = BuildConstraint(LinksetRoot, child);
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
index 9501e2d..ef662b5 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
@@ -65,13 +65,11 @@ public abstract class BSMotor
65} 65}
66 66
67// Motor which moves CurrentValue to TargetValue over TimeScale seconds. 67// Motor which moves CurrentValue to TargetValue over TimeScale seconds.
68// The TargetValue decays in TargetValueDecayTimeScale and 68// The TargetValue decays in TargetValueDecayTimeScale.
69// the CurrentValue will be held back by FrictionTimeScale.
70// This motor will "zero itself" over time in that the targetValue will 69// This motor will "zero itself" over time in that the targetValue will
71// decay to zero and the currentValue will follow it to that zero. 70// decay to zero and the currentValue will follow it to that zero.
72// The overall effect is for the returned correction value to go from large 71// The overall effect is for the returned correction value to go from large
73// values (the total difference between current and target minus friction) 72// values to small and eventually zero values.
74// to small and eventually zero values.
75// TimeScale and TargetDelayTimeScale may be 'infinite' which means no decay. 73// TimeScale and TargetDelayTimeScale may be 'infinite' which means no decay.
76 74
77// For instance, if something is moving at speed X and the desired speed is Y, 75// For instance, if something is moving at speed X and the desired speed is Y,
@@ -88,7 +86,6 @@ public class BSVMotor : BSMotor
88 86
89 public virtual float TimeScale { get; set; } 87 public virtual float TimeScale { get; set; }
90 public virtual float TargetValueDecayTimeScale { get; set; } 88 public virtual float TargetValueDecayTimeScale { get; set; }
91 public virtual Vector3 FrictionTimescale { get; set; }
92 public virtual float Efficiency { get; set; } 89 public virtual float Efficiency { get; set; }
93 90
94 public virtual float ErrorZeroThreshold { get; set; } 91 public virtual float ErrorZeroThreshold { get; set; }
@@ -102,7 +99,7 @@ public class BSVMotor : BSMotor
102 return ErrorIsZero(LastError); 99 return ErrorIsZero(LastError);
103 } 100 }
104 public virtual bool ErrorIsZero(Vector3 err) 101 public virtual bool ErrorIsZero(Vector3 err)
105 { 102 {
106 return (err == Vector3.Zero || err.ApproxEquals(Vector3.Zero, ErrorZeroThreshold)); 103 return (err == Vector3.Zero || err.ApproxEquals(Vector3.Zero, ErrorZeroThreshold));
107 } 104 }
108 105
@@ -111,16 +108,14 @@ public class BSVMotor : BSMotor
111 { 108 {
112 TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; 109 TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite;
113 Efficiency = 1f; 110 Efficiency = 1f;
114 FrictionTimescale = BSMotor.InfiniteVector;
115 CurrentValue = TargetValue = Vector3.Zero; 111 CurrentValue = TargetValue = Vector3.Zero;
116 ErrorZeroThreshold = 0.001f; 112 ErrorZeroThreshold = 0.001f;
117 } 113 }
118 public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency) 114 public BSVMotor(string useName, float timeScale, float decayTimeScale, float efficiency)
119 : this(useName) 115 : this(useName)
120 { 116 {
121 TimeScale = timeScale; 117 TimeScale = timeScale;
122 TargetValueDecayTimeScale = decayTimeScale; 118 TargetValueDecayTimeScale = decayTimeScale;
123 FrictionTimescale = frictionTimeScale;
124 Efficiency = efficiency; 119 Efficiency = efficiency;
125 CurrentValue = TargetValue = Vector3.Zero; 120 CurrentValue = TargetValue = Vector3.Zero;
126 } 121 }
@@ -165,26 +160,11 @@ public class BSVMotor : BSMotor
165 TargetValue *= (1f - decayFactor); 160 TargetValue *= (1f - decayFactor);
166 } 161 }
167 162
168 // The amount we can correct the error is reduced by the friction
169 Vector3 frictionFactor = Vector3.Zero;
170 if (FrictionTimescale != BSMotor.InfiniteVector)
171 {
172 // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep;
173 // Individual friction components can be 'infinite' so compute each separately.
174 frictionFactor.X = (FrictionTimescale.X == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.X);
175 frictionFactor.Y = (FrictionTimescale.Y == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.Y);
176 frictionFactor.Z = (FrictionTimescale.Z == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.Z);
177 frictionFactor *= timeStep;
178 CurrentValue *= (Vector3.One - frictionFactor);
179 }
180
181 MDetailLog("{0}, BSVMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", 163 MDetailLog("{0}, BSVMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}",
182 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, 164 BSScene.DetailLogZero, UseName, origCurrVal, origTarget,
183 timeStep, error, correction); 165 timeStep, error, correction);
184 MDetailLog("{0}, BSVMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},frictTS={4},frictFact={5},tgt={6},curr={7}", 166 MDetailLog("{0}, BSVMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},tgt={4},curr={5}",
185 BSScene.DetailLogZero, UseName, 167 BSScene.DetailLogZero, UseName, TargetValueDecayTimeScale, decayFactor, TargetValue, CurrentValue);
186 TargetValueDecayTimeScale, decayFactor, FrictionTimescale, frictionFactor,
187 TargetValue, CurrentValue);
188 } 168 }
189 else 169 else
190 { 170 {
@@ -235,9 +215,9 @@ public class BSVMotor : BSMotor
235 // maximum number of outputs to generate. 215 // maximum number of outputs to generate.
236 int maxOutput = 50; 216 int maxOutput = 50;
237 MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName); 217 MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName);
238 MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},frictTS={4},eff={5},curr={6},tgt={7}", 218 MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},eff={4},curr={5},tgt={6}",
239 BSScene.DetailLogZero, UseName, 219 BSScene.DetailLogZero, UseName,
240 TimeScale, TargetValueDecayTimeScale, FrictionTimescale, Efficiency, 220 TimeScale, TargetValueDecayTimeScale, Efficiency,
241 CurrentValue, TargetValue); 221 CurrentValue, TargetValue);
242 222
243 LastError = BSMotor.InfiniteVector; 223 LastError = BSMotor.InfiniteVector;
@@ -248,14 +228,14 @@ public class BSVMotor : BSMotor
248 BSScene.DetailLogZero, UseName, CurrentValue, TargetValue, LastError, lastStep); 228 BSScene.DetailLogZero, UseName, CurrentValue, TargetValue, LastError, lastStep);
249 } 229 }
250 MDetailLog("{0},BSVMotor.Test,{1},===================================== END Test Output", BSScene.DetailLogZero, UseName); 230 MDetailLog("{0},BSVMotor.Test,{1},===================================== END Test Output", BSScene.DetailLogZero, UseName);
251 231
252 232
253 } 233 }
254 234
255 public override string ToString() 235 public override string ToString()
256 { 236 {
257 return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4},frictTS={5}>", 237 return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4}>",
258 UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale, FrictionTimescale); 238 UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale);
259 } 239 }
260} 240}
261 241
@@ -265,7 +245,6 @@ public class BSFMotor : BSMotor
265{ 245{
266 public virtual float TimeScale { get; set; } 246 public virtual float TimeScale { get; set; }
267 public virtual float TargetValueDecayTimeScale { get; set; } 247 public virtual float TargetValueDecayTimeScale { get; set; }
268 public virtual float FrictionTimescale { get; set; }
269 public virtual float Efficiency { get; set; } 248 public virtual float Efficiency { get; set; }
270 249
271 public virtual float ErrorZeroThreshold { get; set; } 250 public virtual float ErrorZeroThreshold { get; set; }
@@ -279,16 +258,15 @@ public class BSFMotor : BSMotor
279 return ErrorIsZero(LastError); 258 return ErrorIsZero(LastError);
280 } 259 }
281 public virtual bool ErrorIsZero(float err) 260 public virtual bool ErrorIsZero(float err)
282 { 261 {
283 return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold); 262 return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold);
284 } 263 }
285 264
286 public BSFMotor(string useName, float timeScale, float decayTimescale, float friction, float efficiency) 265 public BSFMotor(string useName, float timeScale, float decayTimescale, float efficiency)
287 : base(useName) 266 : base(useName)
288 { 267 {
289 TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; 268 TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite;
290 Efficiency = 1f; 269 Efficiency = 1f;
291 FrictionTimescale = BSMotor.Infinite;
292 CurrentValue = TargetValue = 0f; 270 CurrentValue = TargetValue = 0f;
293 ErrorZeroThreshold = 0.01f; 271 ErrorZeroThreshold = 0.01f;
294 } 272 }
@@ -331,24 +309,11 @@ public class BSFMotor : BSMotor
331 TargetValue *= (1f - decayFactor); 309 TargetValue *= (1f - decayFactor);
332 } 310 }
333 311
334 // The amount we can correct the error is reduced by the friction
335 float frictionFactor = 0f;
336 if (FrictionTimescale != BSMotor.Infinite)
337 {
338 // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep;
339 // Individual friction components can be 'infinite' so compute each separately.
340 frictionFactor = 1f / FrictionTimescale;
341 frictionFactor *= timeStep;
342 CurrentValue *= (1f - frictionFactor);
343 }
344
345 MDetailLog("{0}, BSFMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", 312 MDetailLog("{0}, BSFMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}",
346 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, 313 BSScene.DetailLogZero, UseName, origCurrVal, origTarget,
347 timeStep, error, correction); 314 timeStep, error, correction);
348 MDetailLog("{0}, BSFMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},frictTS={4},frictFact={5},tgt={6},curr={7}", 315 MDetailLog("{0}, BSFMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},tgt={4},curr={5}",
349 BSScene.DetailLogZero, UseName, 316 BSScene.DetailLogZero, UseName, TargetValueDecayTimeScale, decayFactor, TargetValue, CurrentValue);
350 TargetValueDecayTimeScale, decayFactor, FrictionTimescale, frictionFactor,
351 TargetValue, CurrentValue);
352 } 317 }
353 else 318 else
354 { 319 {
@@ -390,8 +355,8 @@ public class BSFMotor : BSMotor
390 355
391 public override string ToString() 356 public override string ToString()
392 { 357 {
393 return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4},frictTS={5}>", 358 return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4}>",
394 UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale, FrictionTimescale); 359 UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale);
395 } 360 }
396 361
397} 362}
@@ -410,7 +375,7 @@ public class BSPIDVMotor : BSVMotor
410 // The factors are vectors for the three dimensions. This is the proportional of each 375 // The factors are vectors for the three dimensions. This is the proportional of each
411 // that is applied. This could be multiplied through the actual factors but it 376 // that is applied. This could be multiplied through the actual factors but it
412 // is sometimes easier to manipulate the factors and their mix separately. 377 // is sometimes easier to manipulate the factors and their mix separately.
413 // to 378 // to
414 public Vector3 FactorMix; 379 public Vector3 FactorMix;
415 380
416 // Arbritrary factor range. 381 // Arbritrary factor range.
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
index 385ed9e..aad1108 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
@@ -26,6 +26,7 @@
26 */ 26 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection;
29using System.Text; 30using System.Text;
30 31
31using OpenSim.Region.Physics.Manager; 32using OpenSim.Region.Physics.Manager;
@@ -37,7 +38,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
37{ 38{
38public static class BSParam 39public static class BSParam
39{ 40{
40 private static string LogHeader = "[BULLETSIM PARAMETERS]"; 41 private static string LogHeader = "[BULLETSIM PARAMETERS]";
41 42
42 // Tuning notes: 43 // Tuning notes:
43 // From: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6575 44 // From: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6575
@@ -51,7 +52,10 @@ public static class BSParam
51 // This is separate/independent from the collision margin. The collision margin increases the object a bit 52 // This is separate/independent from the collision margin. The collision margin increases the object a bit
52 // to improve collision detection performance and accuracy. 53 // to improve collision detection performance and accuracy.
53 // =================== 54 // ===================
54 // From: 55 // From:
56
57 public static bool UseSeparatePhysicsThread { get; private set; }
58 public static float PhysicsTimeStep { get; private set; }
55 59
56 // Level of Detail values kept as float because that's what the Meshmerizer wants 60 // Level of Detail values kept as float because that's what the Meshmerizer wants
57 public static float MeshLOD { get; private set; } 61 public static float MeshLOD { get; private set; }
@@ -86,8 +90,12 @@ public static class BSParam
86 public static bool ShouldForceSimplePrimMeshing { get; private set; } // if a cube or sphere, let Bullet do internal shapes 90 public static bool ShouldForceSimplePrimMeshing { get; private set; } // if a cube or sphere, let Bullet do internal shapes
87 public static bool ShouldUseHullsForPhysicalObjects { get; private set; } // 'true' if should create hulls for physical objects 91 public static bool ShouldUseHullsForPhysicalObjects { get; private set; } // 'true' if should create hulls for physical objects
88 public static bool ShouldRemoveZeroWidthTriangles { get; private set; } 92 public static bool ShouldRemoveZeroWidthTriangles { get; private set; }
93 public static bool ShouldUseBulletHACD { get; set; }
94 public static bool ShouldUseSingleConvexHullForPrims { get; set; }
95 public static bool ShouldUseGImpactShapeForPrims { get; set; }
96 public static bool ShouldUseAssetHulls { get; set; }
89 97
90 public static float TerrainImplementation { get; private set; } 98 public static float TerrainImplementation { get; set; }
91 public static int TerrainMeshMagnification { get; private set; } 99 public static int TerrainMeshMagnification { get; private set; }
92 public static float TerrainFriction { get; private set; } 100 public static float TerrainFriction { get; private set; }
93 public static float TerrainHitFraction { get; private set; } 101 public static float TerrainHitFraction { get; private set; }
@@ -122,11 +130,16 @@ public static class BSParam
122 public static float AvatarCapsuleWidth { get; private set; } 130 public static float AvatarCapsuleWidth { get; private set; }
123 public static float AvatarCapsuleDepth { get; private set; } 131 public static float AvatarCapsuleDepth { get; private set; }
124 public static float AvatarCapsuleHeight { get; private set; } 132 public static float AvatarCapsuleHeight { get; private set; }
133 public static float AvatarHeightLowFudge { get; private set; }
134 public static float AvatarHeightMidFudge { get; private set; }
135 public static float AvatarHeightHighFudge { get; private set; }
125 public static float AvatarContactProcessingThreshold { get; private set; } 136 public static float AvatarContactProcessingThreshold { get; private set; }
126 public static float AvatarBelowGroundUpCorrectionMeters { get; private set; } 137 public static float AvatarBelowGroundUpCorrectionMeters { get; private set; }
127 public static float AvatarStepHeight { get; private set; } 138 public static float AvatarStepHeight { get; private set; }
128 public static float AvatarStepApproachFactor { get; private set; } 139 public static float AvatarStepApproachFactor { get; private set; }
129 public static float AvatarStepForceFactor { get; private set; } 140 public static float AvatarStepForceFactor { get; private set; }
141 public static float AvatarStepUpCorrectionFactor { get; private set; }
142 public static int AvatarStepSmoothingSteps { get; private set; }
130 143
131 // Vehicle parameters 144 // Vehicle parameters
132 public static float VehicleMaxLinearVelocity { get; private set; } 145 public static float VehicleMaxLinearVelocity { get; private set; }
@@ -138,9 +151,10 @@ public static class BSParam
138 public static float VehicleRestitution { get; private set; } 151 public static float VehicleRestitution { get; private set; }
139 public static Vector3 VehicleLinearFactor { get; private set; } 152 public static Vector3 VehicleLinearFactor { get; private set; }
140 public static Vector3 VehicleAngularFactor { get; private set; } 153 public static Vector3 VehicleAngularFactor { get; private set; }
154 public static Vector3 VehicleInertiaFactor { get; private set; }
141 public static float VehicleGroundGravityFudge { get; private set; } 155 public static float VehicleGroundGravityFudge { get; private set; }
142 public static float VehicleAngularBankingTimescaleFudge { get; private set; } 156 public static float VehicleAngularBankingTimescaleFudge { get; private set; }
143 public static bool VehicleDebuggingEnabled { get; private set; } 157 public static bool VehicleDebuggingEnable { get; private set; }
144 158
145 // Convex Hulls 159 // Convex Hulls
146 public static int CSHullMaxDepthSplit { get; private set; } 160 public static int CSHullMaxDepthSplit { get; private set; }
@@ -149,6 +163,15 @@ public static class BSParam
149 public static float CSHullVolumeConservationThresholdPercent { get; private set; } 163 public static float CSHullVolumeConservationThresholdPercent { get; private set; }
150 public static int CSHullMaxVertices { get; private set; } 164 public static int CSHullMaxVertices { get; private set; }
151 public static float CSHullMaxSkinWidth { get; private set; } 165 public static float CSHullMaxSkinWidth { get; private set; }
166 public static float BHullMaxVerticesPerHull { get; private set; } // 100
167 public static float BHullMinClusters { get; private set; } // 2
168 public static float BHullCompacityWeight { get; private set; } // 0.1
169 public static float BHullVolumeWeight { get; private set; } // 0.0
170 public static float BHullConcavity { get; private set; } // 100
171 public static bool BHullAddExtraDistPoints { get; private set; } // false
172 public static bool BHullAddNeighboursDistPoints { get; private set; } // false
173 public static bool BHullAddFacesPoints { get; private set; } // false
174 public static bool BHullShouldAdjustCollisionMargin { get; private set; } // false
152 175
153 // Linkset implementation parameters 176 // Linkset implementation parameters
154 public static float LinksetImplementation { get; private set; } 177 public static float LinksetImplementation { get; private set; }
@@ -223,16 +246,41 @@ public static class BSParam
223 getter = pGetter; 246 getter = pGetter;
224 objectSet = pObjSetter; 247 objectSet = pObjSetter;
225 } 248 }
226 /* Wish I could simplify using this definition but CLR doesn't store references so closure around delegates of references won't work 249 // Simple parameter variable where property name is the same as the INI file name
227 public ParameterDefn(string pName, string pDesc, T pDefault, ref T loc) 250 // and the value is only a simple get and set.
251 public ParameterDefn(string pName, string pDesc, T pDefault)
228 : base(pName, pDesc) 252 : base(pName, pDesc)
229 { 253 {
230 defaultValue = pDefault; 254 defaultValue = pDefault;
231 setter = (s, v) => { loc = v; }; 255 setter = (s, v) => { SetValueByName(s, name, v); };
232 getter = (s) => { return loc; }; 256 getter = (s) => { return GetValueByName(s, name); };
233 objectSet = null; 257 objectSet = null;
234 } 258 }
235 */ 259 // Use reflection to find the property named 'pName' in BSParam and assign 'val' to same.
260 private void SetValueByName(BSScene s, string pName, T val)
261 {
262 PropertyInfo prop = typeof(BSParam).GetProperty(pName, BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
263 if (prop == null)
264 {
265 // This should only be output when someone adds a new INI parameter and misspells the name.
266 s.Logger.ErrorFormat("{0} SetValueByName: did not find '{1}'. Verify specified property name is the same as the given INI parameters name.", LogHeader, pName);
267 }
268 else
269 {
270 prop.SetValue(null, val, null);
271 }
272 }
273 // Use reflection to find the property named 'pName' in BSParam and return the value in same.
274 private T GetValueByName(BSScene s, string pName)
275 {
276 PropertyInfo prop = typeof(BSParam).GetProperty(pName, BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
277 if (prop == null)
278 {
279 // This should only be output when someone adds a new INI parameter and misspells the name.
280 s.Logger.ErrorFormat("{0} GetValueByName: did not find '{1}'. Verify specified property name is the same as the given INI parameter name.", LogHeader, pName);
281 }
282 return (T)prop.GetValue(null, null);
283 }
236 public override void AssignDefault(BSScene s) 284 public override void AssignDefault(BSScene s)
237 { 285 {
238 setter(s, defaultValue); 286 setter(s, defaultValue);
@@ -309,6 +357,11 @@ public static class BSParam
309 // v = value (appropriate type) 357 // v = value (appropriate type)
310 private static ParameterDefnBase[] ParameterDefinitions = 358 private static ParameterDefnBase[] ParameterDefinitions =
311 { 359 {
360 new ParameterDefn<bool>("UseSeparatePhysicsThread", "If 'true', the physics engine runs independent from the simulator heartbeat",
361 false ),
362 new ParameterDefn<float>("PhysicsTimeStep", "If separate thread, seconds to simulate each interval",
363 0.089f ),
364
312 new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties", 365 new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties",
313 true, 366 true,
314 (s) => { return ShouldMeshSculptedPrim; }, 367 (s) => { return ShouldMeshSculptedPrim; },
@@ -322,18 +375,20 @@ public static class BSParam
322 (s) => { return ShouldUseHullsForPhysicalObjects; }, 375 (s) => { return ShouldUseHullsForPhysicalObjects; },
323 (s,v) => { ShouldUseHullsForPhysicalObjects = v; } ), 376 (s,v) => { ShouldUseHullsForPhysicalObjects = v; } ),
324 new ParameterDefn<bool>("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes", 377 new ParameterDefn<bool>("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes",
325 true, 378 true ),
326 (s) => { return ShouldRemoveZeroWidthTriangles; }, 379 new ParameterDefn<bool>("ShouldUseBulletHACD", "If true, use the Bullet version of HACD",
327 (s,v) => { ShouldRemoveZeroWidthTriangles = v; } ), 380 false ),
381 new ParameterDefn<bool>("ShouldUseSingleConvexHullForPrims", "If true, use a single convex hull shape for physical prims",
382 true ),
383 new ParameterDefn<bool>("ShouldUseGImpactShapeForPrims", "If true, use a GImpact shape for prims with cuts and twists",
384 false ),
385 new ParameterDefn<bool>("ShouldUseAssetHulls", "If true, use hull if specified in the mesh asset info",
386 true ),
328 387
329 new ParameterDefn<int>("CrossingFailuresBeforeOutOfBounds", "How forgiving we are about getting into adjactent regions", 388 new ParameterDefn<int>("CrossingFailuresBeforeOutOfBounds", "How forgiving we are about getting into adjactent regions",
330 5, 389 5 ),
331 (s) => { return CrossingFailuresBeforeOutOfBounds; },
332 (s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ),
333 new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator", 390 new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator",
334 0.1f, 391 0.1f ),
335 (s) => { return UpdateVelocityChangeThreshold; },
336 (s,v) => { UpdateVelocityChangeThreshold = v; } ),
337 392
338 new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", 393 new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)",
339 32f, 394 32f,
@@ -400,18 +455,12 @@ public static class BSParam
400 (s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ), 455 (s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ),
401 // Density is passed around as 100kg/m3. This scales that to 1kg/m3. 456 // Density is passed around as 100kg/m3. This scales that to 1kg/m3.
402 new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", 457 new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)",
403 0.01f, 458 0.01f ),
404 (s) => { return DensityScaleFactor; },
405 (s,v) => { DensityScaleFactor = v; } ),
406 459
407 new ParameterDefn<float>("PID_D", "Derivitive factor for motion smoothing", 460 new ParameterDefn<float>("PID_D", "Derivitive factor for motion smoothing",
408 2200f, 461 2200f ),
409 (s) => { return (float)PID_D; },
410 (s,v) => { PID_D = v; } ),
411 new ParameterDefn<float>("PID_P", "Parameteric factor for motion smoothing", 462 new ParameterDefn<float>("PID_P", "Parameteric factor for motion smoothing",
412 900f, 463 900f ),
413 (s) => { return (float)PID_P; },
414 (s,v) => { PID_P = v; } ),
415 464
416 new ParameterDefn<float>("DefaultFriction", "Friction factor used on new objects", 465 new ParameterDefn<float>("DefaultFriction", "Friction factor used on new objects",
417 0.2f, 466 0.2f,
@@ -478,86 +527,56 @@ public static class BSParam
478 (s,o) => { s.PE.SetContactProcessingThreshold(o.PhysBody, ContactProcessingThreshold); } ), 527 (s,o) => { s.PE.SetContactProcessingThreshold(o.PhysBody, ContactProcessingThreshold); } ),
479 528
480 new ParameterDefn<float>("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)", 529 new ParameterDefn<float>("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)",
481 (float)BSTerrainPhys.TerrainImplementation.Mesh, 530 (float)BSTerrainPhys.TerrainImplementation.Mesh ),
482 (s) => { return TerrainImplementation; },
483 (s,v) => { TerrainImplementation = v; } ),
484 new ParameterDefn<int>("TerrainMeshMagnification", "Number of times the 256x256 heightmap is multiplied to create the terrain mesh" , 531 new ParameterDefn<int>("TerrainMeshMagnification", "Number of times the 256x256 heightmap is multiplied to create the terrain mesh" ,
485 2, 532 2 ),
486 (s) => { return TerrainMeshMagnification; },
487 (s,v) => { TerrainMeshMagnification = v; } ),
488 new ParameterDefn<float>("TerrainFriction", "Factor to reduce movement against terrain surface" , 533 new ParameterDefn<float>("TerrainFriction", "Factor to reduce movement against terrain surface" ,
489 0.3f, 534 0.3f ),
490 (s) => { return TerrainFriction; },
491 (s,v) => { TerrainFriction = v; /* TODO: set on real terrain */} ),
492 new ParameterDefn<float>("TerrainHitFraction", "Distance to measure hit collisions" , 535 new ParameterDefn<float>("TerrainHitFraction", "Distance to measure hit collisions" ,
493 0.8f, 536 0.8f ),
494 (s) => { return TerrainHitFraction; },
495 (s,v) => { TerrainHitFraction = v; /* TODO: set on real terrain */ } ),
496 new ParameterDefn<float>("TerrainRestitution", "Bouncyness" , 537 new ParameterDefn<float>("TerrainRestitution", "Bouncyness" ,
497 0f, 538 0f ),
498 (s) => { return TerrainRestitution; },
499 (s,v) => { TerrainRestitution = v; /* TODO: set on real terrain */ } ),
500 new ParameterDefn<float>("TerrainContactProcessingThreshold", "Distance from terrain to stop processing collisions" , 539 new ParameterDefn<float>("TerrainContactProcessingThreshold", "Distance from terrain to stop processing collisions" ,
501 0.0f, 540 0.0f ),
502 (s) => { return TerrainContactProcessingThreshold; },
503 (s,v) => { TerrainContactProcessingThreshold = v; /* TODO: set on real terrain */ } ),
504 new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" , 541 new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" ,
505 0.08f, 542 0.08f ),
506 (s) => { return TerrainCollisionMargin; },
507 (s,v) => { TerrainCollisionMargin = v; /* TODO: set on real terrain */ } ),
508 543
509 new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", 544 new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.",
510 0.2f, 545 0.2f ),
511 (s) => { return AvatarFriction; },
512 (s,v) => { AvatarFriction = v; } ),
513 new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", 546 new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.",
514 0.95f, 547 0.95f ),
515 (s) => { return AvatarStandingFriction; },
516 (s,v) => { AvatarStandingFriction = v; } ),
517 new ParameterDefn<float>("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run", 548 new ParameterDefn<float>("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run",
518 1.3f, 549 1.3f ),
519 (s) => { return AvatarAlwaysRunFactor; },
520 (s,v) => { AvatarAlwaysRunFactor = v; } ),
521 new ParameterDefn<float>("AvatarDensity", "Density of an avatar. Changed on avatar recreation.", 550 new ParameterDefn<float>("AvatarDensity", "Density of an avatar. Changed on avatar recreation.",
522 3.5f, 551 3.5f) ,
523 (s) => { return AvatarDensity; },
524 (s,v) => { AvatarDensity = v; } ),
525 new ParameterDefn<float>("AvatarRestitution", "Bouncyness. Changed on avatar recreation.", 552 new ParameterDefn<float>("AvatarRestitution", "Bouncyness. Changed on avatar recreation.",
526 0f, 553 0f ),
527 (s) => { return AvatarRestitution; },
528 (s,v) => { AvatarRestitution = v; } ),
529 new ParameterDefn<float>("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule", 554 new ParameterDefn<float>("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule",
530 0.6f, 555 0.6f ) ,
531 (s) => { return AvatarCapsuleWidth; },
532 (s,v) => { AvatarCapsuleWidth = v; } ),
533 new ParameterDefn<float>("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule", 556 new ParameterDefn<float>("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule",
534 0.45f, 557 0.45f ),
535 (s) => { return AvatarCapsuleDepth; },
536 (s,v) => { AvatarCapsuleDepth = v; } ),
537 new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", 558 new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar",
538 1.5f, 559 1.5f ),
539 (s) => { return AvatarCapsuleHeight; }, 560 new ParameterDefn<float>("AvatarHeightLowFudge", "A fudge factor to make small avatars stand on the ground",
540 (s,v) => { AvatarCapsuleHeight = v; } ), 561 -0.2f ),
562 new ParameterDefn<float>("AvatarHeightMidFudge", "A fudge distance to adjust average sized avatars to be standing on ground",
563 0.1f ),
564 new ParameterDefn<float>("AvatarHeightHighFudge", "A fudge factor to make tall avatars stand on the ground",
565 0.1f ),
541 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", 566 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions",
542 0.1f, 567 0.1f ),
543 (s) => { return AvatarContactProcessingThreshold; },
544 (s,v) => { AvatarContactProcessingThreshold = v; } ),
545 new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", 568 new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground",
546 1.0f, 569 1.0f ),
547 (s) => { return AvatarBelowGroundUpCorrectionMeters; },
548 (s,v) => { AvatarBelowGroundUpCorrectionMeters = v; } ),
549 new ParameterDefn<float>("AvatarStepHeight", "Height of a step obstacle to consider step correction", 570 new ParameterDefn<float>("AvatarStepHeight", "Height of a step obstacle to consider step correction",
550 0.3f, 571 0.6f ) ,
551 (s) => { return AvatarStepHeight; },
552 (s,v) => { AvatarStepHeight = v; } ),
553 new ParameterDefn<float>("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)", 572 new ParameterDefn<float>("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)",
554 0.6f, 573 0.6f ),
555 (s) => { return AvatarStepApproachFactor; },
556 (s,v) => { AvatarStepApproachFactor = v; } ),
557 new ParameterDefn<float>("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step", 574 new ParameterDefn<float>("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step",
558 2.0f, 575 1.0f ),
559 (s) => { return AvatarStepForceFactor; }, 576 new ParameterDefn<float>("AvatarStepUpCorrectionFactor", "Multiplied by height of step collision to create up movement at step",
560 (s,v) => { AvatarStepForceFactor = v; } ), 577 1.0f ),
578 new ParameterDefn<int>("AvatarStepSmoothingSteps", "Number of frames after a step collision that we continue walking up stairs",
579 2 ),
561 580
562 new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", 581 new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle",
563 1000.0f, 582 1000.0f,
@@ -568,37 +587,23 @@ public static class BSParam
568 (s) => { return (float)VehicleMaxAngularVelocity; }, 587 (s) => { return (float)VehicleMaxAngularVelocity; },
569 (s,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ), 588 (s,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ),
570 new ParameterDefn<float>("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)", 589 new ParameterDefn<float>("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)",
571 0.0f, 590 0.0f ),
572 (s) => { return VehicleAngularDamping; },
573 (s,v) => { VehicleAngularDamping = v; } ),
574 new ParameterDefn<Vector3>("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (<0,0,0> to <1,1,1>)", 591 new ParameterDefn<Vector3>("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (<0,0,0> to <1,1,1>)",
575 new Vector3(1f, 1f, 1f), 592 new Vector3(1f, 1f, 1f) ),
576 (s) => { return VehicleLinearFactor; },
577 (s,v) => { VehicleLinearFactor = v; } ),
578 new ParameterDefn<Vector3>("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (<0,0,0> to <1,1,1>)", 593 new ParameterDefn<Vector3>("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (<0,0,0> to <1,1,1>)",
579 new Vector3(1f, 1f, 1f), 594 new Vector3(1f, 1f, 1f) ),
580 (s) => { return VehicleAngularFactor; }, 595 new ParameterDefn<Vector3>("VehicleInertiaFactor", "Fraction of physical inertia applied (<0,0,0> to <1,1,1>)",
581 (s,v) => { VehicleAngularFactor = v; } ), 596 new Vector3(1f, 1f, 1f) ),
582 new ParameterDefn<float>("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)", 597 new ParameterDefn<float>("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)",
583 0.0f, 598 0.0f ),
584 (s) => { return VehicleFriction; },
585 (s,v) => { VehicleFriction = v; } ),
586 new ParameterDefn<float>("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)", 599 new ParameterDefn<float>("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)",
587 0.0f, 600 0.0f ),
588 (s) => { return VehicleRestitution; },
589 (s,v) => { VehicleRestitution = v; } ),
590 new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiply gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", 601 new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiply gravity if a ground vehicle is probably on the ground (0.0 - 1.0)",
591 0.2f, 602 0.2f ),
592 (s) => { return VehicleGroundGravityFudge; },
593 (s,v) => { VehicleGroundGravityFudge = v; } ),
594 new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.", 603 new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.",
595 60.0f, 604 60.0f ),
596 (s) => { return VehicleAngularBankingTimescaleFudge; },
597 (s,v) => { VehicleAngularBankingTimescaleFudge = v; } ),
598 new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging", 605 new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging",
599 false, 606 false ),
600 (s) => { return VehicleDebuggingEnabled; },
601 (s,v) => { VehicleDebuggingEnabled = v; } ),
602 607
603 new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)", 608 new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)",
604 0f, 609 0f,
@@ -611,7 +616,7 @@ public static class BSParam
611 new ParameterDefn<bool>("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count", 616 new ParameterDefn<bool>("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count",
612 false, 617 false,
613 (s) => { return ShouldDisableContactPoolDynamicAllocation; }, 618 (s) => { return ShouldDisableContactPoolDynamicAllocation; },
614 (s,v) => { ShouldDisableContactPoolDynamicAllocation = v; 619 (s,v) => { ShouldDisableContactPoolDynamicAllocation = v;
615 s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = NumericBool(v); } ), 620 s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = NumericBool(v); } ),
616 new ParameterDefn<bool>("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step", 621 new ParameterDefn<bool>("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step",
617 false, 622 false,
@@ -643,62 +648,53 @@ public static class BSParam
643 (s,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ), 648 (s,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ),
644 649
645 new ParameterDefn<int>("CSHullMaxDepthSplit", "CS impl: max depth to split for hull. 1-10 but > 7 is iffy", 650 new ParameterDefn<int>("CSHullMaxDepthSplit", "CS impl: max depth to split for hull. 1-10 but > 7 is iffy",
646 7, 651 7 ),
647 (s) => { return CSHullMaxDepthSplit; },
648 (s,v) => { CSHullMaxDepthSplit = v; } ),
649 new ParameterDefn<int>("CSHullMaxDepthSplitForSimpleShapes", "CS impl: max depth setting for simple prim shapes", 652 new ParameterDefn<int>("CSHullMaxDepthSplitForSimpleShapes", "CS impl: max depth setting for simple prim shapes",
650 2, 653 2 ),
651 (s) => { return CSHullMaxDepthSplitForSimpleShapes; },
652 (s,v) => { CSHullMaxDepthSplitForSimpleShapes = v; } ),
653 new ParameterDefn<float>("CSHullConcavityThresholdPercent", "CS impl: concavity threshold percent (0-20)", 654 new ParameterDefn<float>("CSHullConcavityThresholdPercent", "CS impl: concavity threshold percent (0-20)",
654 5f, 655 5f ),
655 (s) => { return CSHullConcavityThresholdPercent; },
656 (s,v) => { CSHullConcavityThresholdPercent = v; } ),
657 new ParameterDefn<float>("CSHullVolumeConservationThresholdPercent", "percent volume conservation to collapse hulls (0-30)", 656 new ParameterDefn<float>("CSHullVolumeConservationThresholdPercent", "percent volume conservation to collapse hulls (0-30)",
658 5f, 657 5f ),
659 (s) => { return CSHullVolumeConservationThresholdPercent; },
660 (s,v) => { CSHullVolumeConservationThresholdPercent = v; } ),
661 new ParameterDefn<int>("CSHullMaxVertices", "CS impl: maximum number of vertices in output hulls. Keep < 50.", 658 new ParameterDefn<int>("CSHullMaxVertices", "CS impl: maximum number of vertices in output hulls. Keep < 50.",
662 32, 659 32 ),
663 (s) => { return CSHullMaxVertices; },
664 (s,v) => { CSHullMaxVertices = v; } ),
665 new ParameterDefn<float>("CSHullMaxSkinWidth", "CS impl: skin width to apply to output hulls.", 660 new ParameterDefn<float>("CSHullMaxSkinWidth", "CS impl: skin width to apply to output hulls.",
666 0, 661 0f ),
667 (s) => { return CSHullMaxSkinWidth; }, 662
668 (s,v) => { CSHullMaxSkinWidth = v; } ), 663 new ParameterDefn<float>("BHullMaxVerticesPerHull", "Bullet impl: max number of vertices per created hull",
664 100f ),
665 new ParameterDefn<float>("BHullMinClusters", "Bullet impl: minimum number of hulls to create per mesh",
666 2f ),
667 new ParameterDefn<float>("BHullCompacityWeight", "Bullet impl: weight factor for how compact to make hulls",
668 0.1f ),
669 new ParameterDefn<float>("BHullVolumeWeight", "Bullet impl: weight factor for volume in created hull",
670 0f ),
671 new ParameterDefn<float>("BHullConcavity", "Bullet impl: weight factor for how convex a created hull can be",
672 100f ),
673 new ParameterDefn<bool>("BHullAddExtraDistPoints", "Bullet impl: whether to add extra vertices for long distance vectors",
674 false ),
675 new ParameterDefn<bool>("BHullAddNeighboursDistPoints", "Bullet impl: whether to add extra vertices between neighbor hulls",
676 false ),
677 new ParameterDefn<bool>("BHullAddFacesPoints", "Bullet impl: whether to add extra vertices to break up hull faces",
678 false ),
679 new ParameterDefn<bool>("BHullShouldAdjustCollisionMargin", "Bullet impl: whether to shrink resulting hulls to account for collision margin",
680 false ),
669 681
670 new ParameterDefn<float>("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)", 682 new ParameterDefn<float>("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)",
671 (float)BSLinkset.LinksetImplementation.Compound, 683 (float)BSLinkset.LinksetImplementation.Compound ),
672 (s) => { return LinksetImplementation; },
673 (s,v) => { LinksetImplementation = v; } ),
674 new ParameterDefn<bool>("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.", 684 new ParameterDefn<bool>("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.",
675 false, 685 false ),
676 (s) => { return LinkConstraintUseFrameOffset; },
677 (s,v) => { LinkConstraintUseFrameOffset = v; } ),
678 new ParameterDefn<bool>("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints", 686 new ParameterDefn<bool>("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints",
679 true, 687 true ),
680 (s) => { return LinkConstraintEnableTransMotor; },
681 (s,v) => { LinkConstraintEnableTransMotor = v; } ),
682 new ParameterDefn<float>("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints", 688 new ParameterDefn<float>("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints",
683 5.0f, 689 5.0f ),
684 (s) => { return LinkConstraintTransMotorMaxVel; },
685 (s,v) => { LinkConstraintTransMotorMaxVel = v; } ),
686 new ParameterDefn<float>("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints", 690 new ParameterDefn<float>("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints",
687 0.1f, 691 0.1f ),
688 (s) => { return LinkConstraintTransMotorMaxForce; },
689 (s,v) => { LinkConstraintTransMotorMaxForce = v; } ),
690 new ParameterDefn<float>("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", 692 new ParameterDefn<float>("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1",
691 0.1f, 693 0.1f ),
692 (s) => { return LinkConstraintCFM; },
693 (s,v) => { LinkConstraintCFM = v; } ),
694 new ParameterDefn<float>("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", 694 new ParameterDefn<float>("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2",
695 0.1f, 695 0.1f ),
696 (s) => { return LinkConstraintERP; },
697 (s,v) => { LinkConstraintERP = v; } ),
698 new ParameterDefn<float>("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)", 696 new ParameterDefn<float>("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)",
699 40, 697 40 ),
700 (s) => { return LinkConstraintSolverIterations; },
701 (s,v) => { LinkConstraintSolverIterations = v; } ),
702 698
703 new ParameterDefn<int>("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", 699 new ParameterDefn<int>("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)",
704 0, 700 0,
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 6bb88c7..cca887a 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -38,12 +38,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
38 * Class to wrap all objects. 38 * Class to wrap all objects.
39 * The rest of BulletSim doesn't need to keep checking for avatars or prims 39 * The rest of BulletSim doesn't need to keep checking for avatars or prims
40 * unless the difference is significant. 40 * unless the difference is significant.
41 * 41 *
42 * Variables in the physicsl objects are in three forms: 42 * Variables in the physicsl objects are in three forms:
43 * VariableName: used by the simulator and performs taint operations, etc 43 * VariableName: used by the simulator and performs taint operations, etc
44 * RawVariableName: direct reference to the BulletSim storage for the variable value 44 * RawVariableName: direct reference to the BulletSim storage for the variable value
45 * ForceVariableName: direct reference (store and fetch) to the value in the physics engine. 45 * ForceVariableName: direct reference (store and fetch) to the value in the physics engine.
46 * The last two (and certainly the last one) should be referenced only in taint-time. 46 * The last one should only be referenced in taint-time.
47 */ 47 */
48 48
49/* 49/*
@@ -52,7 +52,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
52 * SOP.ApplyImpulse SOP.ApplyAngularImpulse SOP.SetAngularImpulse SOP.SetForce 52 * SOP.ApplyImpulse SOP.ApplyAngularImpulse SOP.SetAngularImpulse SOP.SetForce
53 * SOG.ApplyImpulse SOG.ApplyAngularImpulse SOG.SetAngularImpulse 53 * SOG.ApplyImpulse SOG.ApplyAngularImpulse SOG.SetAngularImpulse
54 * PA.AddForce PA.AddAngularForce PA.Torque = v PA.Force = v 54 * PA.AddForce PA.AddAngularForce PA.Torque = v PA.Force = v
55 * BS.ApplyCentralForce BS.ApplyTorque 55 * BS.ApplyCentralForce BS.ApplyTorque
56 */ 56 */
57 57
58// Flags used to denote which properties updates when making UpdateProperties calls to linksets, etc. 58// Flags used to denote which properties updates when making UpdateProperties calls to linksets, etc.
@@ -72,19 +72,23 @@ public abstract class BSPhysObject : PhysicsActor
72 } 72 }
73 protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName) 73 protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName)
74 { 74 {
75 PhysicsScene = parentScene; 75 PhysScene = parentScene;
76 LocalID = localID; 76 LocalID = localID;
77 PhysObjectName = name; 77 PhysObjectName = name;
78 Name = name; // PhysicsActor also has the name of the object. Someday consolidate. 78 Name = name; // PhysicsActor also has the name of the object. Someday consolidate.
79 TypeName = typeName; 79 TypeName = typeName;
80 80
81 // The collection of things that push me around
82 PhysicalActors = new BSActorCollection(PhysScene);
83
81 // Initialize variables kept in base. 84 // Initialize variables kept in base.
82 GravModifier = 1.0f; 85 GravModifier = 1.0f;
83 Gravity = new OMV.Vector3(0f, 0f, BSParam.Gravity); 86 Gravity = new OMV.Vector3(0f, 0f, BSParam.Gravity);
87 HoverActive = false;
84 88
85 // We don't have any physical representation yet. 89 // We don't have any physical representation yet.
86 PhysBody = new BulletBody(localID); 90 PhysBody = new BulletBody(localID);
87 PhysShape = new BulletShape(); 91 PhysShape = new BSShapeNull();
88 92
89 PrimAssetState = PrimAssetCondition.Unknown; 93 PrimAssetState = PrimAssetCondition.Unknown;
90 94
@@ -92,7 +96,10 @@ public abstract class BSPhysObject : PhysicsActor
92 SetMaterial((int)MaterialAttributes.Material.Wood); 96 SetMaterial((int)MaterialAttributes.Material.Wood);
93 97
94 CollisionCollection = new CollisionEventUpdate(); 98 CollisionCollection = new CollisionEventUpdate();
95 CollisionsLastTick = CollisionCollection; 99 CollisionsLastReported = CollisionCollection;
100 CollisionsLastTick = new CollisionEventUpdate();
101 CollisionsLastTickStep = -1;
102
96 SubscribedEventsMs = 0; 103 SubscribedEventsMs = 0;
97 CollidingStep = 0; 104 CollidingStep = 0;
98 CollidingGroundStep = 0; 105 CollidingGroundStep = 0;
@@ -101,17 +108,21 @@ public abstract class BSPhysObject : PhysicsActor
101 CollisionScore = 0; 108 CollisionScore = 0;
102 109
103 // All axis free. 110 // All axis free.
104 LockedAxis = LockedAxisFree; 111 LockedLinearAxis = LockedAxisFree;
112 LockedAngularAxis = LockedAxisFree;
105 } 113 }
106 114
107 // Tell the object to clean up. 115 // Tell the object to clean up.
108 public virtual void Destroy() 116 public virtual void Destroy()
109 { 117 {
110 UnRegisterAllPreStepActions(); 118 PhysicalActors.Enable(false);
111 UnRegisterAllPostStepActions(); 119 PhysScene.TaintedObject("BSPhysObject.Destroy", delegate()
120 {
121 PhysicalActors.Dispose();
122 });
112 } 123 }
113 124
114 public BSScene PhysicsScene { get; protected set; } 125 public BSScene PhysScene { get; protected set; }
115 // public override uint LocalID { get; set; } // Use the LocalID definition in PhysicsActor 126 // public override uint LocalID { get; set; } // Use the LocalID definition in PhysicsActor
116 public string PhysObjectName { get; protected set; } 127 public string PhysObjectName { get; protected set; }
117 public string TypeName { get; protected set; } 128 public string TypeName { get; protected set; }
@@ -131,7 +142,7 @@ public abstract class BSPhysObject : PhysicsActor
131 // Reference to the physical body (btCollisionObject) of this object 142 // Reference to the physical body (btCollisionObject) of this object
132 public BulletBody PhysBody; 143 public BulletBody PhysBody;
133 // Reference to the physical shape (btCollisionShape) of this object 144 // Reference to the physical shape (btCollisionShape) of this object
134 public BulletShape PhysShape; 145 public BSShape PhysShape;
135 146
136 // The physical representation of the prim might require an asset fetch. 147 // The physical representation of the prim might require an asset fetch.
137 // The asset state is first 'Unknown' then 'Waiting' then either 'Failed' or 'Fetched'. 148 // The asset state is first 'Unknown' then 'Waiting' then either 'Failed' or 'Fetched'.
@@ -144,13 +155,6 @@ public abstract class BSPhysObject : PhysicsActor
144 // The objects base shape information. Null if not a prim type shape. 155 // The objects base shape information. Null if not a prim type shape.
145 public PrimitiveBaseShape BaseShape { get; protected set; } 156 public PrimitiveBaseShape BaseShape { get; protected set; }
146 157
147 // Some types of objects have preferred physical representations.
148 // Returns SHAPE_UNKNOWN if there is no preference.
149 public virtual BSPhysicsShapeType PreferredPhysicalShape
150 {
151 get { return BSPhysicsShapeType.SHAPE_UNKNOWN; }
152 }
153
154 // When the physical properties are updated, an EntityProperty holds the update values. 158 // When the physical properties are updated, an EntityProperty holds the update values.
155 // Keep the current and last EntityProperties to enable computation of differences 159 // Keep the current and last EntityProperties to enable computation of differences
156 // between the current update and the previous values. 160 // between the current update and the previous values.
@@ -180,7 +184,7 @@ public abstract class BSPhysObject : PhysicsActor
180 Friction = matAttrib.friction; 184 Friction = matAttrib.friction;
181 Restitution = matAttrib.restitution; 185 Restitution = matAttrib.restitution;
182 Density = matAttrib.density / BSParam.DensityScaleFactor; 186 Density = matAttrib.density / BSParam.DensityScaleFactor;
183 DetailLog("{0},{1}.SetMaterial,Mat={2},frict={3},rest={4},den={5}", LocalID, TypeName, Material, Friction, Restitution, Density); 187 // DetailLog("{0},{1}.SetMaterial,Mat={2},frict={3},rest={4},den={5}", LocalID, TypeName, Material, Friction, Restitution, Density);
184 } 188 }
185 189
186 // Stop all physical motion. 190 // Stop all physical motion.
@@ -196,15 +200,48 @@ public abstract class BSPhysObject : PhysicsActor
196 public abstract OMV.Quaternion RawOrientation { get; set; } 200 public abstract OMV.Quaternion RawOrientation { get; set; }
197 public abstract OMV.Quaternion ForceOrientation { get; set; } 201 public abstract OMV.Quaternion ForceOrientation { get; set; }
198 202
199 public abstract OMV.Vector3 RawVelocity { get; set; } 203 public OMV.Vector3 RawVelocity { get; set; }
200 public abstract OMV.Vector3 ForceVelocity { get; set; } 204 public abstract OMV.Vector3 ForceVelocity { get; set; }
201 205
206 public OMV.Vector3 RawForce { get; set; }
207 public OMV.Vector3 RawTorque { get; set; }
208 public override void AddAngularForce(OMV.Vector3 force, bool pushforce)
209 {
210 AddAngularForce(force, pushforce, false);
211 }
212 public abstract void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime);
213
202 public abstract OMV.Vector3 ForceRotationalVelocity { get; set; } 214 public abstract OMV.Vector3 ForceRotationalVelocity { get; set; }
203 215
204 public abstract float ForceBuoyancy { get; set; } 216 public abstract float ForceBuoyancy { get; set; }
205 217
206 public virtual bool ForceBodyShapeRebuild(bool inTaintTime) { return false; } 218 public virtual bool ForceBodyShapeRebuild(bool inTaintTime) { return false; }
207 219
220 public override bool PIDActive { set { MoveToTargetActive = value; } }
221 public override OMV.Vector3 PIDTarget { set { MoveToTargetTarget = value; } }
222 public override float PIDTau { set { MoveToTargetTau = value; } }
223
224 public bool MoveToTargetActive { get; set; }
225 public OMV.Vector3 MoveToTargetTarget { get; set; }
226 public float MoveToTargetTau { get; set; }
227
228 // Used for llSetHoverHeight and maybe vehicle height. Hover Height will override MoveTo target's Z
229 public override bool PIDHoverActive { set { HoverActive = value; } }
230 public override float PIDHoverHeight { set { HoverHeight = value; } }
231 public override PIDHoverType PIDHoverType { set { HoverType = value; } }
232 public override float PIDHoverTau { set { HoverTau = value; } }
233
234 public bool HoverActive { get; set; }
235 public float HoverHeight { get; set; }
236 public PIDHoverType HoverType { get; set; }
237 public float HoverTau { get; set; }
238
239 // For RotLookAt
240 public override OMV.Quaternion APIDTarget { set { return; } }
241 public override bool APIDActive { set { return; } }
242 public override float APIDStrength { set { return; } }
243 public override float APIDDamping { set { return; } }
244
208 // The current velocity forward 245 // The current velocity forward
209 public virtual float ForwardSpeed 246 public virtual float ForwardSpeed
210 { 247 {
@@ -226,10 +263,58 @@ public abstract class BSPhysObject : PhysicsActor
226 263
227 // The user can optionally set the center of mass. The user's setting will override any 264 // The user can optionally set the center of mass. The user's setting will override any
228 // computed center-of-mass (like in linksets). 265 // computed center-of-mass (like in linksets).
229 public OMV.Vector3? UserSetCenterOfMass { get; set; } 266 // Note this is a displacement from the root's coordinates. Zero means use the root prim as center-of-mass.
267 public OMV.Vector3? UserSetCenterOfMassDisplacement { get; set; }
268
269 public OMV.Vector3 LockedLinearAxis { get; set; } // zero means locked. one means free.
270 public OMV.Vector3 LockedAngularAxis { get; set; } // zero means locked. one means free.
271 public const float FreeAxis = 1f;
272 public readonly OMV.Vector3 LockedAxisFree = new OMV.Vector3(FreeAxis, FreeAxis, FreeAxis); // All axis are free
273
274 // Enable physical actions. Bullet will keep sleeping non-moving physical objects so
275 // they need waking up when parameters are changed.
276 // Called in taint-time!!
277 public void ActivateIfPhysical(bool forceIt)
278 {
279 if (IsPhysical && PhysBody.HasPhysicalBody)
280 PhysScene.PE.Activate(PhysBody, forceIt);
281 }
230 282
231 public OMV.Vector3 LockedAxis { get; set; } // zero means locked. one means free. 283 // 'actors' act on the physical object to change or constrain its motion. These can range from
232 public readonly OMV.Vector3 LockedAxisFree = new OMV.Vector3(1f, 1f, 1f); // All axis are free 284 // hovering to complex vehicle motion.
285 // May be called at non-taint time as this just adds the actor to the action list and the real
286 // work is done during the simulation step.
287 // Note that, if the actor is already in the list and we are disabling same, the actor is just left
288 // in the list disabled.
289 public delegate BSActor CreateActor();
290 public void EnableActor(bool enableActor, string actorName, CreateActor creator)
291 {
292 lock (PhysicalActors)
293 {
294 BSActor theActor;
295 if (PhysicalActors.TryGetActor(actorName, out theActor))
296 {
297 // The actor already exists so just turn it on or off
298 DetailLog("{0},BSPhysObject.EnableActor,enablingExistingActor,name={1},enable={2}", LocalID, actorName, enableActor);
299 theActor.Enabled = enableActor;
300 }
301 else
302 {
303 // The actor does not exist. If it should, create it.
304 if (enableActor)
305 {
306 DetailLog("{0},BSPhysObject.EnableActor,creatingActor,name={1}", LocalID, actorName);
307 theActor = creator();
308 PhysicalActors.Add(actorName, theActor);
309 theActor.Enabled = true;
310 }
311 else
312 {
313 DetailLog("{0},BSPhysObject.EnableActor,notCreatingActorSinceNotEnabled,name={1}", LocalID, actorName);
314 }
315 }
316 }
317 }
233 318
234 #region Collisions 319 #region Collisions
235 320
@@ -247,45 +332,50 @@ public abstract class BSPhysObject : PhysicsActor
247 protected CollisionFlags CurrentCollisionFlags { get; set; } 332 protected CollisionFlags CurrentCollisionFlags { get; set; }
248 // On a collision, check the collider and remember if the last collider was moving 333 // On a collision, check the collider and remember if the last collider was moving
249 // Used to modify the standing of avatars (avatars on stationary things stand still) 334 // Used to modify the standing of avatars (avatars on stationary things stand still)
250 protected bool ColliderIsMoving; 335 public bool ColliderIsMoving;
336 // Used by BSCharacter to manage standing (and not slipping)
337 public bool IsStationary;
251 338
252 // Count of collisions for this object 339 // Count of collisions for this object
253 protected long CollisionAccumulation { get; set; } 340 protected long CollisionAccumulation { get; set; }
254 341
255 public override bool IsColliding { 342 public override bool IsColliding {
256 get { return (CollidingStep == PhysicsScene.SimulationStep); } 343 get { return (CollidingStep == PhysScene.SimulationStep); }
257 set { 344 set {
258 if (value) 345 if (value)
259 CollidingStep = PhysicsScene.SimulationStep; 346 CollidingStep = PhysScene.SimulationStep;
260 else 347 else
261 CollidingStep = 0; 348 CollidingStep = 0;
262 } 349 }
263 } 350 }
264 public override bool CollidingGround { 351 public override bool CollidingGround {
265 get { return (CollidingGroundStep == PhysicsScene.SimulationStep); } 352 get { return (CollidingGroundStep == PhysScene.SimulationStep); }
266 set 353 set
267 { 354 {
268 if (value) 355 if (value)
269 CollidingGroundStep = PhysicsScene.SimulationStep; 356 CollidingGroundStep = PhysScene.SimulationStep;
270 else 357 else
271 CollidingGroundStep = 0; 358 CollidingGroundStep = 0;
272 } 359 }
273 } 360 }
274 public override bool CollidingObj { 361 public override bool CollidingObj {
275 get { return (CollidingObjectStep == PhysicsScene.SimulationStep); } 362 get { return (CollidingObjectStep == PhysScene.SimulationStep); }
276 set { 363 set {
277 if (value) 364 if (value)
278 CollidingObjectStep = PhysicsScene.SimulationStep; 365 CollidingObjectStep = PhysScene.SimulationStep;
279 else 366 else
280 CollidingObjectStep = 0; 367 CollidingObjectStep = 0;
281 } 368 }
282 } 369 }
283 370
284 // The collisions that have been collected this tick 371 // The collisions that have been collected for the next collision reporting (throttled by subscription)
285 protected CollisionEventUpdate CollisionCollection; 372 protected CollisionEventUpdate CollisionCollection;
286 // Remember collisions from last tick for fancy collision based actions 373 // This is the collision collection last reported to the Simulator.
374 public CollisionEventUpdate CollisionsLastReported;
375 // Remember the collisions recorded in the last tick for fancy collision checking
287 // (like a BSCharacter walking up stairs). 376 // (like a BSCharacter walking up stairs).
288 protected CollisionEventUpdate CollisionsLastTick; 377 public CollisionEventUpdate CollisionsLastTick;
378 private long CollisionsLastTickStep = -1;
289 379
290 // The simulation step is telling this object about a collision. 380 // The simulation step is telling this object about a collision.
291 // Return 'true' if a collision was processed and should be sent up. 381 // Return 'true' if a collision was processed and should be sent up.
@@ -297,14 +387,14 @@ public abstract class BSPhysObject : PhysicsActor
297 bool ret = false; 387 bool ret = false;
298 388
299 // The following lines make IsColliding(), CollidingGround() and CollidingObj work 389 // The following lines make IsColliding(), CollidingGround() and CollidingObj work
300 CollidingStep = PhysicsScene.SimulationStep; 390 CollidingStep = PhysScene.SimulationStep;
301 if (collidingWith <= PhysicsScene.TerrainManager.HighestTerrainID) 391 if (collidingWith <= PhysScene.TerrainManager.HighestTerrainID)
302 { 392 {
303 CollidingGroundStep = PhysicsScene.SimulationStep; 393 CollidingGroundStep = PhysScene.SimulationStep;
304 } 394 }
305 else 395 else
306 { 396 {
307 CollidingObjectStep = PhysicsScene.SimulationStep; 397 CollidingObjectStep = PhysScene.SimulationStep;
308 } 398 }
309 399
310 CollisionAccumulation++; 400 CollisionAccumulation++;
@@ -312,6 +402,15 @@ public abstract class BSPhysObject : PhysicsActor
312 // For movement tests, remember if we are colliding with an object that is moving. 402 // For movement tests, remember if we are colliding with an object that is moving.
313 ColliderIsMoving = collidee != null ? (collidee.RawVelocity != OMV.Vector3.Zero) : false; 403 ColliderIsMoving = collidee != null ? (collidee.RawVelocity != OMV.Vector3.Zero) : false;
314 404
405 // Make a collection of the collisions that happened the last simulation tick.
406 // This is different than the collection created for sending up to the simulator as it is cleared every tick.
407 if (CollisionsLastTickStep != PhysScene.SimulationStep)
408 {
409 CollisionsLastTick = new CollisionEventUpdate();
410 CollisionsLastTickStep = PhysScene.SimulationStep;
411 }
412 CollisionsLastTick.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
413
315 // If someone has subscribed for collision events log the collision so it will be reported up 414 // If someone has subscribed for collision events log the collision so it will be reported up
316 if (SubscribedEvents()) { 415 if (SubscribedEvents()) {
317 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); 416 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
@@ -332,12 +431,12 @@ public abstract class BSPhysObject : PhysicsActor
332 bool ret = true; 431 bool ret = true;
333 432
334 // If the 'no collision' call, force it to happen right now so quick collision_end 433 // If the 'no collision' call, force it to happen right now so quick collision_end
335 bool force = (CollisionCollection.Count == 0 && CollisionsLastTick.Count != 0); 434 bool force = (CollisionCollection.Count == 0 && CollisionsLastReported.Count != 0);
336 435
337 // throttle the collisions to the number of milliseconds specified in the subscription 436 // throttle the collisions to the number of milliseconds specified in the subscription
338 if (force || (PhysicsScene.SimulationNowTime >= NextCollisionOkTime)) 437 if (force || (PhysScene.SimulationNowTime >= NextCollisionOkTime))
339 { 438 {
340 NextCollisionOkTime = PhysicsScene.SimulationNowTime + SubscribedEventsMs; 439 NextCollisionOkTime = PhysScene.SimulationNowTime + SubscribedEventsMs;
341 440
342 // We are called if we previously had collisions. If there are no collisions 441 // We are called if we previously had collisions. If there are no collisions
343 // this time, send up one last empty event so OpenSim can sense collision end. 442 // this time, send up one last empty event so OpenSim can sense collision end.
@@ -351,11 +450,11 @@ public abstract class BSPhysObject : PhysicsActor
351 base.SendCollisionUpdate(CollisionCollection); 450 base.SendCollisionUpdate(CollisionCollection);
352 451
353 // Remember the collisions from this tick for some collision specific processing. 452 // Remember the collisions from this tick for some collision specific processing.
354 CollisionsLastTick = CollisionCollection; 453 CollisionsLastReported = CollisionCollection;
355 454
356 // The CollisionCollection instance is passed around in the simulator. 455 // The CollisionCollection instance is passed around in the simulator.
357 // Make sure we don't have a handle to that one and that a new one is used for next time. 456 // Make sure we don't have a handle to that one and that a new one is used for next time.
358 // This fixes an interesting 'gotcha'. If we call CollisionCollection.Clear() here, 457 // This fixes an interesting 'gotcha'. If we call CollisionCollection.Clear() here,
359 // a race condition is created for the other users of this instance. 458 // a race condition is created for the other users of this instance.
360 CollisionCollection = new CollisionEventUpdate(); 459 CollisionCollection = new CollisionEventUpdate();
361 } 460 }
@@ -372,10 +471,10 @@ public abstract class BSPhysObject : PhysicsActor
372 // make sure first collision happens 471 // make sure first collision happens
373 NextCollisionOkTime = Util.EnvironmentTickCountSubtract(SubscribedEventsMs); 472 NextCollisionOkTime = Util.EnvironmentTickCountSubtract(SubscribedEventsMs);
374 473
375 PhysicsScene.TaintedObject(TypeName+".SubscribeEvents", delegate() 474 PhysScene.TaintedObject(TypeName+".SubscribeEvents", delegate()
376 { 475 {
377 if (PhysBody.HasPhysicalBody) 476 if (PhysBody.HasPhysicalBody)
378 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); 477 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
379 }); 478 });
380 } 479 }
381 else 480 else
@@ -387,11 +486,11 @@ public abstract class BSPhysObject : PhysicsActor
387 public override void UnSubscribeEvents() { 486 public override void UnSubscribeEvents() {
388 // DetailLog("{0},{1}.UnSubscribeEvents,unsubscribing", LocalID, TypeName); 487 // DetailLog("{0},{1}.UnSubscribeEvents,unsubscribing", LocalID, TypeName);
389 SubscribedEventsMs = 0; 488 SubscribedEventsMs = 0;
390 PhysicsScene.TaintedObject(TypeName+".UnSubscribeEvents", delegate() 489 PhysScene.TaintedObject(TypeName+".UnSubscribeEvents", delegate()
391 { 490 {
392 // Make sure there is a body there because sometimes destruction happens in an un-ideal order. 491 // Make sure there is a body there because sometimes destruction happens in an un-ideal order.
393 if (PhysBody.HasPhysicalBody) 492 if (PhysBody.HasPhysicalBody)
394 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); 493 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
395 }); 494 });
396 } 495 }
397 // Return 'true' if the simulator wants collision events 496 // Return 'true' if the simulator wants collision events
@@ -405,7 +504,7 @@ public abstract class BSPhysObject : PhysicsActor
405 { 504 {
406 // Scale the collision count by the time since the last collision. 505 // Scale the collision count by the time since the last collision.
407 // The "+1" prevents dividing by zero. 506 // The "+1" prevents dividing by zero.
408 long timeAgo = PhysicsScene.SimulationStep - CollidingStep + 1; 507 long timeAgo = PhysScene.SimulationStep - CollidingStep + 1;
409 CollisionScore = CollisionAccumulation / timeAgo; 508 CollisionScore = CollisionAccumulation / timeAgo;
410 } 509 }
411 public override float CollisionScore { get; set; } 510 public override float CollisionScore { get; set; }
@@ -413,103 +512,8 @@ public abstract class BSPhysObject : PhysicsActor
413 #endregion // Collisions 512 #endregion // Collisions
414 513
415 #region Per Simulation Step actions 514 #region Per Simulation Step actions
416 // There are some actions that must be performed for a physical object before each simulation step.
417 // These actions are optional so, rather than scanning all the physical objects and asking them
418 // if they have anything to do, a physical object registers for an event call before the step is performed.
419 // This bookkeeping makes it easy to add, remove and clean up after all these registrations.
420 private Dictionary<string, BSScene.PreStepAction> RegisteredPrestepActions = new Dictionary<string, BSScene.PreStepAction>();
421 private Dictionary<string, BSScene.PostStepAction> RegisteredPoststepActions = new Dictionary<string, BSScene.PostStepAction>();
422 protected void RegisterPreStepAction(string op, uint id, BSScene.PreStepAction actn)
423 {
424 string identifier = op + "-" + id.ToString();
425 515
426 lock (RegisteredPrestepActions) 516 public BSActorCollection PhysicalActors;
427 {
428 // Clean out any existing action
429 UnRegisterPreStepAction(op, id);
430 RegisteredPrestepActions[identifier] = actn;
431 PhysicsScene.BeforeStep += actn;
432 }
433 DetailLog("{0},BSPhysObject.RegisterPreStepAction,id={1}", LocalID, identifier);
434 }
435
436 // Unregister a pre step action. Safe to call if the action has not been registered.
437 // Returns 'true' if an action was actually removed
438 protected bool UnRegisterPreStepAction(string op, uint id)
439 {
440 string identifier = op + "-" + id.ToString();
441 bool removed = false;
442 lock (RegisteredPrestepActions)
443 {
444 if (RegisteredPrestepActions.ContainsKey(identifier))
445 {
446 PhysicsScene.BeforeStep -= RegisteredPrestepActions[identifier];
447 RegisteredPrestepActions.Remove(identifier);
448 removed = true;
449 }
450 }
451 DetailLog("{0},BSPhysObject.UnRegisterPreStepAction,id={1},removed={2}", LocalID, identifier, removed);
452 return removed;
453 }
454
455 protected void UnRegisterAllPreStepActions()
456 {
457 lock (RegisteredPrestepActions)
458 {
459 foreach (KeyValuePair<string, BSScene.PreStepAction> kvp in RegisteredPrestepActions)
460 {
461 PhysicsScene.BeforeStep -= kvp.Value;
462 }
463 RegisteredPrestepActions.Clear();
464 }
465 DetailLog("{0},BSPhysObject.UnRegisterAllPreStepActions,", LocalID);
466 }
467
468 protected void RegisterPostStepAction(string op, uint id, BSScene.PostStepAction actn)
469 {
470 string identifier = op + "-" + id.ToString();
471
472 lock (RegisteredPoststepActions)
473 {
474 // Clean out any existing action
475 UnRegisterPostStepAction(op, id);
476 RegisteredPoststepActions[identifier] = actn;
477 PhysicsScene.AfterStep += actn;
478 }
479 DetailLog("{0},BSPhysObject.RegisterPostStepAction,id={1}", LocalID, identifier);
480 }
481
482 // Unregister a pre step action. Safe to call if the action has not been registered.
483 // Returns 'true' if an action was actually removed.
484 protected bool UnRegisterPostStepAction(string op, uint id)
485 {
486 string identifier = op + "-" + id.ToString();
487 bool removed = false;
488 lock (RegisteredPoststepActions)
489 {
490 if (RegisteredPoststepActions.ContainsKey(identifier))
491 {
492 PhysicsScene.AfterStep -= RegisteredPoststepActions[identifier];
493 RegisteredPoststepActions.Remove(identifier);
494 removed = true;
495 }
496 }
497 DetailLog("{0},BSPhysObject.UnRegisterPostStepAction,id={1},removed={2}", LocalID, identifier, removed);
498 return removed;
499 }
500
501 protected void UnRegisterAllPostStepActions()
502 {
503 lock (RegisteredPoststepActions)
504 {
505 foreach (KeyValuePair<string, BSScene.PostStepAction> kvp in RegisteredPoststepActions)
506 {
507 PhysicsScene.AfterStep -= kvp.Value;
508 }
509 RegisteredPoststepActions.Clear();
510 }
511 DetailLog("{0},BSPhysObject.UnRegisterAllPostStepActions,", LocalID);
512 }
513 517
514 // When an update to the physical properties happens, this event is fired to let 518 // When an update to the physical properties happens, this event is fired to let
515 // different actors to modify the update before it is passed around 519 // different actors to modify the update before it is passed around
@@ -522,53 +526,13 @@ public abstract class BSPhysObject : PhysicsActor
522 actions(ref entprop); 526 actions(ref entprop);
523 } 527 }
524 528
525 private Dictionary<string, PreUpdatePropertyAction> RegisteredPreUpdatePropertyActions = new Dictionary<string, PreUpdatePropertyAction>();
526 public void RegisterPreUpdatePropertyAction(string identifier, PreUpdatePropertyAction actn)
527 {
528 lock (RegisteredPreUpdatePropertyActions)
529 {
530 // Clean out any existing action
531 UnRegisterPreUpdatePropertyAction(identifier);
532 RegisteredPreUpdatePropertyActions[identifier] = actn;
533 OnPreUpdateProperty += actn;
534 }
535 DetailLog("{0},BSPhysObject.RegisterPreUpdatePropertyAction,id={1}", LocalID, identifier);
536 }
537 public bool UnRegisterPreUpdatePropertyAction(string identifier)
538 {
539 bool removed = false;
540 lock (RegisteredPreUpdatePropertyActions)
541 {
542 if (RegisteredPreUpdatePropertyActions.ContainsKey(identifier))
543 {
544 OnPreUpdateProperty -= RegisteredPreUpdatePropertyActions[identifier];
545 RegisteredPreUpdatePropertyActions.Remove(identifier);
546 removed = true;
547 }
548 }
549 DetailLog("{0},BSPhysObject.UnRegisterPreUpdatePropertyAction,id={1},removed={2}", LocalID, identifier, removed);
550 return removed;
551 }
552 public void UnRegisterAllPreUpdatePropertyActions()
553 {
554 lock (RegisteredPreUpdatePropertyActions)
555 {
556 foreach (KeyValuePair<string, PreUpdatePropertyAction> kvp in RegisteredPreUpdatePropertyActions)
557 {
558 OnPreUpdateProperty -= kvp.Value;
559 }
560 RegisteredPreUpdatePropertyActions.Clear();
561 }
562 DetailLog("{0},BSPhysObject.UnRegisterAllPreUpdatePropertyAction,", LocalID);
563 }
564
565 #endregion // Per Simulation Step actions 529 #endregion // Per Simulation Step actions
566 530
567 // High performance detailed logging routine used by the physical objects. 531 // High performance detailed logging routine used by the physical objects.
568 protected void DetailLog(string msg, params Object[] args) 532 protected void DetailLog(string msg, params Object[] args)
569 { 533 {
570 if (PhysicsScene.PhysicsLogging.Enabled) 534 if (PhysScene.PhysicsLogging.Enabled)
571 PhysicsScene.DetailLog(msg, args); 535 PhysScene.DetailLog(msg, args);
572 } 536 }
573 537
574} 538}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 6a5461a..95bdc7b 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -55,9 +55,6 @@ public class BSPrim : BSPhysObject
55 private OMV.Vector3 _position; 55 private OMV.Vector3 _position;
56 56
57 private float _mass; // the mass of this object 57 private float _mass; // the mass of this object
58 private OMV.Vector3 _force;
59 private OMV.Vector3 _velocity;
60 private OMV.Vector3 _torque;
61 private OMV.Vector3 _acceleration; 58 private OMV.Vector3 _acceleration;
62 private OMV.Quaternion _orientation; 59 private OMV.Quaternion _orientation;
63 private int _physicsActorType; 60 private int _physicsActorType;
@@ -72,16 +69,19 @@ public class BSPrim : BSPhysObject
72 69
73 private int CrossingFailures { get; set; } 70 private int CrossingFailures { get; set; }
74 71
75 public BSDynamics VehicleController { get; private set; } 72 // Keep a handle to the vehicle actor so it is easy to set parameters on same.
73 public BSDynamics VehicleActor;
74 public const string VehicleActorName = "BasicVehicle";
76 75
77 private BSVMotor _targetMotor; 76 // Parameters for the hover actor
78 private OMV.Vector3 _PIDTarget; 77 public const string HoverActorName = "HoverActor";
79 private float _PIDTau; 78 // Parameters for the axis lock actor
80 79 public const String LockedAxisActorName = "BSPrim.LockedAxis";
81 private BSFMotor _hoverMotor; 80 // Parameters for the move to target actor
82 private float _PIDHoverHeight; 81 public const string MoveToTargetActorName = "MoveToTargetActor";
83 private PIDHoverType _PIDHoverType; 82 // Parameters for the setForce and setTorque actors
84 private float _PIDHoverTau; 83 public const string SetForceActorName = "SetForceActor";
84 public const string SetTorqueActorName = "SetTorqueActor";
85 85
86 public BSPrim(uint localID, String primName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size, 86 public BSPrim(uint localID, String primName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size,
87 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical) 87 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical)
@@ -94,26 +94,28 @@ public class BSPrim : BSPhysObject
94 Scale = size; // prims are the size the user wants them to be (different for BSCharactes). 94 Scale = size; // prims are the size the user wants them to be (different for BSCharactes).
95 _orientation = rotation; 95 _orientation = rotation;
96 _buoyancy = 0f; 96 _buoyancy = 0f;
97 _velocity = OMV.Vector3.Zero; 97 RawVelocity = OMV.Vector3.Zero;
98 _rotationalVelocity = OMV.Vector3.Zero; 98 _rotationalVelocity = OMV.Vector3.Zero;
99 BaseShape = pbs; 99 BaseShape = pbs;
100 _isPhysical = pisPhysical; 100 _isPhysical = pisPhysical;
101 _isVolumeDetect = false; 101 _isVolumeDetect = false;
102 102
103 VehicleController = new BSDynamics(PhysicsScene, this); // add vehicleness 103 // We keep a handle to the vehicle actor so we can set vehicle parameters later.
104 VehicleActor = new BSDynamics(PhysScene, this, VehicleActorName);
105 PhysicalActors.Add(VehicleActorName, VehicleActor);
104 106
105 _mass = CalculateMass(); 107 _mass = CalculateMass();
106 108
107 DetailLog("{0},BSPrim.constructor,call", LocalID); 109 // DetailLog("{0},BSPrim.constructor,call", LocalID);
108 // do the actual object creation at taint time 110 // do the actual object creation at taint time
109 PhysicsScene.TaintedObject("BSPrim.create", delegate() 111 PhysScene.TaintedObject("BSPrim.create", delegate()
110 { 112 {
111 // Make sure the object is being created with some sanity. 113 // Make sure the object is being created with some sanity.
112 ExtremeSanityCheck(true /* inTaintTime */); 114 ExtremeSanityCheck(true /* inTaintTime */);
113 115
114 CreateGeomAndObject(true); 116 CreateGeomAndObject(true);
115 117
116 CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody); 118 CurrentCollisionFlags = PhysScene.PE.GetCollisionFlags(PhysBody);
117 }); 119 });
118 } 120 }
119 121
@@ -126,14 +128,14 @@ public class BSPrim : BSPhysObject
126 // Undo any vehicle properties 128 // Undo any vehicle properties
127 this.VehicleType = (int)Vehicle.TYPE_NONE; 129 this.VehicleType = (int)Vehicle.TYPE_NONE;
128 130
129 PhysicsScene.TaintedObject("BSPrim.destroy", delegate() 131 PhysScene.TaintedObject("BSPrim.Destroy", delegate()
130 { 132 {
131 DetailLog("{0},BSPrim.Destroy,taint,", LocalID); 133 DetailLog("{0},BSPrim.Destroy,taint,", LocalID);
132 // If there are physical body and shape, release my use of same. 134 // If there are physical body and shape, release my use of same.
133 PhysicsScene.Shapes.DereferenceBody(PhysBody, null); 135 PhysScene.Shapes.DereferenceBody(PhysBody, null);
134 PhysBody.Clear(); 136 PhysBody.Clear();
135 PhysicsScene.Shapes.DereferenceShape(PhysShape, null); 137 PhysShape.Dereference(PhysScene);
136 PhysShape.Clear(); 138 PhysShape = new BSShapeNull();
137 }); 139 });
138 } 140 }
139 141
@@ -159,25 +161,13 @@ public class BSPrim : BSPhysObject
159 ForceBodyShapeRebuild(false); 161 ForceBodyShapeRebuild(false);
160 } 162 }
161 } 163 }
162 // 'unknown' says to choose the best type
163 public override BSPhysicsShapeType PreferredPhysicalShape
164 { get { return BSPhysicsShapeType.SHAPE_UNKNOWN; } }
165
166 public override bool ForceBodyShapeRebuild(bool inTaintTime) 164 public override bool ForceBodyShapeRebuild(bool inTaintTime)
167 { 165 {
168 if (inTaintTime) 166 PhysScene.TaintedObject(inTaintTime, "BSPrim.ForceBodyShapeRebuild", delegate()
169 { 167 {
170 _mass = CalculateMass(); // changing the shape changes the mass 168 _mass = CalculateMass(); // changing the shape changes the mass
171 CreateGeomAndObject(true); 169 CreateGeomAndObject(true);
172 } 170 });
173 else
174 {
175 PhysicsScene.TaintedObject("BSPrim.ForceBodyShapeRebuild", delegate()
176 {
177 _mass = CalculateMass(); // changing the shape changes the mass
178 CreateGeomAndObject(true);
179 });
180 }
181 return true; 171 return true;
182 } 172 }
183 public override bool Grabbed { 173 public override bool Grabbed {
@@ -190,7 +180,7 @@ public class BSPrim : BSPhysObject
190 if (value != _isSelected) 180 if (value != _isSelected)
191 { 181 {
192 _isSelected = value; 182 _isSelected = value;
193 PhysicsScene.TaintedObject("BSPrim.setSelected", delegate() 183 PhysScene.TaintedObject("BSPrim.setSelected", delegate()
194 { 184 {
195 DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected); 185 DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected);
196 SetObjectDynamic(false); 186 SetObjectDynamic(false);
@@ -231,124 +221,56 @@ public class BSPrim : BSPhysObject
231 // Called at taint time! 221 // Called at taint time!
232 public override void ZeroMotion(bool inTaintTime) 222 public override void ZeroMotion(bool inTaintTime)
233 { 223 {
234 _velocity = OMV.Vector3.Zero; 224 RawVelocity = OMV.Vector3.Zero;
235 _acceleration = OMV.Vector3.Zero; 225 _acceleration = OMV.Vector3.Zero;
236 _rotationalVelocity = OMV.Vector3.Zero; 226 _rotationalVelocity = OMV.Vector3.Zero;
237 227
238 // Zero some other properties in the physics engine 228 // Zero some other properties in the physics engine
239 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate() 229 PhysScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate()
240 { 230 {
241 if (PhysBody.HasPhysicalBody) 231 if (PhysBody.HasPhysicalBody)
242 PhysicsScene.PE.ClearAllForces(PhysBody); 232 PhysScene.PE.ClearAllForces(PhysBody);
243 }); 233 });
244 } 234 }
245 public override void ZeroAngularMotion(bool inTaintTime) 235 public override void ZeroAngularMotion(bool inTaintTime)
246 { 236 {
247 _rotationalVelocity = OMV.Vector3.Zero; 237 _rotationalVelocity = OMV.Vector3.Zero;
248 // Zero some other properties in the physics engine 238 // Zero some other properties in the physics engine
249 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate() 239 PhysScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate()
250 { 240 {
251 // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity); 241 // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity);
252 if (PhysBody.HasPhysicalBody) 242 if (PhysBody.HasPhysicalBody)
253 { 243 {
254 PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); 244 PhysScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity);
255 PhysicsScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); 245 PhysScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity);
256 } 246 }
257 }); 247 });
258 } 248 }
259 249
260 bool TryExperimentalLockAxisCode = false;
261 BSConstraint LockAxisConstraint = null;
262 public override void LockAngularMotion(OMV.Vector3 axis) 250 public override void LockAngularMotion(OMV.Vector3 axis)
263 { 251 {
264 DetailLog("{0},BSPrim.LockAngularMotion,call,axis={1}", LocalID, axis); 252 DetailLog("{0},BSPrim.LockAngularMotion,call,axis={1}", LocalID, axis);
265 253
266 // "1" means free, "0" means locked 254 // "1" means free, "0" means locked
267 OMV.Vector3 locking = new OMV.Vector3(1f, 1f, 1f); 255 OMV.Vector3 locking = LockedAxisFree;
268 if (axis.X != 1) locking.X = 0f; 256 if (axis.X != 1) locking.X = 0f;
269 if (axis.Y != 1) locking.Y = 0f; 257 if (axis.Y != 1) locking.Y = 0f;
270 if (axis.Z != 1) locking.Z = 0f; 258 if (axis.Z != 1) locking.Z = 0f;
271 LockedAxis = locking; 259 LockedAngularAxis = locking;
272 260
273 if (TryExperimentalLockAxisCode && LockedAxis != LockedAxisFree) 261 EnableActor(LockedAngularAxis != LockedAxisFree, LockedAxisActorName, delegate()
274 { 262 {
275 // Lock that axis by creating a 6DOF constraint that has one end in the world and 263 return new BSActorLockAxis(PhysScene, this, LockedAxisActorName);
276 // the other in the object. 264 });
277 // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=20817
278 // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=26380
279
280 PhysicsScene.TaintedObject("BSPrim.LockAngularMotion", delegate()
281 {
282 CleanUpLockAxisPhysicals(true /* inTaintTime */);
283
284 BSConstraint6Dof axisConstrainer = new BSConstraint6Dof(PhysicsScene.World, PhysBody,
285 OMV.Vector3.Zero, OMV.Quaternion.Inverse(RawOrientation),
286 true /* useLinearReferenceFrameB */, true /* disableCollisionsBetweenLinkedBodies */);
287 LockAxisConstraint = axisConstrainer;
288 PhysicsScene.Constraints.AddConstraint(LockAxisConstraint);
289
290 // The constraint is tied to the world and oriented to the prim.
291
292 // Free to move linearly
293 OMV.Vector3 linearLow = OMV.Vector3.Zero;
294 OMV.Vector3 linearHigh = PhysicsScene.TerrainManager.DefaultRegionSize;
295 axisConstrainer.SetLinearLimits(linearLow, linearHigh);
296
297 // Angular with some axis locked
298 float f2PI = (float)Math.PI * 2f;
299 OMV.Vector3 angularLow = new OMV.Vector3(-f2PI, -f2PI, -f2PI);
300 OMV.Vector3 angularHigh = new OMV.Vector3(f2PI, f2PI, f2PI);
301 if (LockedAxis.X != 1f)
302 {
303 angularLow.X = 0f;
304 angularHigh.X = 0f;
305 }
306 if (LockedAxis.Y != 1f)
307 {
308 angularLow.Y = 0f;
309 angularHigh.Y = 0f;
310 }
311 if (LockedAxis.Z != 1f)
312 {
313 angularLow.Z = 0f;
314 angularHigh.Z = 0f;
315 }
316 axisConstrainer.SetAngularLimits(angularLow, angularHigh);
317
318 DetailLog("{0},BSPrim.LockAngularMotion,create,linLow={1},linHi={2},angLow={3},angHi={4}",
319 LocalID, linearLow, linearHigh, angularLow, angularHigh);
320
321 // Constants from one of the posts mentioned above and used in Bullet's ConstraintDemo.
322 axisConstrainer.TranslationalLimitMotor(true /* enable */, 5.0f, 0.1f);
323 265
324 axisConstrainer.RecomputeConstraintVariables(RawMass); 266 // Update parameters so the new actor's Refresh() action is called at the right time.
325 }); 267 PhysScene.TaintedObject("BSPrim.LockAngularMotion", delegate()
326 }
327 else
328 { 268 {
329 // Everything seems unlocked 269 UpdatePhysicalParameters();
330 CleanUpLockAxisPhysicals(false /* inTaintTime */); 270 });
331 }
332 271
333 return; 272 return;
334 } 273 }
335 // Get rid of any constraint built for LockAxis
336 // Most often the constraint is removed when the constraint collection is cleaned for this prim.
337 private void CleanUpLockAxisPhysicals(bool inTaintTime)
338 {
339 if (LockAxisConstraint != null)
340 {
341 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.CleanUpLockAxisPhysicals", delegate()
342 {
343 if (LockAxisConstraint != null)
344 {
345 PhysicsScene.Constraints.RemoveAndDestroyConstraint(LockAxisConstraint);
346 LockAxisConstraint = null;
347 DetailLog("{0},BSPrim.CleanUpLockAxisPhysicals,destroyingConstraint", LocalID);
348 }
349 });
350 }
351 }
352 274
353 public override OMV.Vector3 RawPosition 275 public override OMV.Vector3 RawPosition
354 { 276 {
@@ -372,7 +294,7 @@ public class BSPrim : BSPhysObject
372 _position = value; 294 _position = value;
373 PositionSanityCheck(false); 295 PositionSanityCheck(false);
374 296
375 PhysicsScene.TaintedObject("BSPrim.setPosition", delegate() 297 PhysScene.TaintedObject("BSPrim.setPosition", delegate()
376 { 298 {
377 DetailLog("{0},BSPrim.SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation); 299 DetailLog("{0},BSPrim.SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation);
378 ForcePosition = _position; 300 ForcePosition = _position;
@@ -382,14 +304,14 @@ public class BSPrim : BSPhysObject
382 304
383 public override OMV.Vector3 ForcePosition { 305 public override OMV.Vector3 ForcePosition {
384 get { 306 get {
385 _position = PhysicsScene.PE.GetPosition(PhysBody); 307 _position = PhysScene.PE.GetPosition(PhysBody);
386 return _position; 308 return _position;
387 } 309 }
388 set { 310 set {
389 _position = value; 311 _position = value;
390 if (PhysBody.HasPhysicalBody) 312 if (PhysBody.HasPhysicalBody)
391 { 313 {
392 PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); 314 PhysScene.PE.SetTranslation(PhysBody, _position, _orientation);
393 ActivateIfPhysical(false); 315 ActivateIfPhysical(false);
394 } 316 }
395 } 317 }
@@ -406,7 +328,7 @@ public class BSPrim : BSPhysObject
406 if (!IsPhysicallyActive) 328 if (!IsPhysicallyActive)
407 return ret; 329 return ret;
408 330
409 if (!PhysicsScene.TerrainManager.IsWithinKnownTerrain(RawPosition)) 331 if (!PhysScene.TerrainManager.IsWithinKnownTerrain(RawPosition))
410 { 332 {
411 // The physical object is out of the known/simulated area. 333 // The physical object is out of the known/simulated area.
412 // Upper levels of code will handle the transition to other areas so, for 334 // Upper levels of code will handle the transition to other areas so, for
@@ -414,7 +336,7 @@ public class BSPrim : BSPhysObject
414 return ret; 336 return ret;
415 } 337 }
416 338
417 float terrainHeight = PhysicsScene.TerrainManager.GetTerrainHeightAtXYZ(RawPosition); 339 float terrainHeight = PhysScene.TerrainManager.GetTerrainHeightAtXYZ(RawPosition);
418 OMV.Vector3 upForce = OMV.Vector3.Zero; 340 OMV.Vector3 upForce = OMV.Vector3.Zero;
419 float approxSize = Math.Max(Size.X, Math.Max(Size.Y, Size.Z)); 341 float approxSize = Math.Max(Size.X, Math.Max(Size.Y, Size.Z));
420 if ((RawPosition.Z + approxSize / 2f) < terrainHeight) 342 if ((RawPosition.Z + approxSize / 2f) < terrainHeight)
@@ -435,7 +357,7 @@ public class BSPrim : BSPhysObject
435 357
436 if ((CurrentCollisionFlags & CollisionFlags.BS_FLOATS_ON_WATER) != 0) 358 if ((CurrentCollisionFlags & CollisionFlags.BS_FLOATS_ON_WATER) != 0)
437 { 359 {
438 float waterHeight = PhysicsScene.TerrainManager.GetWaterLevelAtXYZ(_position); 360 float waterHeight = PhysScene.TerrainManager.GetWaterLevelAtXYZ(_position);
439 // TODO: a floating motor so object will bob in the water 361 // TODO: a floating motor so object will bob in the water
440 if (Math.Abs(RawPosition.Z - waterHeight) > 0.1f) 362 if (Math.Abs(RawPosition.Z - waterHeight) > 0.1f)
441 { 363 {
@@ -443,7 +365,7 @@ public class BSPrim : BSPhysObject
443 upForce.Z = (waterHeight - RawPosition.Z) * 1f; 365 upForce.Z = (waterHeight - RawPosition.Z) * 1f;
444 366
445 // Apply upforce and overcome gravity. 367 // Apply upforce and overcome gravity.
446 OMV.Vector3 correctionForce = upForce - PhysicsScene.DefaultGravity; 368 OMV.Vector3 correctionForce = upForce - PhysScene.DefaultGravity;
447 DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, _position, upForce, correctionForce); 369 DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, _position, upForce, correctionForce);
448 AddForce(correctionForce, false, inTaintTime); 370 AddForce(correctionForce, false, inTaintTime);
449 ret = true; 371 ret = true;
@@ -471,9 +393,9 @@ public class BSPrim : BSPhysObject
471 ZeroMotion(inTaintTime); 393 ZeroMotion(inTaintTime);
472 ret = true; 394 ret = true;
473 } 395 }
474 if (_velocity.LengthSquared() > BSParam.MaxLinearVelocity) 396 if (RawVelocity.LengthSquared() > BSParam.MaxLinearVelocity)
475 { 397 {
476 _velocity = Util.ClampV(_velocity, BSParam.MaxLinearVelocity); 398 RawVelocity = Util.ClampV(RawVelocity, BSParam.MaxLinearVelocity);
477 ret = true; 399 ret = true;
478 } 400 }
479 if (_rotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared) 401 if (_rotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared)
@@ -498,7 +420,7 @@ public class BSPrim : BSPhysObject
498 get { return _mass; } 420 get { return _mass; }
499 } 421 }
500 // used when we only want this prim's mass and not the linkset thing 422 // used when we only want this prim's mass and not the linkset thing
501 public override float RawMass { 423 public override float RawMass {
502 get { return _mass; } 424 get { return _mass; }
503 } 425 }
504 // Set the physical mass to the passed mass. 426 // Set the physical mass to the passed mass.
@@ -509,10 +431,10 @@ public class BSPrim : BSPhysObject
509 { 431 {
510 if (IsStatic) 432 if (IsStatic)
511 { 433 {
512 PhysicsScene.PE.SetGravity(PhysBody, PhysicsScene.DefaultGravity); 434 PhysScene.PE.SetGravity(PhysBody, PhysScene.DefaultGravity);
513 Inertia = OMV.Vector3.Zero; 435 Inertia = OMV.Vector3.Zero;
514 PhysicsScene.PE.SetMassProps(PhysBody, 0f, Inertia); 436 PhysScene.PE.SetMassProps(PhysBody, 0f, Inertia);
515 PhysicsScene.PE.UpdateInertiaTensor(PhysBody); 437 PhysScene.PE.UpdateInertiaTensor(PhysBody);
516 } 438 }
517 else 439 else
518 { 440 {
@@ -521,16 +443,16 @@ public class BSPrim : BSPhysObject
521 // Changing interesting properties doesn't change proxy and collision cache 443 // Changing interesting properties doesn't change proxy and collision cache
522 // information. The Bullet solution is to re-add the object to the world 444 // information. The Bullet solution is to re-add the object to the world
523 // after parameters are changed. 445 // after parameters are changed.
524 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, PhysBody); 446 PhysScene.PE.RemoveObjectFromWorld(PhysScene.World, PhysBody);
525 } 447 }
526 448
527 // The computation of mass props requires gravity to be set on the object. 449 // The computation of mass props requires gravity to be set on the object.
528 Gravity = ComputeGravity(Buoyancy); 450 Gravity = ComputeGravity(Buoyancy);
529 PhysicsScene.PE.SetGravity(PhysBody, Gravity); 451 PhysScene.PE.SetGravity(PhysBody, Gravity);
530 452
531 Inertia = PhysicsScene.PE.CalculateLocalInertia(PhysShape, physMass); 453 Inertia = PhysScene.PE.CalculateLocalInertia(PhysShape.physShapeInfo, physMass);
532 PhysicsScene.PE.SetMassProps(PhysBody, physMass, Inertia); 454 PhysScene.PE.SetMassProps(PhysBody, physMass, Inertia);
533 PhysicsScene.PE.UpdateInertiaTensor(PhysBody); 455 PhysScene.PE.UpdateInertiaTensor(PhysBody);
534 456
535 DetailLog("{0},BSPrim.UpdateMassProperties,mass={1},localInertia={2},grav={3},inWorld={4}", 457 DetailLog("{0},BSPrim.UpdateMassProperties,mass={1},localInertia={2},grav={3},inWorld={4}",
536 LocalID, physMass, Inertia, Gravity, inWorld); 458 LocalID, physMass, Inertia, Gravity, inWorld);
@@ -546,7 +468,7 @@ public class BSPrim : BSPhysObject
546 // Return what gravity should be set to this very moment 468 // Return what gravity should be set to this very moment
547 public OMV.Vector3 ComputeGravity(float buoyancy) 469 public OMV.Vector3 ComputeGravity(float buoyancy)
548 { 470 {
549 OMV.Vector3 ret = PhysicsScene.DefaultGravity; 471 OMV.Vector3 ret = PhysScene.DefaultGravity;
550 472
551 if (!IsStatic) 473 if (!IsStatic)
552 { 474 {
@@ -570,95 +492,63 @@ public class BSPrim : BSPhysObject
570 } 492 }
571 493
572 public override OMV.Vector3 Force { 494 public override OMV.Vector3 Force {
573 get { return _force; } 495 get { return RawForce; }
574 set { 496 set {
575 _force = value; 497 RawForce = value;
576 if (_force != OMV.Vector3.Zero) 498 EnableActor(RawForce != OMV.Vector3.Zero, SetForceActorName, delegate()
577 { 499 {
578 // If the force is non-zero, it must be reapplied each tick because 500 return new BSActorSetForce(PhysScene, this, SetForceActorName);
579 // Bullet clears the forces applied last frame. 501 });
580 RegisterPreStepAction("BSPrim.setForce", LocalID,
581 delegate(float timeStep)
582 {
583 if (!IsPhysicallyActive || _force == OMV.Vector3.Zero)
584 {
585 UnRegisterPreStepAction("BSPrim.setForce", LocalID);
586 return;
587 }
588
589 DetailLog("{0},BSPrim.setForce,preStep,force={1}", LocalID, _force);
590 if (PhysBody.HasPhysicalBody)
591 {
592 PhysicsScene.PE.ApplyCentralForce(PhysBody, _force);
593 ActivateIfPhysical(false);
594 }
595 }
596 );
597 }
598 else
599 {
600 UnRegisterPreStepAction("BSPrim.setForce", LocalID);
601 }
602 } 502 }
603 } 503 }
604 504
605 public override int VehicleType { 505 public override int VehicleType {
606 get { 506 get {
607 return (int)VehicleController.Type; // if we are a vehicle, return that type 507 return (int)VehicleActor.Type;
608 } 508 }
609 set { 509 set {
610 Vehicle type = (Vehicle)value; 510 Vehicle type = (Vehicle)value;
611 511
612 PhysicsScene.TaintedObject("setVehicleType", delegate() 512 PhysScene.TaintedObject("setVehicleType", delegate()
613 { 513 {
614 // Done at taint time so we're sure the physics engine is not using the variables 514 // Some vehicle scripts change vehicle type on the fly as an easy way to
615 // Vehicle code changes the parameters for this vehicle type. 515 // change all the parameters. Like a plane changing to CAR when on the
616 VehicleController.ProcessTypeChange(type); 516 // ground. In this case, don't want to zero motion.
517 // ZeroMotion(true /* inTaintTime */);
518 VehicleActor.ProcessTypeChange(type);
617 ActivateIfPhysical(false); 519 ActivateIfPhysical(false);
618
619 // If an active vehicle, register the vehicle code to be called before each step
620 if (VehicleController.Type == Vehicle.TYPE_NONE)
621 {
622 UnRegisterPreStepAction("BSPrim.Vehicle", LocalID);
623 UnRegisterPostStepAction("BSPrim.Vehicle", LocalID);
624 }
625 else
626 {
627 RegisterPreStepAction("BSPrim.Vehicle", LocalID, VehicleController.Step);
628 RegisterPostStepAction("BSPrim.Vehicle", LocalID, VehicleController.PostStep);
629 }
630 }); 520 });
631 } 521 }
632 } 522 }
633 public override void VehicleFloatParam(int param, float value) 523 public override void VehicleFloatParam(int param, float value)
634 { 524 {
635 PhysicsScene.TaintedObject("BSPrim.VehicleFloatParam", delegate() 525 PhysScene.TaintedObject("BSPrim.VehicleFloatParam", delegate()
636 { 526 {
637 VehicleController.ProcessFloatVehicleParam((Vehicle)param, value); 527 VehicleActor.ProcessFloatVehicleParam((Vehicle)param, value);
638 ActivateIfPhysical(false); 528 ActivateIfPhysical(false);
639 }); 529 });
640 } 530 }
641 public override void VehicleVectorParam(int param, OMV.Vector3 value) 531 public override void VehicleVectorParam(int param, OMV.Vector3 value)
642 { 532 {
643 PhysicsScene.TaintedObject("BSPrim.VehicleVectorParam", delegate() 533 PhysScene.TaintedObject("BSPrim.VehicleVectorParam", delegate()
644 { 534 {
645 VehicleController.ProcessVectorVehicleParam((Vehicle)param, value); 535 VehicleActor.ProcessVectorVehicleParam((Vehicle)param, value);
646 ActivateIfPhysical(false); 536 ActivateIfPhysical(false);
647 }); 537 });
648 } 538 }
649 public override void VehicleRotationParam(int param, OMV.Quaternion rotation) 539 public override void VehicleRotationParam(int param, OMV.Quaternion rotation)
650 { 540 {
651 PhysicsScene.TaintedObject("BSPrim.VehicleRotationParam", delegate() 541 PhysScene.TaintedObject("BSPrim.VehicleRotationParam", delegate()
652 { 542 {
653 VehicleController.ProcessRotationVehicleParam((Vehicle)param, rotation); 543 VehicleActor.ProcessRotationVehicleParam((Vehicle)param, rotation);
654 ActivateIfPhysical(false); 544 ActivateIfPhysical(false);
655 }); 545 });
656 } 546 }
657 public override void VehicleFlags(int param, bool remove) 547 public override void VehicleFlags(int param, bool remove)
658 { 548 {
659 PhysicsScene.TaintedObject("BSPrim.VehicleFlags", delegate() 549 PhysScene.TaintedObject("BSPrim.VehicleFlags", delegate()
660 { 550 {
661 VehicleController.ProcessVehicleFlags(param, remove); 551 VehicleActor.ProcessVehicleFlags(param, remove);
662 }); 552 });
663 } 553 }
664 554
@@ -668,7 +558,7 @@ public class BSPrim : BSPhysObject
668 if (_isVolumeDetect != newValue) 558 if (_isVolumeDetect != newValue)
669 { 559 {
670 _isVolumeDetect = newValue; 560 _isVolumeDetect = newValue;
671 PhysicsScene.TaintedObject("BSPrim.SetVolumeDetect", delegate() 561 PhysScene.TaintedObject("BSPrim.SetVolumeDetect", delegate()
672 { 562 {
673 // DetailLog("{0},setVolumeDetect,taint,volDetect={1}", LocalID, _isVolumeDetect); 563 // DetailLog("{0},setVolumeDetect,taint,volDetect={1}", LocalID, _isVolumeDetect);
674 SetObjectDynamic(true); 564 SetObjectDynamic(true);
@@ -679,7 +569,7 @@ public class BSPrim : BSPhysObject
679 public override void SetMaterial(int material) 569 public override void SetMaterial(int material)
680 { 570 {
681 base.SetMaterial(material); 571 base.SetMaterial(material);
682 PhysicsScene.TaintedObject("BSPrim.SetMaterial", delegate() 572 PhysScene.TaintedObject("BSPrim.SetMaterial", delegate()
683 { 573 {
684 UpdatePhysicalParameters(); 574 UpdatePhysicalParameters();
685 }); 575 });
@@ -692,7 +582,7 @@ public class BSPrim : BSPhysObject
692 if (base.Friction != value) 582 if (base.Friction != value)
693 { 583 {
694 base.Friction = value; 584 base.Friction = value;
695 PhysicsScene.TaintedObject("BSPrim.setFriction", delegate() 585 PhysScene.TaintedObject("BSPrim.setFriction", delegate()
696 { 586 {
697 UpdatePhysicalParameters(); 587 UpdatePhysicalParameters();
698 }); 588 });
@@ -707,7 +597,7 @@ public class BSPrim : BSPhysObject
707 if (base.Restitution != value) 597 if (base.Restitution != value)
708 { 598 {
709 base.Restitution = value; 599 base.Restitution = value;
710 PhysicsScene.TaintedObject("BSPrim.setRestitution", delegate() 600 PhysScene.TaintedObject("BSPrim.setRestitution", delegate()
711 { 601 {
712 UpdatePhysicalParameters(); 602 UpdatePhysicalParameters();
713 }); 603 });
@@ -724,7 +614,7 @@ public class BSPrim : BSPhysObject
724 if (base.Density != value) 614 if (base.Density != value)
725 { 615 {
726 base.Density = value; 616 base.Density = value;
727 PhysicsScene.TaintedObject("BSPrim.setDensity", delegate() 617 PhysScene.TaintedObject("BSPrim.setDensity", delegate()
728 { 618 {
729 UpdatePhysicalParameters(); 619 UpdatePhysicalParameters();
730 }); 620 });
@@ -739,70 +629,47 @@ public class BSPrim : BSPhysObject
739 if (base.GravModifier != value) 629 if (base.GravModifier != value)
740 { 630 {
741 base.GravModifier = value; 631 base.GravModifier = value;
742 PhysicsScene.TaintedObject("BSPrim.setGravityModifier", delegate() 632 PhysScene.TaintedObject("BSPrim.setGravityModifier", delegate()
743 { 633 {
744 UpdatePhysicalParameters(); 634 UpdatePhysicalParameters();
745 }); 635 });
746 } 636 }
747 } 637 }
748 } 638 }
749 public override OMV.Vector3 RawVelocity
750 {
751 get { return _velocity; }
752 set { _velocity = value; }
753 }
754 public override OMV.Vector3 Velocity { 639 public override OMV.Vector3 Velocity {
755 get { return _velocity; } 640 get { return RawVelocity; }
756 set { 641 set {
757 _velocity = value; 642 RawVelocity = value;
758 PhysicsScene.TaintedObject("BSPrim.setVelocity", delegate() 643 PhysScene.TaintedObject("BSPrim.setVelocity", delegate()
759 { 644 {
760 // DetailLog("{0},BSPrim.SetVelocity,taint,vel={1}", LocalID, _velocity); 645 // DetailLog("{0},BSPrim.SetVelocity,taint,vel={1}", LocalID, RawVelocity);
761 ForceVelocity = _velocity; 646 ForceVelocity = RawVelocity;
762 }); 647 });
763 } 648 }
764 } 649 }
765 public override OMV.Vector3 ForceVelocity { 650 public override OMV.Vector3 ForceVelocity {
766 get { return _velocity; } 651 get { return RawVelocity; }
767 set { 652 set {
768 PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity"); 653 PhysScene.AssertInTaintTime("BSPrim.ForceVelocity");
769 654
770 _velocity = Util.ClampV(value, BSParam.MaxLinearVelocity); 655 RawVelocity = Util.ClampV(value, BSParam.MaxLinearVelocity);
771 if (PhysBody.HasPhysicalBody) 656 if (PhysBody.HasPhysicalBody)
772 { 657 {
773 DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity); 658 DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, RawVelocity);
774 PhysicsScene.PE.SetLinearVelocity(PhysBody, _velocity); 659 PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity);
775 ActivateIfPhysical(false); 660 ActivateIfPhysical(false);
776 } 661 }
777 } 662 }
778 } 663 }
779 public override OMV.Vector3 Torque { 664 public override OMV.Vector3 Torque {
780 get { return _torque; } 665 get { return RawTorque; }
781 set { 666 set {
782 _torque = value; 667 RawTorque = value;
783 if (_torque != OMV.Vector3.Zero) 668 EnableActor(RawTorque != OMV.Vector3.Zero, SetTorqueActorName, delegate()
784 {
785 // If the torque is non-zero, it must be reapplied each tick because
786 // Bullet clears the forces applied last frame.
787 RegisterPreStepAction("BSPrim.setTorque", LocalID,
788 delegate(float timeStep)
789 {
790 if (!IsPhysicallyActive || _torque == OMV.Vector3.Zero)
791 {
792 UnRegisterPreStepAction("BSPrim.setTorque", LocalID);
793 return;
794 }
795
796 if (PhysBody.HasPhysicalBody)
797 AddAngularForce(_torque, false, true);
798 }
799 );
800 }
801 else
802 { 669 {
803 UnRegisterPreStepAction("BSPrim.setTorque", LocalID); 670 return new BSActorSetTorque(PhysScene, this, SetTorqueActorName);
804 } 671 });
805 // DetailLog("{0},BSPrim.SetTorque,call,torque={1}", LocalID, _torque); 672 DetailLog("{0},BSPrim.SetTorque,call,torque={1}", LocalID, RawTorque);
806 } 673 }
807 } 674 }
808 public override OMV.Vector3 Acceleration { 675 public override OMV.Vector3 Acceleration {
@@ -823,7 +690,7 @@ public class BSPrim : BSPhysObject
823 return; 690 return;
824 _orientation = value; 691 _orientation = value;
825 692
826 PhysicsScene.TaintedObject("BSPrim.setOrientation", delegate() 693 PhysScene.TaintedObject("BSPrim.setOrientation", delegate()
827 { 694 {
828 ForceOrientation = _orientation; 695 ForceOrientation = _orientation;
829 }); 696 });
@@ -834,14 +701,14 @@ public class BSPrim : BSPhysObject
834 { 701 {
835 get 702 get
836 { 703 {
837 _orientation = PhysicsScene.PE.GetOrientation(PhysBody); 704 _orientation = PhysScene.PE.GetOrientation(PhysBody);
838 return _orientation; 705 return _orientation;
839 } 706 }
840 set 707 set
841 { 708 {
842 _orientation = value; 709 _orientation = value;
843 if (PhysBody.HasPhysicalBody) 710 if (PhysBody.HasPhysicalBody)
844 PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); 711 PhysScene.PE.SetTranslation(PhysBody, _position, _orientation);
845 } 712 }
846 } 713 }
847 public override int PhysicsActorType { 714 public override int PhysicsActorType {
@@ -854,7 +721,7 @@ public class BSPrim : BSPhysObject
854 if (_isPhysical != value) 721 if (_isPhysical != value)
855 { 722 {
856 _isPhysical = value; 723 _isPhysical = value;
857 PhysicsScene.TaintedObject("BSPrim.setIsPhysical", delegate() 724 PhysScene.TaintedObject("BSPrim.setIsPhysical", delegate()
858 { 725 {
859 DetailLog("{0},setIsPhysical,taint,isPhys={1}", LocalID, _isPhysical); 726 DetailLog("{0},setIsPhysical,taint,isPhys={1}", LocalID, _isPhysical);
860 SetObjectDynamic(true); 727 SetObjectDynamic(true);
@@ -903,19 +770,19 @@ public class BSPrim : BSPhysObject
903 if (!PhysBody.HasPhysicalBody) 770 if (!PhysBody.HasPhysicalBody)
904 { 771 {
905 // This would only happen if updates are called for during initialization when the body is not set up yet. 772 // This would only happen if updates are called for during initialization when the body is not set up yet.
906 DetailLog("{0},BSPrim.UpdatePhysicalParameters,taint,calledWithNoPhysBody", LocalID); 773 // DetailLog("{0},BSPrim.UpdatePhysicalParameters,taint,calledWithNoPhysBody", LocalID);
907 return; 774 return;
908 } 775 }
909 776
910 // Mangling all the physical properties requires the object not be in the physical world. 777 // Mangling all the physical properties requires the object not be in the physical world.
911 // This is a NOOP if the object is not in the world (BulletSim and Bullet ignore objects not found). 778 // This is a NOOP if the object is not in the world (BulletSim and Bullet ignore objects not found).
912 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, PhysBody); 779 PhysScene.PE.RemoveObjectFromWorld(PhysScene.World, PhysBody);
913 780
914 // Set up the object physicalness (does gravity and collisions move this object) 781 // Set up the object physicalness (does gravity and collisions move this object)
915 MakeDynamic(IsStatic); 782 MakeDynamic(IsStatic);
916 783
917 // Update vehicle specific parameters (after MakeDynamic() so can change physical parameters) 784 // Update vehicle specific parameters (after MakeDynamic() so can change physical parameters)
918 VehicleController.Refresh(); 785 PhysicalActors.Refresh();
919 786
920 // Arrange for collision events if the simulator wants them 787 // Arrange for collision events if the simulator wants them
921 EnableCollisions(SubscribedEvents()); 788 EnableCollisions(SubscribedEvents());
@@ -926,10 +793,11 @@ public class BSPrim : BSPhysObject
926 AddObjectToPhysicalWorld(); 793 AddObjectToPhysicalWorld();
927 794
928 // Rebuild its shape 795 // Rebuild its shape
929 PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, PhysBody); 796 PhysScene.PE.UpdateSingleAabb(PhysScene.World, PhysBody);
930 797
931 DetailLog("{0},BSPrim.UpdatePhysicalParameters,taintExit,static={1},solid={2},mass={3},collide={4},cf={5:X},cType={6},body={7},shape={8}", 798 DetailLog("{0},BSPrim.UpdatePhysicalParameters,taintExit,static={1},solid={2},mass={3},collide={4},cf={5:X},cType={6},body={7},shape={8}",
932 LocalID, IsStatic, IsSolid, Mass, SubscribedEvents(), CurrentCollisionFlags, PhysBody.collisionType, PhysBody, PhysShape); 799 LocalID, IsStatic, IsSolid, Mass, SubscribedEvents(),
800 CurrentCollisionFlags, PhysBody.collisionType, PhysBody, PhysShape);
933 } 801 }
934 802
935 // "Making dynamic" means changing to and from static. 803 // "Making dynamic" means changing to and from static.
@@ -942,28 +810,28 @@ public class BSPrim : BSPhysObject
942 if (makeStatic) 810 if (makeStatic)
943 { 811 {
944 // Become a Bullet 'static' object type 812 // Become a Bullet 'static' object type
945 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT); 813 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT);
946 // Stop all movement 814 // Stop all movement
947 ZeroMotion(true); 815 ZeroMotion(true);
948 816
949 // Set various physical properties so other object interact properly 817 // Set various physical properties so other object interact properly
950 PhysicsScene.PE.SetFriction(PhysBody, Friction); 818 PhysScene.PE.SetFriction(PhysBody, Friction);
951 PhysicsScene.PE.SetRestitution(PhysBody, Restitution); 819 PhysScene.PE.SetRestitution(PhysBody, Restitution);
952 PhysicsScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold); 820 PhysScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold);
953 821
954 // Mass is zero which disables a bunch of physics stuff in Bullet 822 // Mass is zero which disables a bunch of physics stuff in Bullet
955 UpdatePhysicalMassProperties(0f, false); 823 UpdatePhysicalMassProperties(0f, false);
956 // Set collision detection parameters 824 // Set collision detection parameters
957 if (BSParam.CcdMotionThreshold > 0f) 825 if (BSParam.CcdMotionThreshold > 0f)
958 { 826 {
959 PhysicsScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold); 827 PhysScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold);
960 PhysicsScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius); 828 PhysScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius);
961 } 829 }
962 830
963 // The activation state is 'disabled' so Bullet will not try to act on it. 831 // The activation state is 'disabled' so Bullet will not try to act on it.
964 // PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.DISABLE_SIMULATION); 832 // PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.DISABLE_SIMULATION);
965 // Start it out sleeping and physical actions could wake it up. 833 // Start it out sleeping and physical actions could wake it up.
966 PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ISLAND_SLEEPING); 834 PhysScene.PE.ForceActivationState(PhysBody, ActivationState.ISLAND_SLEEPING);
967 835
968 // This collides like a static object 836 // This collides like a static object
969 PhysBody.collisionType = CollisionType.Static; 837 PhysBody.collisionType = CollisionType.Static;
@@ -971,11 +839,11 @@ public class BSPrim : BSPhysObject
971 else 839 else
972 { 840 {
973 // Not a Bullet static object 841 // Not a Bullet static object
974 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT); 842 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT);
975 843
976 // Set various physical properties so other object interact properly 844 // Set various physical properties so other object interact properly
977 PhysicsScene.PE.SetFriction(PhysBody, Friction); 845 PhysScene.PE.SetFriction(PhysBody, Friction);
978 PhysicsScene.PE.SetRestitution(PhysBody, Restitution); 846 PhysScene.PE.SetRestitution(PhysBody, Restitution);
979 // DetailLog("{0},BSPrim.MakeDynamic,frict={1},rest={2}", LocalID, Friction, Restitution); 847 // DetailLog("{0},BSPrim.MakeDynamic,frict={1},rest={2}", LocalID, Friction, Restitution);
980 848
981 // per http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=3382 849 // per http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=3382
@@ -984,7 +852,7 @@ public class BSPrim : BSPhysObject
984 852
985 // For good measure, make sure the transform is set through to the motion state 853 // For good measure, make sure the transform is set through to the motion state
986 ForcePosition = _position; 854 ForcePosition = _position;
987 ForceVelocity = _velocity; 855 ForceVelocity = RawVelocity;
988 ForceRotationalVelocity = _rotationalVelocity; 856 ForceRotationalVelocity = _rotationalVelocity;
989 857
990 // A dynamic object has mass 858 // A dynamic object has mass
@@ -993,22 +861,22 @@ public class BSPrim : BSPhysObject
993 // Set collision detection parameters 861 // Set collision detection parameters
994 if (BSParam.CcdMotionThreshold > 0f) 862 if (BSParam.CcdMotionThreshold > 0f)
995 { 863 {
996 PhysicsScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold); 864 PhysScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold);
997 PhysicsScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius); 865 PhysScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius);
998 } 866 }
999 867
1000 // Various values for simulation limits 868 // Various values for simulation limits
1001 PhysicsScene.PE.SetDamping(PhysBody, BSParam.LinearDamping, BSParam.AngularDamping); 869 PhysScene.PE.SetDamping(PhysBody, BSParam.LinearDamping, BSParam.AngularDamping);
1002 PhysicsScene.PE.SetDeactivationTime(PhysBody, BSParam.DeactivationTime); 870 PhysScene.PE.SetDeactivationTime(PhysBody, BSParam.DeactivationTime);
1003 PhysicsScene.PE.SetSleepingThresholds(PhysBody, BSParam.LinearSleepingThreshold, BSParam.AngularSleepingThreshold); 871 PhysScene.PE.SetSleepingThresholds(PhysBody, BSParam.LinearSleepingThreshold, BSParam.AngularSleepingThreshold);
1004 PhysicsScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold); 872 PhysScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold);
1005 873
1006 // This collides like an object. 874 // This collides like an object.
1007 PhysBody.collisionType = CollisionType.Dynamic; 875 PhysBody.collisionType = CollisionType.Dynamic;
1008 876
1009 // Force activation of the object so Bullet will act on it. 877 // Force activation of the object so Bullet will act on it.
1010 // Must do the ForceActivationState2() to overcome the DISABLE_SIMULATION from static objects. 878 // Must do the ForceActivationState2() to overcome the DISABLE_SIMULATION from static objects.
1011 PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ACTIVE_TAG); 879 PhysScene.PE.ForceActivationState(PhysBody, ActivationState.ACTIVE_TAG);
1012 } 880 }
1013 } 881 }
1014 882
@@ -1018,7 +886,7 @@ public class BSPrim : BSPhysObject
1018 // the functions after this one set up the state of a possibly newly created collision body. 886 // the functions after this one set up the state of a possibly newly created collision body.
1019 private void MakeSolid(bool makeSolid) 887 private void MakeSolid(bool makeSolid)
1020 { 888 {
1021 CollisionObjectTypes bodyType = (CollisionObjectTypes)PhysicsScene.PE.GetBodyType(PhysBody); 889 CollisionObjectTypes bodyType = (CollisionObjectTypes)PhysScene.PE.GetBodyType(PhysBody);
1022 if (makeSolid) 890 if (makeSolid)
1023 { 891 {
1024 // Verify the previous code created the correct shape for this type of thing. 892 // Verify the previous code created the correct shape for this type of thing.
@@ -1026,7 +894,7 @@ public class BSPrim : BSPhysObject
1026 { 894 {
1027 m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for solidity. id={1}, type={2}", LogHeader, LocalID, bodyType); 895 m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for solidity. id={1}, type={2}", LogHeader, LocalID, bodyType);
1028 } 896 }
1029 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE); 897 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE);
1030 } 898 }
1031 else 899 else
1032 { 900 {
@@ -1034,32 +902,23 @@ public class BSPrim : BSPhysObject
1034 { 902 {
1035 m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for non-solidness. id={1}, type={2}", LogHeader, LocalID, bodyType); 903 m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for non-solidness. id={1}, type={2}", LogHeader, LocalID, bodyType);
1036 } 904 }
1037 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE); 905 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE);
1038 906
1039 // Change collision info from a static object to a ghosty collision object 907 // Change collision info from a static object to a ghosty collision object
1040 PhysBody.collisionType = CollisionType.VolumeDetect; 908 PhysBody.collisionType = CollisionType.VolumeDetect;
1041 } 909 }
1042 } 910 }
1043 911
1044 // Enable physical actions. Bullet will keep sleeping non-moving physical objects so
1045 // they need waking up when parameters are changed.
1046 // Called in taint-time!!
1047 private void ActivateIfPhysical(bool forceIt)
1048 {
1049 if (IsPhysical && PhysBody.HasPhysicalBody)
1050 PhysicsScene.PE.Activate(PhysBody, forceIt);
1051 }
1052
1053 // Turn on or off the flag controlling whether collision events are returned to the simulator. 912 // Turn on or off the flag controlling whether collision events are returned to the simulator.
1054 private void EnableCollisions(bool wantsCollisionEvents) 913 private void EnableCollisions(bool wantsCollisionEvents)
1055 { 914 {
1056 if (wantsCollisionEvents) 915 if (wantsCollisionEvents)
1057 { 916 {
1058 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); 917 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
1059 } 918 }
1060 else 919 else
1061 { 920 {
1062 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); 921 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
1063 } 922 }
1064 } 923 }
1065 924
@@ -1070,7 +929,7 @@ public class BSPrim : BSPhysObject
1070 { 929 {
1071 if (PhysBody.HasPhysicalBody) 930 if (PhysBody.HasPhysicalBody)
1072 { 931 {
1073 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, PhysBody); 932 PhysScene.PE.AddObjectToWorld(PhysScene.World, PhysBody);
1074 } 933 }
1075 else 934 else
1076 { 935 {
@@ -1105,12 +964,12 @@ public class BSPrim : BSPhysObject
1105 public override bool FloatOnWater { 964 public override bool FloatOnWater {
1106 set { 965 set {
1107 _floatOnWater = value; 966 _floatOnWater = value;
1108 PhysicsScene.TaintedObject("BSPrim.setFloatOnWater", delegate() 967 PhysScene.TaintedObject("BSPrim.setFloatOnWater", delegate()
1109 { 968 {
1110 if (_floatOnWater) 969 if (_floatOnWater)
1111 CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); 970 CurrentCollisionFlags = PhysScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER);
1112 else 971 else
1113 CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); 972 CurrentCollisionFlags = PhysScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER);
1114 }); 973 });
1115 } 974 }
1116 } 975 }
@@ -1122,7 +981,7 @@ public class BSPrim : BSPhysObject
1122 _rotationalVelocity = value; 981 _rotationalVelocity = value;
1123 Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity); 982 Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity);
1124 // m_log.DebugFormat("{0}: RotationalVelocity={1}", LogHeader, _rotationalVelocity); 983 // m_log.DebugFormat("{0}: RotationalVelocity={1}", LogHeader, _rotationalVelocity);
1125 PhysicsScene.TaintedObject("BSPrim.setRotationalVelocity", delegate() 984 PhysScene.TaintedObject("BSPrim.setRotationalVelocity", delegate()
1126 { 985 {
1127 ForceRotationalVelocity = _rotationalVelocity; 986 ForceRotationalVelocity = _rotationalVelocity;
1128 }); 987 });
@@ -1137,7 +996,7 @@ public class BSPrim : BSPhysObject
1137 if (PhysBody.HasPhysicalBody) 996 if (PhysBody.HasPhysicalBody)
1138 { 997 {
1139 DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity); 998 DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
1140 PhysicsScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); 999 PhysScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity);
1141 // PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); 1000 // PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity);
1142 ActivateIfPhysical(false); 1001 ActivateIfPhysical(false);
1143 } 1002 }
@@ -1153,7 +1012,7 @@ public class BSPrim : BSPhysObject
1153 get { return _buoyancy; } 1012 get { return _buoyancy; }
1154 set { 1013 set {
1155 _buoyancy = value; 1014 _buoyancy = value;
1156 PhysicsScene.TaintedObject("BSPrim.setBuoyancy", delegate() 1015 PhysScene.TaintedObject("BSPrim.setBuoyancy", delegate()
1157 { 1016 {
1158 ForceBuoyancy = _buoyancy; 1017 ForceBuoyancy = _buoyancy;
1159 }); 1018 });
@@ -1171,78 +1030,13 @@ public class BSPrim : BSPhysObject
1171 } 1030 }
1172 } 1031 }
1173 1032
1174 // Used for MoveTo
1175 public override OMV.Vector3 PIDTarget {
1176 set
1177 {
1178 // TODO: add a sanity check -- don't move more than a region or something like that.
1179 _PIDTarget = value;
1180 }
1181 }
1182 public override float PIDTau {
1183 set { _PIDTau = value; }
1184 }
1185 public override bool PIDActive { 1033 public override bool PIDActive {
1186 set { 1034 set {
1187 if (value) 1035 base.MoveToTargetActive = value;
1188 { 1036 EnableActor(MoveToTargetActive, MoveToTargetActorName, delegate()
1189 // We're taking over after this.
1190 ZeroMotion(true);
1191
1192 _targetMotor = new BSVMotor("BSPrim.PIDTarget",
1193 _PIDTau, // timeScale
1194 BSMotor.Infinite, // decay time scale
1195 BSMotor.InfiniteVector, // friction timescale
1196 1f // efficiency
1197 );
1198 _targetMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
1199 _targetMotor.SetTarget(_PIDTarget);
1200 _targetMotor.SetCurrent(RawPosition);
1201 /*
1202 _targetMotor = new BSPIDVMotor("BSPrim.PIDTarget");
1203 _targetMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
1204
1205 _targetMotor.SetTarget(_PIDTarget);
1206 _targetMotor.SetCurrent(RawPosition);
1207 _targetMotor.TimeScale = _PIDTau;
1208 _targetMotor.Efficiency = 1f;
1209 */
1210
1211 RegisterPreStepAction("BSPrim.PIDTarget", LocalID, delegate(float timeStep)
1212 {
1213 if (!IsPhysicallyActive)
1214 {
1215 UnRegisterPreStepAction("BSPrim.PIDTarget", LocalID);
1216 return;
1217 }
1218
1219 OMV.Vector3 origPosition = RawPosition; // DEBUG DEBUG (for printout below)
1220
1221 // 'movePosition' is where we'd like the prim to be at this moment.
1222 OMV.Vector3 movePosition = RawPosition + _targetMotor.Step(timeStep);
1223
1224 // If we are very close to our target, turn off the movement motor.
1225 if (_targetMotor.ErrorIsZero())
1226 {
1227 DetailLog("{0},BSPrim.PIDTarget,zeroMovement,movePos={1},pos={2},mass={3}",
1228 LocalID, movePosition, RawPosition, Mass);
1229 ForcePosition = _targetMotor.TargetValue;
1230 _targetMotor.Enabled = false;
1231 }
1232 else
1233 {
1234 _position = movePosition;
1235 PositionSanityCheck(true /* intaintTime */);
1236 ForcePosition = _position;
1237 }
1238 DetailLog("{0},BSPrim.PIDTarget,move,fromPos={1},movePos={2}", LocalID, origPosition, movePosition);
1239 });
1240 }
1241 else
1242 { 1037 {
1243 // Stop any targetting 1038 return new BSActorMoveToTarget(PhysScene, this, MoveToTargetActorName);
1244 UnRegisterPreStepAction("BSPrim.PIDTarget", LocalID); 1039 });
1245 }
1246 } 1040 }
1247 } 1041 }
1248 1042
@@ -1250,94 +1044,20 @@ public class BSPrim : BSPhysObject
1250 // Hover Height will override MoveTo target's Z 1044 // Hover Height will override MoveTo target's Z
1251 public override bool PIDHoverActive { 1045 public override bool PIDHoverActive {
1252 set { 1046 set {
1253 if (value) 1047 base.HoverActive = value;
1254 { 1048 EnableActor(HoverActive, HoverActorName, delegate()
1255 // Turning the target on
1256 _hoverMotor = new BSFMotor("BSPrim.Hover",
1257 _PIDHoverTau, // timeScale
1258 BSMotor.Infinite, // decay time scale
1259 BSMotor.Infinite, // friction timescale
1260 1f // efficiency
1261 );
1262 _hoverMotor.SetTarget(ComputeCurrentPIDHoverHeight());
1263 _hoverMotor.SetCurrent(RawPosition.Z);
1264 _hoverMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
1265
1266 RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep)
1267 {
1268 // Don't do hovering while the object is selected.
1269 if (!IsPhysicallyActive)
1270 return;
1271
1272 _hoverMotor.SetCurrent(RawPosition.Z);
1273 _hoverMotor.SetTarget(ComputeCurrentPIDHoverHeight());
1274 float targetHeight = _hoverMotor.Step(timeStep);
1275
1276 // 'targetHeight' is where we'd like the Z of the prim to be at this moment.
1277 // Compute the amount of force to push us there.
1278 float moveForce = (targetHeight - RawPosition.Z) * Mass;
1279 // Undo anything the object thinks it's doing at the moment
1280 moveForce = -RawVelocity.Z * Mass;
1281
1282 PhysicsScene.PE.ApplyCentralImpulse(PhysBody, new OMV.Vector3(0f, 0f, moveForce));
1283 DetailLog("{0},BSPrim.Hover,move,targHt={1},moveForce={2},mass={3}", LocalID, targetHeight, moveForce, Mass);
1284 });
1285 }
1286 else
1287 { 1049 {
1288 UnRegisterPreStepAction("BSPrim.Hover", LocalID); 1050 return new BSActorHover(PhysScene, this, HoverActorName);
1289 } 1051 });
1290 }
1291 }
1292 public override float PIDHoverHeight {
1293 set { _PIDHoverHeight = value; }
1294 }
1295 public override PIDHoverType PIDHoverType {
1296 set { _PIDHoverType = value; }
1297 }
1298 public override float PIDHoverTau {
1299 set { _PIDHoverTau = value; }
1300 }
1301 // Based on current position, determine what we should be hovering at now.
1302 // Must recompute often. What if we walked offa cliff>
1303 private float ComputeCurrentPIDHoverHeight()
1304 {
1305 float ret = _PIDHoverHeight;
1306 float groundHeight = PhysicsScene.TerrainManager.GetTerrainHeightAtXYZ(RawPosition);
1307
1308 switch (_PIDHoverType)
1309 {
1310 case PIDHoverType.Ground:
1311 ret = groundHeight + _PIDHoverHeight;
1312 break;
1313 case PIDHoverType.GroundAndWater:
1314 float waterHeight = PhysicsScene.TerrainManager.GetWaterLevelAtXYZ(RawPosition);
1315 if (groundHeight > waterHeight)
1316 {
1317 ret = groundHeight + _PIDHoverHeight;
1318 }
1319 else
1320 {
1321 ret = waterHeight + _PIDHoverHeight;
1322 }
1323 break;
1324 } 1052 }
1325 return ret;
1326 } 1053 }
1327 1054
1328
1329 // For RotLookAt
1330 public override OMV.Quaternion APIDTarget { set { return; } }
1331 public override bool APIDActive { set { return; } }
1332 public override float APIDStrength { set { return; } }
1333 public override float APIDDamping { set { return; } }
1334
1335 public override void AddForce(OMV.Vector3 force, bool pushforce) { 1055 public override void AddForce(OMV.Vector3 force, bool pushforce) {
1336 // Per documentation, max force is limited. 1056 // Per documentation, max force is limited.
1337 OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); 1057 OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude);
1338 1058
1339 // Since this force is being applied in only one step, make this a force per second. 1059 // Since this force is being applied in only one step, make this a force per second.
1340 addForce /= PhysicsScene.LastTimeStep; 1060 addForce /= PhysScene.LastTimeStep;
1341 AddForce(addForce, pushforce, false /* inTaintTime */); 1061 AddForce(addForce, pushforce, false /* inTaintTime */);
1342 } 1062 }
1343 1063
@@ -1352,13 +1072,13 @@ public class BSPrim : BSPhysObject
1352 // DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce); 1072 // DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce);
1353 1073
1354 OMV.Vector3 addForce = force; 1074 OMV.Vector3 addForce = force;
1355 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate() 1075 PhysScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate()
1356 { 1076 {
1357 // Bullet adds this central force to the total force for this tick 1077 // Bullet adds this central force to the total force for this tick
1358 DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); 1078 DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce);
1359 if (PhysBody.HasPhysicalBody) 1079 if (PhysBody.HasPhysicalBody)
1360 { 1080 {
1361 PhysicsScene.PE.ApplyCentralForce(PhysBody, addForce); 1081 PhysScene.PE.ApplyCentralForce(PhysBody, addForce);
1362 ActivateIfPhysical(false); 1082 ActivateIfPhysical(false);
1363 } 1083 }
1364 }); 1084 });
@@ -1380,13 +1100,13 @@ public class BSPrim : BSPhysObject
1380 OMV.Vector3 addImpulse = Util.ClampV(impulse, BSParam.MaxAddForceMagnitude); 1100 OMV.Vector3 addImpulse = Util.ClampV(impulse, BSParam.MaxAddForceMagnitude);
1381 // DetailLog("{0},BSPrim.addForceImpulse,call,impulse={1}", LocalID, impulse); 1101 // DetailLog("{0},BSPrim.addForceImpulse,call,impulse={1}", LocalID, impulse);
1382 1102
1383 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddImpulse", delegate() 1103 PhysScene.TaintedObject(inTaintTime, "BSPrim.AddImpulse", delegate()
1384 { 1104 {
1385 // Bullet adds this impulse immediately to the velocity 1105 // Bullet adds this impulse immediately to the velocity
1386 DetailLog("{0},BSPrim.addForceImpulse,taint,impulseforce={1}", LocalID, addImpulse); 1106 DetailLog("{0},BSPrim.addForceImpulse,taint,impulseforce={1}", LocalID, addImpulse);
1387 if (PhysBody.HasPhysicalBody) 1107 if (PhysBody.HasPhysicalBody)
1388 { 1108 {
1389 PhysicsScene.PE.ApplyCentralImpulse(PhysBody, addImpulse); 1109 PhysScene.PE.ApplyCentralImpulse(PhysBody, addImpulse);
1390 ActivateIfPhysical(false); 1110 ActivateIfPhysical(false);
1391 } 1111 }
1392 }); 1112 });
@@ -1399,20 +1119,18 @@ public class BSPrim : BSPhysObject
1399 } 1119 }
1400 } 1120 }
1401 1121
1402 public override void AddAngularForce(OMV.Vector3 force, bool pushforce) { 1122 // BSPhysObject.AddAngularForce()
1403 AddAngularForce(force, pushforce, false); 1123 public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime)
1404 }
1405 public void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime)
1406 { 1124 {
1407 if (force.IsFinite()) 1125 if (force.IsFinite())
1408 { 1126 {
1409 OMV.Vector3 angForce = force; 1127 OMV.Vector3 angForce = force;
1410 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddAngularForce", delegate() 1128 PhysScene.TaintedObject(inTaintTime, "BSPrim.AddAngularForce", delegate()
1411 { 1129 {
1412 if (PhysBody.HasPhysicalBody) 1130 if (PhysBody.HasPhysicalBody)
1413 { 1131 {
1414 DetailLog("{0},BSPrim.AddAngularForce,taint,angForce={1}", LocalID, angForce); 1132 DetailLog("{0},BSPrim.AddAngularForce,taint,angForce={1}", LocalID, angForce);
1415 PhysicsScene.PE.ApplyTorque(PhysBody, angForce); 1133 PhysScene.PE.ApplyTorque(PhysBody, angForce);
1416 ActivateIfPhysical(false); 1134 ActivateIfPhysical(false);
1417 } 1135 }
1418 }); 1136 });
@@ -1431,11 +1149,11 @@ public class BSPrim : BSPhysObject
1431 public void ApplyTorqueImpulse(OMV.Vector3 impulse, bool inTaintTime) 1149 public void ApplyTorqueImpulse(OMV.Vector3 impulse, bool inTaintTime)
1432 { 1150 {
1433 OMV.Vector3 applyImpulse = impulse; 1151 OMV.Vector3 applyImpulse = impulse;
1434 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ApplyTorqueImpulse", delegate() 1152 PhysScene.TaintedObject(inTaintTime, "BSPrim.ApplyTorqueImpulse", delegate()
1435 { 1153 {
1436 if (PhysBody.HasPhysicalBody) 1154 if (PhysBody.HasPhysicalBody)
1437 { 1155 {
1438 PhysicsScene.PE.ApplyTorqueImpulse(PhysBody, applyImpulse); 1156 PhysScene.PE.ApplyTorqueImpulse(PhysBody, applyImpulse);
1439 ActivateIfPhysical(false); 1157 ActivateIfPhysical(false);
1440 } 1158 }
1441 }); 1159 });
@@ -1721,9 +1439,9 @@ public class BSPrim : BSPhysObject
1721 volume *= (profileEnd - profileBegin); 1439 volume *= (profileEnd - profileBegin);
1722 1440
1723 returnMass = Density * BSParam.DensityScaleFactor * volume; 1441 returnMass = Density * BSParam.DensityScaleFactor * volume;
1724 DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass);
1725 1442
1726 returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass); 1443 returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass);
1444 // DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass);
1727 1445
1728 return returnMass; 1446 return returnMass;
1729 }// end CalculateMass 1447 }// end CalculateMass
@@ -1736,13 +1454,14 @@ public class BSPrim : BSPhysObject
1736 { 1454 {
1737 // Create the correct physical representation for this type of object. 1455 // Create the correct physical representation for this type of object.
1738 // Updates base.PhysBody and base.PhysShape with the new information. 1456 // Updates base.PhysBody and base.PhysShape with the new information.
1739 // Ignore 'forceRebuild'. This routine makes the right choices and changes of necessary. 1457 // Ignore 'forceRebuild'. 'GetBodyAndShape' makes the right choices and changes of necessary.
1740 PhysicsScene.Shapes.GetBodyAndShape(false /*forceRebuild */, PhysicsScene.World, this, null, delegate(BulletBody dBody) 1458 PhysScene.Shapes.GetBodyAndShape(false /*forceRebuild */, PhysScene.World, this, delegate(BulletBody pBody, BulletShape pShape)
1741 { 1459 {
1742 // Called if the current prim body is about to be destroyed. 1460 // Called if the current prim body is about to be destroyed.
1743 // Remove all the physical dependencies on the old body. 1461 // Remove all the physical dependencies on the old body.
1744 // (Maybe someday make the changing of BSShape an event to be subscribed to by BSLinkset, ...) 1462 // (Maybe someday make the changing of BSShape an event to be subscribed to by BSLinkset, ...)
1745 RemoveBodyDependencies(); 1463 // Note: this virtual function is overloaded by BSPrimLinkable to remove linkset constraints.
1464 RemoveDependencies();
1746 }); 1465 });
1747 1466
1748 // Make sure the properties are set on the new object 1467 // Make sure the properties are set on the new object
@@ -1750,24 +1469,19 @@ public class BSPrim : BSPhysObject
1750 return; 1469 return;
1751 } 1470 }
1752 1471
1753 protected virtual void RemoveBodyDependencies() 1472 // Called at taint-time
1473 protected virtual void RemoveDependencies()
1754 { 1474 {
1755 VehicleController.RemoveBodyDependencies(this); 1475 PhysicalActors.RemoveDependencies();
1756 } 1476 }
1757 1477
1758 // The physics engine says that properties have updated. Update same and inform 1478 // The physics engine says that properties have updated. Update same and inform
1759 // the world that things have changed. 1479 // the world that things have changed.
1760 public override void UpdateProperties(EntityProperties entprop) 1480 public override void UpdateProperties(EntityProperties entprop)
1761 { 1481 {
1482 // Let anyone (like the actors) modify the updated properties before they are pushed into the object and the simulator.
1762 TriggerPreUpdatePropertyAction(ref entprop); 1483 TriggerPreUpdatePropertyAction(ref entprop);
1763 1484
1764 // A temporary kludge to suppress the rotational effects introduced on vehicles by Bullet
1765 // TODO: handle physics introduced by Bullet with computed vehicle physics.
1766 if (VehicleController.IsActive)
1767 {
1768 entprop.RotationalVelocity = OMV.Vector3.Zero;
1769 }
1770
1771 // DetailLog("{0},BSPrim.UpdateProperties,entry,entprop={1}", LocalID, entprop); // DEBUG DEBUG 1485 // DetailLog("{0},BSPrim.UpdateProperties,entry,entprop={1}", LocalID, entprop); // DEBUG DEBUG
1772 1486
1773 // Assign directly to the local variables so the normal set actions do not happen 1487 // Assign directly to the local variables so the normal set actions do not happen
@@ -1775,8 +1489,8 @@ public class BSPrim : BSPhysObject
1775 _orientation = entprop.Rotation; 1489 _orientation = entprop.Rotation;
1776 // DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be 1490 // DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be
1777 // very sensitive to velocity changes. 1491 // very sensitive to velocity changes.
1778 if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, BSParam.UpdateVelocityChangeThreshold)) 1492 if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(RawVelocity, BSParam.UpdateVelocityChangeThreshold))
1779 _velocity = entprop.Velocity; 1493 RawVelocity = entprop.Velocity;
1780 _acceleration = entprop.Acceleration; 1494 _acceleration = entprop.Acceleration;
1781 _rotationalVelocity = entprop.RotationalVelocity; 1495 _rotationalVelocity = entprop.RotationalVelocity;
1782 1496
@@ -1786,7 +1500,7 @@ public class BSPrim : BSPhysObject
1786 if (PositionSanityCheck(true /* inTaintTime */ )) 1500 if (PositionSanityCheck(true /* inTaintTime */ ))
1787 { 1501 {
1788 entprop.Position = _position; 1502 entprop.Position = _position;
1789 entprop.Velocity = _velocity; 1503 entprop.Velocity = RawVelocity;
1790 entprop.RotationalVelocity = _rotationalVelocity; 1504 entprop.RotationalVelocity = _rotationalVelocity;
1791 entprop.Acceleration = _acceleration; 1505 entprop.Acceleration = _acceleration;
1792 } 1506 }
@@ -1798,16 +1512,9 @@ public class BSPrim : BSPhysObject
1798 LastEntityProperties = CurrentEntityProperties; 1512 LastEntityProperties = CurrentEntityProperties;
1799 CurrentEntityProperties = entprop; 1513 CurrentEntityProperties = entprop;
1800 1514
1801 base.RequestPhysicsterseUpdate(); 1515 // Note that BSPrim can be overloaded by BSPrimLinkable which controls updates from root and children prims.
1802 /* 1516
1803 else 1517 PhysScene.PostUpdate(this);
1804 {
1805 // For debugging, report the movement of children
1806 DetailLog("{0},BSPrim.UpdateProperties,child,pos={1},orient={2},vel={3},accel={4},rotVel={5}",
1807 LocalID, entprop.Position, entprop.Rotation, entprop.Velocity,
1808 entprop.Acceleration, entprop.RotationalVelocity);
1809 }
1810 */
1811 } 1518 }
1812} 1519}
1813} 1520}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrimDisplaced.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrimDisplaced.cs
index f1c3b5c..f5ee671 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrimDisplaced.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrimDisplaced.cs
@@ -78,14 +78,16 @@ public class BSPrimDisplaced : BSPrim
78 // Set this sets and computes the displacement from the passed prim to the center-of-mass. 78 // Set this sets and computes the displacement from the passed prim to the center-of-mass.
79 // A user set value for center-of-mass overrides whatever might be passed in here. 79 // A user set value for center-of-mass overrides whatever might be passed in here.
80 // The displacement is in local coordinates (relative to root prim in linkset oriented coordinates). 80 // The displacement is in local coordinates (relative to root prim in linkset oriented coordinates).
81 public virtual void SetEffectiveCenterOfMassW(Vector3 centerOfMassDisplacement) 81 public virtual void SetEffectiveCenterOfMassDisplacement(Vector3 centerOfMassDisplacement)
82 { 82 {
83 Vector3 comDisp; 83 Vector3 comDisp;
84 if (UserSetCenterOfMass.HasValue) 84 if (UserSetCenterOfMassDisplacement.HasValue)
85 comDisp = (OMV.Vector3)UserSetCenterOfMass; 85 comDisp = (OMV.Vector3)UserSetCenterOfMassDisplacement;
86 else 86 else
87 comDisp = centerOfMassDisplacement; 87 comDisp = centerOfMassDisplacement;
88 88
89 DetailLog("{0},BSPrimDisplaced.SetEffectiveCenterOfMassDisplacement,userSet={1},comDisp={2}",
90 LocalID, UserSetCenterOfMassDisplacement.HasValue, comDisp);
89 if (comDisp == Vector3.Zero) 91 if (comDisp == Vector3.Zero)
90 { 92 {
91 // If there is no diplacement. Things get reset. 93 // If there is no diplacement. Things get reset.
@@ -107,9 +109,15 @@ public class BSPrimDisplaced : BSPrim
107 set 109 set
108 { 110 {
109 if (PositionDisplacement != OMV.Vector3.Zero) 111 if (PositionDisplacement != OMV.Vector3.Zero)
110 base.ForcePosition = value - (PositionDisplacement * RawOrientation); 112 {
113 OMV.Vector3 displacedPos = value - (PositionDisplacement * RawOrientation);
114 DetailLog("{0},BSPrimDisplaced.ForcePosition,val={1},disp={2},newPos={3}", LocalID, value, PositionDisplacement, displacedPos);
115 base.ForcePosition = displacedPos;
116 }
111 else 117 else
118 {
112 base.ForcePosition = value; 119 base.ForcePosition = value;
120 }
113 } 121 }
114 } 122 }
115 123
@@ -118,6 +126,7 @@ public class BSPrimDisplaced : BSPrim
118 get { return base.ForceOrientation; } 126 get { return base.ForceOrientation; }
119 set 127 set
120 { 128 {
129 // TODO:
121 base.ForceOrientation = value; 130 base.ForceOrientation = value;
122 } 131 }
123 } 132 }
@@ -143,7 +152,10 @@ public class BSPrimDisplaced : BSPrim
143 { 152 {
144 // Correct for any rotation around the center-of-mass 153 // Correct for any rotation around the center-of-mass
145 // TODO!!! 154 // TODO!!!
146 entprop.Position = entprop.Position + (PositionDisplacement * entprop.Rotation); 155
156 OMV.Vector3 displacedPos = entprop.Position + (PositionDisplacement * entprop.Rotation);
157 DetailLog("{0},BSPrimDisplaced.ForcePosition,physPos={1},disp={2},newPos={3}", LocalID, entprop.Position, PositionDisplacement, displacedPos);
158 entprop.Position = displacedPos;
147 // entprop.Rotation = something; 159 // entprop.Rotation = something;
148 } 160 }
149 161
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrimLinkable.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrimLinkable.cs
index d65d407..235da78 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrimLinkable.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrimLinkable.cs
@@ -47,9 +47,9 @@ public class BSPrimLinkable : BSPrimDisplaced
47 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical) 47 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical)
48 : base(localID, primName, parent_scene, pos, size, rotation, pbs, pisPhysical) 48 : base(localID, primName, parent_scene, pos, size, rotation, pbs, pisPhysical)
49 { 49 {
50 Linkset = BSLinkset.Factory(PhysicsScene, this); 50 Linkset = BSLinkset.Factory(PhysScene, this);
51 51
52 PhysicsScene.TaintedObject("BSPrimLinksetCompound.Refresh", delegate() 52 PhysScene.TaintedObject("BSPrimLinksetCompound.Refresh", delegate()
53 { 53 {
54 Linkset.Refresh(this); 54 Linkset.Refresh(this);
55 }); 55 });
@@ -61,9 +61,6 @@ public class BSPrimLinkable : BSPrimDisplaced
61 base.Destroy(); 61 base.Destroy();
62 } 62 }
63 63
64 public override BSPhysicsShapeType PreferredPhysicalShape
65 { get { return Linkset.PreferredPhysicalShape(this); } }
66
67 public override void link(Manager.PhysicsActor obj) 64 public override void link(Manager.PhysicsActor obj)
68 { 65 {
69 BSPrimLinkable parent = obj as BSPrimLinkable; 66 BSPrimLinkable parent = obj as BSPrimLinkable;
@@ -102,7 +99,7 @@ public class BSPrimLinkable : BSPrimDisplaced
102 set 99 set
103 { 100 {
104 base.Position = value; 101 base.Position = value;
105 PhysicsScene.TaintedObject("BSPrimLinkset.setPosition", delegate() 102 PhysScene.TaintedObject("BSPrimLinkset.setPosition", delegate()
106 { 103 {
107 Linkset.UpdateProperties(UpdatedProperties.Position, this); 104 Linkset.UpdateProperties(UpdatedProperties.Position, this);
108 }); 105 });
@@ -116,7 +113,7 @@ public class BSPrimLinkable : BSPrimDisplaced
116 set 113 set
117 { 114 {
118 base.Orientation = value; 115 base.Orientation = value;
119 PhysicsScene.TaintedObject("BSPrimLinkset.setOrientation", delegate() 116 PhysScene.TaintedObject("BSPrimLinkset.setOrientation", delegate()
120 { 117 {
121 Linkset.UpdateProperties(UpdatedProperties.Orientation, this); 118 Linkset.UpdateProperties(UpdatedProperties.Orientation, this);
122 }); 119 });
@@ -149,10 +146,10 @@ public class BSPrimLinkable : BSPrimDisplaced
149 } 146 }
150 147
151 // Body is being taken apart. Remove physical dependencies and schedule a rebuild. 148 // Body is being taken apart. Remove physical dependencies and schedule a rebuild.
152 protected override void RemoveBodyDependencies() 149 protected override void RemoveDependencies()
153 { 150 {
154 Linkset.RemoveBodyDependencies(this); 151 Linkset.RemoveDependencies(this);
155 base.RemoveBodyDependencies(); 152 base.RemoveDependencies();
156 } 153 }
157 154
158 public override void UpdateProperties(EntityProperties entprop) 155 public override void UpdateProperties(EntityProperties entprop)
@@ -163,6 +160,15 @@ public class BSPrimLinkable : BSPrimDisplaced
163 // TODO: this will have to change when linksets are articulated. 160 // TODO: this will have to change when linksets are articulated.
164 base.UpdateProperties(entprop); 161 base.UpdateProperties(entprop);
165 } 162 }
163 /*
164 else
165 {
166 // For debugging, report the movement of children
167 DetailLog("{0},BSPrim.UpdateProperties,child,pos={1},orient={2},vel={3},accel={4},rotVel={5}",
168 LocalID, entprop.Position, entprop.Rotation, entprop.Velocity,
169 entprop.Acceleration, entprop.RotationalVelocity);
170 }
171 */
166 // The linkset might like to know about changing locations 172 // The linkset might like to know about changing locations
167 Linkset.UpdateProperties(UpdatedProperties.EntPropUpdates, this); 173 Linkset.UpdateProperties(UpdatedProperties.EntPropUpdates, this);
168 } 174 }
@@ -176,6 +182,10 @@ public class BSPrimLinkable : BSPrimDisplaced
176 { 182 {
177 return false; 183 return false;
178 } 184 }
185
186 // TODO: handle collisions of other objects with with children of linkset.
187 // This is a problem for LinksetCompound since the children are packed into the root.
188
179 return base.Collide(collidingWith, collidee, contactPoint, contactNormal, pentrationDepth); 189 return base.Collide(collidingWith, collidee, contactPoint, contactNormal, pentrationDepth);
180 } 190 }
181} 191}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index e6aefd5..423c389 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -56,12 +56,23 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
56 public string BulletEngineName { get; private set; } 56 public string BulletEngineName { get; private set; }
57 public BSAPITemplate PE; 57 public BSAPITemplate PE;
58 58
59 // If the physics engine is running on a separate thread
60 public Thread m_physicsThread;
61
59 public Dictionary<uint, BSPhysObject> PhysObjects; 62 public Dictionary<uint, BSPhysObject> PhysObjects;
60 public BSShapeCollection Shapes; 63 public BSShapeCollection Shapes;
61 64
62 // Keeping track of the objects with collisions so we can report begin and end of a collision 65 // Keeping track of the objects with collisions so we can report begin and end of a collision
63 public HashSet<BSPhysObject> ObjectsWithCollisions = new HashSet<BSPhysObject>(); 66 public HashSet<BSPhysObject> ObjectsWithCollisions = new HashSet<BSPhysObject>();
64 public HashSet<BSPhysObject> ObjectsWithNoMoreCollisions = new HashSet<BSPhysObject>(); 67 public HashSet<BSPhysObject> ObjectsWithNoMoreCollisions = new HashSet<BSPhysObject>();
68
69 // All the collision processing is protected with this lock object
70 public Object CollisionLock = new Object();
71
72 // Properties are updated here
73 public Object UpdateLock = new Object();
74 public HashSet<BSPhysObject> ObjectsWithUpdates = new HashSet<BSPhysObject>();
75
65 // Keep track of all the avatars so we can send them a collision event 76 // Keep track of all the avatars so we can send them a collision event
66 // every tick so OpenSim will update its animation. 77 // every tick so OpenSim will update its animation.
67 private HashSet<BSPhysObject> m_avatars = new HashSet<BSPhysObject>(); 78 private HashSet<BSPhysObject> m_avatars = new HashSet<BSPhysObject>();
@@ -77,12 +88,19 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
77 public BSConstraintCollection Constraints { get; private set; } 88 public BSConstraintCollection Constraints { get; private set; }
78 89
79 // Simulation parameters 90 // Simulation parameters
91 internal float m_physicsStepTime; // if running independently, the interval simulated by default
92
80 internal int m_maxSubSteps; 93 internal int m_maxSubSteps;
81 internal float m_fixedTimeStep; 94 internal float m_fixedTimeStep;
82 internal long m_simulationStep = 0; 95
83 internal float NominalFrameRate { get; set; } 96 internal float m_simulatedTime; // the time simulated previously. Used for physics framerate calc.
97
98 internal long m_simulationStep = 0; // The current simulation step.
84 public long SimulationStep { get { return m_simulationStep; } } 99 public long SimulationStep { get { return m_simulationStep; } }
85 internal float LastTimeStep { get; private set; } 100
101 internal float LastTimeStep { get; private set; } // The simulation time from the last invocation of Simulate()
102
103 internal float NominalFrameRate { get; set; } // Parameterized ideal frame rate that simulation is scaled to
86 104
87 // Physical objects can register for prestep or poststep events 105 // Physical objects can register for prestep or poststep events
88 public delegate void PreStepAction(float timeStep); 106 public delegate void PreStepAction(float timeStep);
@@ -90,7 +108,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
90 public event PreStepAction BeforeStep; 108 public event PreStepAction BeforeStep;
91 public event PostStepAction AfterStep; 109 public event PostStepAction AfterStep;
92 110
93 // A value of the time now so all the collision and update routines do not have to get their own 111 // A value of the time 'now' so all the collision and update routines do not have to get their own
94 // Set to 'now' just before all the prims and actors are called for collisions and updates 112 // Set to 'now' just before all the prims and actors are called for collisions and updates
95 public int SimulationNowTime { get; private set; } 113 public int SimulationNowTime { get; private set; }
96 114
@@ -188,6 +206,9 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
188 PhysObjects = new Dictionary<uint, BSPhysObject>(); 206 PhysObjects = new Dictionary<uint, BSPhysObject>();
189 Shapes = new BSShapeCollection(this); 207 Shapes = new BSShapeCollection(this);
190 208
209 m_simulatedTime = 0f;
210 LastTimeStep = 0.1f;
211
191 // Allocate pinned memory to pass parameters. 212 // Allocate pinned memory to pass parameters.
192 UnmanagedParams = new ConfigurationParameters[1]; 213 UnmanagedParams = new ConfigurationParameters[1];
193 214
@@ -227,10 +248,20 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
227 TerrainManager = new BSTerrainManager(this); 248 TerrainManager = new BSTerrainManager(this);
228 TerrainManager.CreateInitialGroundPlaneAndTerrain(); 249 TerrainManager.CreateInitialGroundPlaneAndTerrain();
229 250
251 // Put some informational messages into the log file.
230 m_log.WarnFormat("{0} Linksets implemented with {1}", LogHeader, (BSLinkset.LinksetImplementation)BSParam.LinksetImplementation); 252 m_log.WarnFormat("{0} Linksets implemented with {1}", LogHeader, (BSLinkset.LinksetImplementation)BSParam.LinksetImplementation);
231 253
232 InTaintTime = false; 254 InTaintTime = false;
233 m_initialized = true; 255 m_initialized = true;
256
257 // If the physics engine runs on its own thread, start same.
258 if (BSParam.UseSeparatePhysicsThread)
259 {
260 // The physics simulation should happen independently of the heartbeat loop
261 m_physicsThread = new Thread(BulletSPluginPhysicsThread);
262 m_physicsThread.Name = BulletEngineName;
263 m_physicsThread.Start();
264 }
234 } 265 }
235 266
236 // All default parameter values are set here. There should be no values set in the 267 // All default parameter values are set here. There should be no values set in the
@@ -268,6 +299,13 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
268 // Do any replacements in the parameters 299 // Do any replacements in the parameters
269 m_physicsLoggingPrefix = m_physicsLoggingPrefix.Replace("%REGIONNAME%", RegionName); 300 m_physicsLoggingPrefix = m_physicsLoggingPrefix.Replace("%REGIONNAME%", RegionName);
270 } 301 }
302 else
303 {
304 // Nothing in the configuration INI file so assume unmanaged and other defaults.
305 BulletEngineName = "BulletUnmanaged";
306 m_physicsLoggingEnabled = false;
307 VehicleLoggingEnabled = false;
308 }
271 309
272 // The material characteristics. 310 // The material characteristics.
273 BSMaterials.InitializeFromDefaults(Params); 311 BSMaterials.InitializeFromDefaults(Params);
@@ -311,11 +349,22 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
311 349
312 switch (selectionName) 350 switch (selectionName)
313 { 351 {
352 case "bullet":
314 case "bulletunmanaged": 353 case "bulletunmanaged":
315 ret = new BSAPIUnman(engineName, this); 354 ret = new BSAPIUnman(engineName, this);
316 break; 355 break;
317 case "bulletxna": 356 case "bulletxna":
318 ret = new BSAPIXNA(engineName, this); 357 ret = new BSAPIXNA(engineName, this);
358 // Disable some features that are not implemented in BulletXNA
359 m_log.InfoFormat("{0} Disabling some physics features not implemented by BulletXNA", LogHeader);
360 m_log.InfoFormat("{0} Disabling ShouldUseBulletHACD", LogHeader);
361 BSParam.ShouldUseBulletHACD = false;
362 m_log.InfoFormat("{0} Disabling ShouldUseSingleConvexHullForPrims", LogHeader);
363 BSParam.ShouldUseSingleConvexHullForPrims = false;
364 m_log.InfoFormat("{0} Disabling ShouldUseGImpactShapeForPrims", LogHeader);
365 BSParam.ShouldUseGImpactShapeForPrims = false;
366 m_log.InfoFormat("{0} Setting terrain implimentation to Heightmap", LogHeader);
367 BSParam.TerrainImplementation = (float)BSTerrainPhys.TerrainImplementation.Heightmap;
319 break; 368 break;
320 } 369 }
321 370
@@ -463,7 +512,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
463 512
464 if (!m_initialized) return null; 513 if (!m_initialized) return null;
465 514
466 DetailLog("{0},BSScene.AddPrimShape,call", localID); 515 // DetailLog("{0},BSScene.AddPrimShape,call", localID);
467 516
468 BSPhysObject prim = new BSPrimLinkable(localID, primName, this, position, size, rotation, pbs, isPhysical); 517 BSPhysObject prim = new BSPrimLinkable(localID, primName, this, position, size, rotation, pbs, isPhysical);
469 lock (PhysObjects) PhysObjects.Add(localID, prim); 518 lock (PhysObjects) PhysObjects.Add(localID, prim);
@@ -478,25 +527,41 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
478 #endregion // Prim and Avatar addition and removal 527 #endregion // Prim and Avatar addition and removal
479 528
480 #region Simulation 529 #region Simulation
481 // Simulate one timestep 530
531 // Call from the simulator to send physics information to the simulator objects.
532 // This pushes all the collision and property update events into the objects in
533 // the simulator and, since it is on the heartbeat thread, there is an implicit
534 // locking of those data structures from other heartbeat events.
535 // If the physics engine is running on a separate thread, the update information
536 // will be in the ObjectsWithCollions and ObjectsWithUpdates structures.
482 public override float Simulate(float timeStep) 537 public override float Simulate(float timeStep)
483 { 538 {
539 if (!BSParam.UseSeparatePhysicsThread)
540 {
541 DoPhysicsStep(timeStep);
542 }
543 return SendUpdatesToSimulator(timeStep);
544 }
545
546 // Call the physics engine to do one 'timeStep' and collect collisions and updates
547 // into ObjectsWithCollisions and ObjectsWithUpdates data structures.
548 private void DoPhysicsStep(float timeStep)
549 {
484 // prevent simulation until we've been initialized 550 // prevent simulation until we've been initialized
485 if (!m_initialized) return 5.0f; 551 if (!m_initialized) return;
486 552
487 LastTimeStep = timeStep; 553 LastTimeStep = timeStep;
488 554
489 int updatedEntityCount = 0; 555 int updatedEntityCount = 0;
490 int collidersCount = 0; 556 int collidersCount = 0;
491 557
492 int beforeTime = 0; 558 int beforeTime = Util.EnvironmentTickCount();
493 int simTime = 0; 559 int simTime = 0;
494 560
495 // update the prim states while we know the physics engine is not busy
496 int numTaints = _taintOperations.Count; 561 int numTaints = _taintOperations.Count;
497
498 InTaintTime = true; // Only used for debugging so locking is not necessary. 562 InTaintTime = true; // Only used for debugging so locking is not necessary.
499 563
564 // update the prim states while we know the physics engine is not busy
500 ProcessTaints(); 565 ProcessTaints();
501 566
502 // Some of the physical objects requre individual, pre-step calls 567 // Some of the physical objects requre individual, pre-step calls
@@ -519,18 +584,8 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
519 int numSubSteps = 0; 584 int numSubSteps = 0;
520 try 585 try
521 { 586 {
522 if (PhysicsLogging.Enabled)
523 beforeTime = Util.EnvironmentTickCount();
524
525 numSubSteps = PE.PhysicsStep(World, timeStep, m_maxSubSteps, m_fixedTimeStep, out updatedEntityCount, out collidersCount); 587 numSubSteps = PE.PhysicsStep(World, timeStep, m_maxSubSteps, m_fixedTimeStep, out updatedEntityCount, out collidersCount);
526 588
527 if (PhysicsLogging.Enabled)
528 {
529 simTime = Util.EnvironmentTickCountSubtract(beforeTime);
530 DetailLog("{0},Simulate,call, frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
531 DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
532 updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
533 }
534 } 589 }
535 catch (Exception e) 590 catch (Exception e)
536 { 591 {
@@ -542,77 +597,62 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
542 collidersCount = 0; 597 collidersCount = 0;
543 } 598 }
544 599
600 // Make the physics engine dump useful statistics periodically
545 if (PhysicsMetricDumpFrames != 0 && ((m_simulationStep % PhysicsMetricDumpFrames) == 0)) 601 if (PhysicsMetricDumpFrames != 0 && ((m_simulationStep % PhysicsMetricDumpFrames) == 0))
546 PE.DumpPhysicsStatistics(World); 602 PE.DumpPhysicsStatistics(World);
547 603
548 // Get a value for 'now' so all the collision and update routines don't have to get their own. 604 // Get a value for 'now' so all the collision and update routines don't have to get their own.
549 SimulationNowTime = Util.EnvironmentTickCount(); 605 SimulationNowTime = Util.EnvironmentTickCount();
550 606
551 // If there were collisions, process them by sending the event to the prim. 607 // Send collision information to the colliding objects. The objects decide if the collision
552 // Collisions must be processed before updates. 608 // is 'real' (like linksets don't collide with themselves) and the individual objects
553 if (collidersCount > 0) 609 // know if the simulator has subscribed to collisions.
610 lock (CollisionLock)
554 { 611 {
555 for (int ii = 0; ii < collidersCount; ii++) 612 if (collidersCount > 0)
556 { 613 {
557 uint cA = m_collisionArray[ii].aID; 614 for (int ii = 0; ii < collidersCount; ii++)
558 uint cB = m_collisionArray[ii].bID;
559 Vector3 point = m_collisionArray[ii].point;
560 Vector3 normal = m_collisionArray[ii].normal;
561 float penetration = m_collisionArray[ii].penetration;
562 SendCollision(cA, cB, point, normal, penetration);
563 SendCollision(cB, cA, point, -normal, penetration);
564 }
565 }
566
567 // The above SendCollision's batch up the collisions on the objects.
568 // Now push the collisions into the simulator.
569 if (ObjectsWithCollisions.Count > 0)
570 {
571 foreach (BSPhysObject bsp in ObjectsWithCollisions)
572 if (!bsp.SendCollisions())
573 { 615 {
574 // If the object is done colliding, see that it's removed from the colliding list 616 uint cA = m_collisionArray[ii].aID;
575 ObjectsWithNoMoreCollisions.Add(bsp); 617 uint cB = m_collisionArray[ii].bID;
618 Vector3 point = m_collisionArray[ii].point;
619 Vector3 normal = m_collisionArray[ii].normal;
620 float penetration = m_collisionArray[ii].penetration;
621 SendCollision(cA, cB, point, normal, penetration);
622 SendCollision(cB, cA, point, -normal, penetration);
576 } 623 }
624 }
577 } 625 }
578 626
579 // This is a kludge to get avatar movement updates. 627 // If any of the objects had updated properties, tell the managed objects about the update
580 // The simulator expects collisions for avatars even if there are have been no collisions. 628 // and remember that there was a change so it will be passed to the simulator.
581 // The event updates avatar animations and stuff. 629 lock (UpdateLock)
582 // If you fix avatar animation updates, remove this overhead and let normal collision processing happen.
583 foreach (BSPhysObject bsp in m_avatars)
584 if (!ObjectsWithCollisions.Contains(bsp)) // don't call avatars twice
585 bsp.SendCollisions();
586
587 // Objects that are done colliding are removed from the ObjectsWithCollisions list.
588 // Not done above because it is inside an iteration of ObjectWithCollisions.
589 // This complex collision processing is required to create an empty collision
590 // event call after all real collisions have happened on an object. This enables
591 // the simulator to generate the 'collision end' event.
592 if (ObjectsWithNoMoreCollisions.Count > 0)
593 {
594 foreach (BSPhysObject po in ObjectsWithNoMoreCollisions)
595 ObjectsWithCollisions.Remove(po);
596 ObjectsWithNoMoreCollisions.Clear();
597 }
598 // Done with collisions.
599
600 // If any of the objects had updated properties, tell the object it has been changed by the physics engine
601 if (updatedEntityCount > 0)
602 { 630 {
603 for (int ii = 0; ii < updatedEntityCount; ii++) 631 if (updatedEntityCount > 0)
604 { 632 {
605 EntityProperties entprop = m_updateArray[ii]; 633 for (int ii = 0; ii < updatedEntityCount; ii++)
606 BSPhysObject pobj;
607 if (PhysObjects.TryGetValue(entprop.ID, out pobj))
608 { 634 {
609 pobj.UpdateProperties(entprop); 635 EntityProperties entprop = m_updateArray[ii];
636 BSPhysObject pobj;
637 if (PhysObjects.TryGetValue(entprop.ID, out pobj))
638 {
639 pobj.UpdateProperties(entprop);
640 }
610 } 641 }
611 } 642 }
612 } 643 }
613 644
645 // Some actors want to know when the simulation step is complete.
614 TriggerPostStepEvent(timeStep); 646 TriggerPostStepEvent(timeStep);
615 647
648 simTime = Util.EnvironmentTickCountSubtract(beforeTime);
649 if (PhysicsLogging.Enabled)
650 {
651 DetailLog("{0},DoPhysicsStep,call, frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
652 DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
653 updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
654 }
655
616 // The following causes the unmanaged code to output ALL the values found in ALL the objects in the world. 656 // The following causes the unmanaged code to output ALL the values found in ALL the objects in the world.
617 // Only enable this in a limited test world with few objects. 657 // Only enable this in a limited test world with few objects.
618 if (m_physicsPhysicalDumpEnabled) 658 if (m_physicsPhysicalDumpEnabled)
@@ -621,7 +661,84 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
621 // The physics engine returns the number of milliseconds it simulated this call. 661 // The physics engine returns the number of milliseconds it simulated this call.
622 // These are summed and normalized to one second and divided by 1000 to give the reported physics FPS. 662 // These are summed and normalized to one second and divided by 1000 to give the reported physics FPS.
623 // Multiply by a fixed nominal frame rate to give a rate similar to the simulator (usually 55). 663 // Multiply by a fixed nominal frame rate to give a rate similar to the simulator (usually 55).
624 return (float)numSubSteps * m_fixedTimeStep * 1000f * NominalFrameRate; 664 m_simulatedTime += (float)numSubSteps * m_fixedTimeStep * 1000f * NominalFrameRate;
665 }
666
667 // Called by a BSPhysObject to note that it has changed properties and this information
668 // should be passed up to the simulator at the proper time.
669 // Note: this is called by the BSPhysObject from invocation via DoPhysicsStep() above so
670 // this is is under UpdateLock.
671 public void PostUpdate(BSPhysObject updatee)
672 {
673 ObjectsWithUpdates.Add(updatee);
674 }
675
676 // The simulator thinks it is physics time so return all the collisions and position
677 // updates that were collected in actual physics simulation.
678 private float SendUpdatesToSimulator(float timeStep)
679 {
680 if (!m_initialized) return 5.0f;
681
682 DetailLog("{0},SendUpdatesToSimulator,collisions={1},updates={2},simedTime={3}",
683 BSScene.DetailLogZero, ObjectsWithCollisions.Count, ObjectsWithUpdates.Count, m_simulatedTime);
684 // Push the collisions into the simulator.
685 lock (CollisionLock)
686 {
687 if (ObjectsWithCollisions.Count > 0)
688 {
689 foreach (BSPhysObject bsp in ObjectsWithCollisions)
690 if (!bsp.SendCollisions())
691 {
692 // If the object is done colliding, see that it's removed from the colliding list
693 ObjectsWithNoMoreCollisions.Add(bsp);
694 }
695 }
696
697 // This is a kludge to get avatar movement updates.
698 // The simulator expects collisions for avatars even if there are have been no collisions.
699 // The event updates avatar animations and stuff.
700 // If you fix avatar animation updates, remove this overhead and let normal collision processing happen.
701 foreach (BSPhysObject bsp in m_avatars)
702 if (!ObjectsWithCollisions.Contains(bsp)) // don't call avatars twice
703 bsp.SendCollisions();
704
705 // Objects that are done colliding are removed from the ObjectsWithCollisions list.
706 // Not done above because it is inside an iteration of ObjectWithCollisions.
707 // This complex collision processing is required to create an empty collision
708 // event call after all real collisions have happened on an object. This allows
709 // the simulator to generate the 'collision end' event.
710 if (ObjectsWithNoMoreCollisions.Count > 0)
711 {
712 foreach (BSPhysObject po in ObjectsWithNoMoreCollisions)
713 ObjectsWithCollisions.Remove(po);
714 ObjectsWithNoMoreCollisions.Clear();
715 }
716 }
717
718 // Call the simulator for each object that has physics property updates.
719 HashSet<BSPhysObject> updatedObjects = null;
720 lock (UpdateLock)
721 {
722 if (ObjectsWithUpdates.Count > 0)
723 {
724 updatedObjects = ObjectsWithUpdates;
725 ObjectsWithUpdates = new HashSet<BSPhysObject>();
726 }
727 }
728 if (updatedObjects != null)
729 {
730 foreach (BSPhysObject obj in updatedObjects)
731 {
732 obj.RequestPhysicsterseUpdate();
733 }
734 updatedObjects.Clear();
735 }
736
737 // Return the framerate simulated to give the above returned results.
738 // (Race condition here but this is just bookkeeping so rare mistakes do not merit a lock).
739 float simTime = m_simulatedTime;
740 m_simulatedTime = 0f;
741 return simTime;
625 } 742 }
626 743
627 // Something has collided 744 // Something has collided
@@ -640,7 +757,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
640 return; 757 return;
641 } 758 }
642 759
643 // The terrain is not in the physical object list so 'collidee' can be null when Collide() is called. 760 // Note: the terrain is not in the physical object list so 'collidee' can be null when Collide() is called.
644 BSPhysObject collidee = null; 761 BSPhysObject collidee = null;
645 PhysObjects.TryGetValue(collidingWith, out collidee); 762 PhysObjects.TryGetValue(collidingWith, out collidee);
646 763
@@ -648,13 +765,39 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
648 765
649 if (collider.Collide(collidingWith, collidee, collidePoint, collideNormal, penetration)) 766 if (collider.Collide(collidingWith, collidee, collidePoint, collideNormal, penetration))
650 { 767 {
651 // If a collision was posted, remember to send it to the simulator 768 // If a collision was 'good', remember to send it to the simulator
652 ObjectsWithCollisions.Add(collider); 769 ObjectsWithCollisions.Add(collider);
653 } 770 }
654 771
655 return; 772 return;
656 } 773 }
657 774
775 public void BulletSPluginPhysicsThread()
776 {
777 while (m_initialized)
778 {
779 int beginSimulationRealtimeMS = Util.EnvironmentTickCount();
780 DoPhysicsStep(BSParam.PhysicsTimeStep);
781 int simulationRealtimeMS = Util.EnvironmentTickCountSubtract(beginSimulationRealtimeMS);
782 int simulationTimeVsRealtimeDifferenceMS = ((int)(BSParam.PhysicsTimeStep*1000f)) - simulationRealtimeMS;
783
784 if (simulationTimeVsRealtimeDifferenceMS > 0)
785 {
786 // The simulation of the time interval took less than realtime.
787 // Do a sleep for the rest of realtime.
788 DetailLog("{0},BulletSPluginPhysicsThread,sleeping={1}", BSScene.DetailLogZero, simulationTimeVsRealtimeDifferenceMS);
789 Thread.Sleep(simulationTimeVsRealtimeDifferenceMS);
790 }
791 else
792 {
793 // The simulation took longer than realtime.
794 // Do some scaling of simulation time.
795 // TODO.
796 DetailLog("{0},BulletSPluginPhysicsThread,longerThanRealtime={1}", BSScene.DetailLogZero, simulationTimeVsRealtimeDifferenceMS);
797 }
798 }
799 }
800
658 #endregion // Simulation 801 #endregion // Simulation
659 802
660 public override void GetResults() { } 803 public override void GetResults() { }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
index 220fbbc..32bbc8f 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
@@ -38,38 +38,15 @@ public sealed class BSShapeCollection : IDisposable
38{ 38{
39 private static string LogHeader = "[BULLETSIM SHAPE COLLECTION]"; 39 private static string LogHeader = "[BULLETSIM SHAPE COLLECTION]";
40 40
41 private BSScene PhysicsScene { get; set; } 41 private BSScene m_physicsScene { get; set; }
42 42
43 private Object m_collectionActivityLock = new Object(); 43 private Object m_collectionActivityLock = new Object();
44 44
45 // Description of a Mesh
46 private struct MeshDesc
47 {
48 public BulletShape shape;
49 public int referenceCount;
50 public DateTime lastReferenced;
51 public UInt64 shapeKey;
52 }
53
54 // Description of a hull.
55 // Meshes and hulls have the same shape hash key but we only need hulls for efficient collision calculations.
56 private struct HullDesc
57 {
58 public BulletShape shape;
59 public int referenceCount;
60 public DateTime lastReferenced;
61 public UInt64 shapeKey;
62 }
63
64 // The sharable set of meshes and hulls. Indexed by their shape hash.
65 private Dictionary<System.UInt64, MeshDesc> Meshes = new Dictionary<System.UInt64, MeshDesc>();
66 private Dictionary<System.UInt64, HullDesc> Hulls = new Dictionary<System.UInt64, HullDesc>();
67
68 private bool DDetail = false; 45 private bool DDetail = false;
69 46
70 public BSShapeCollection(BSScene physScene) 47 public BSShapeCollection(BSScene physScene)
71 { 48 {
72 PhysicsScene = physScene; 49 m_physicsScene = physScene;
73 // Set the next to 'true' for very detailed shape update detailed logging (detailed details?) 50 // Set the next to 'true' for very detailed shape update detailed logging (detailed details?)
74 // While detailed debugging is still active, this is better than commenting out all the 51 // While detailed debugging is still active, this is better than commenting out all the
75 // DetailLog statements. When debugging slows down, this and the protected logging 52 // DetailLog statements. When debugging slows down, this and the protected logging
@@ -86,22 +63,18 @@ public sealed class BSShapeCollection : IDisposable
86 // Mostly used for changing bodies out from under Linksets. 63 // Mostly used for changing bodies out from under Linksets.
87 // Useful for other cases where parameters need saving. 64 // Useful for other cases where parameters need saving.
88 // Passing 'null' says no callback. 65 // Passing 'null' says no callback.
89 public delegate void ShapeDestructionCallback(BulletShape shape); 66 public delegate void PhysicalDestructionCallback(BulletBody pBody, BulletShape pShape);
90 public delegate void BodyDestructionCallback(BulletBody body);
91 67
92 // Called to update/change the body and shape for an object. 68 // Called to update/change the body and shape for an object.
93 // First checks the shape and updates that if necessary then makes 69 // The object has some shape and body on it. Here we decide if that is the correct shape
94 // sure the body is of the right type. 70 // for the current state of the object (static/dynamic/...).
71 // If bodyCallback is not null, it is called if either the body or the shape are changed
72 // so dependencies (like constraints) can be removed before the physical object is dereferenced.
95 // Return 'true' if either the body or the shape changed. 73 // Return 'true' if either the body or the shape changed.
96 // 'shapeCallback' and 'bodyCallback' are, if non-null, functions called just before 74 // Called at taint-time.
97 // the current shape or body is destroyed. This allows the caller to remove any 75 public bool GetBodyAndShape(bool forceRebuild, BulletWorld sim, BSPhysObject prim, PhysicalDestructionCallback bodyCallback)
98 // higher level dependencies on the shape or body. Mostly used for LinkSets to
99 // remove the physical constraints before the body is destroyed.
100 // Called at taint-time!!
101 public bool GetBodyAndShape(bool forceRebuild, BulletWorld sim, BSPhysObject prim,
102 ShapeDestructionCallback shapeCallback, BodyDestructionCallback bodyCallback)
103 { 76 {
104 PhysicsScene.AssertInTaintTime("BSShapeCollection.GetBodyAndShape"); 77 m_physicsScene.AssertInTaintTime("BSShapeCollection.GetBodyAndShape");
105 78
106 bool ret = false; 79 bool ret = false;
107 80
@@ -111,12 +84,12 @@ public sealed class BSShapeCollection : IDisposable
111 // Do we have the correct geometry for this type of object? 84 // Do we have the correct geometry for this type of object?
112 // Updates prim.BSShape with information/pointers to shape. 85 // Updates prim.BSShape with information/pointers to shape.
113 // Returns 'true' of BSShape is changed to a new shape. 86 // Returns 'true' of BSShape is changed to a new shape.
114 bool newGeom = CreateGeom(forceRebuild, prim, shapeCallback); 87 bool newGeom = CreateGeom(forceRebuild, prim, bodyCallback);
115 // If we had to select a new shape geometry for the object, 88 // If we had to select a new shape geometry for the object,
116 // rebuild the body around it. 89 // rebuild the body around it.
117 // Updates prim.BSBody with information/pointers to requested body 90 // Updates prim.BSBody with information/pointers to requested body
118 // Returns 'true' if BSBody was changed. 91 // Returns 'true' if BSBody was changed.
119 bool newBody = CreateBody((newGeom || forceRebuild), prim, PhysicsScene.World, bodyCallback); 92 bool newBody = CreateBody((newGeom || forceRebuild), prim, m_physicsScene.World, bodyCallback);
120 ret = newGeom || newBody; 93 ret = newGeom || newBody;
121 } 94 }
122 DetailLog("{0},BSShapeCollection.GetBodyAndShape,taintExit,force={1},ret={2},body={3},shape={4}", 95 DetailLog("{0},BSShapeCollection.GetBodyAndShape,taintExit,force={1},ret={2},body={3},shape={4}",
@@ -127,274 +100,20 @@ public sealed class BSShapeCollection : IDisposable
127 100
128 public bool GetBodyAndShape(bool forceRebuild, BulletWorld sim, BSPhysObject prim) 101 public bool GetBodyAndShape(bool forceRebuild, BulletWorld sim, BSPhysObject prim)
129 { 102 {
130 return GetBodyAndShape(forceRebuild, sim, prim, null, null); 103 return GetBodyAndShape(forceRebuild, sim, prim, null);
131 }
132
133 // Track another user of a body.
134 // We presume the caller has allocated the body.
135 // Bodies only have one user so the body is just put into the world if not already there.
136 private void ReferenceBody(BulletBody body)
137 {
138 lock (m_collectionActivityLock)
139 {
140 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceBody,newBody,body={1}", body.ID, body);
141 if (!PhysicsScene.PE.IsInWorld(PhysicsScene.World, body))
142 {
143 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, body);
144 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceBody,addedToWorld,ref={1}", body.ID, body);
145 }
146 }
147 }
148
149 // Release the usage of a body.
150 // Called when releasing use of a BSBody. BSShape is handled separately.
151 // Called in taint time.
152 public void DereferenceBody(BulletBody body, BodyDestructionCallback bodyCallback )
153 {
154 if (!body.HasPhysicalBody)
155 return;
156
157 PhysicsScene.AssertInTaintTime("BSShapeCollection.DereferenceBody");
158
159 lock (m_collectionActivityLock)
160 {
161 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceBody,DestroyingBody,body={1}", body.ID, body);
162 // If the caller needs to know the old body is going away, pass the event up.
163 if (bodyCallback != null) bodyCallback(body);
164
165 if (PhysicsScene.PE.IsInWorld(PhysicsScene.World, body))
166 {
167 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, body);
168 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceBody,removingFromWorld. Body={1}", body.ID, body);
169 }
170
171 // Zero any reference to the shape so it is not freed when the body is deleted.
172 PhysicsScene.PE.SetCollisionShape(PhysicsScene.World, body, null);
173 PhysicsScene.PE.DestroyObject(PhysicsScene.World, body);
174 }
175 }
176
177 // Track the datastructures and use count for a shape.
178 // When creating a hull, this is called first to reference the mesh
179 // and then again to reference the hull.
180 // Meshes and hulls for the same shape have the same hash key.
181 // NOTE that native shapes are not added to the mesh list or removed.
182 // Returns 'true' if this is the initial reference to the shape. Otherwise reused.
183 public bool ReferenceShape(BulletShape shape)
184 {
185 bool ret = false;
186 switch (shape.type)
187 {
188 case BSPhysicsShapeType.SHAPE_MESH:
189 MeshDesc meshDesc;
190 if (Meshes.TryGetValue(shape.shapeKey, out meshDesc))
191 {
192 // There is an existing instance of this mesh.
193 meshDesc.referenceCount++;
194 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceShape,existingMesh,key={1},cnt={2}",
195 BSScene.DetailLogZero, shape.shapeKey.ToString("X"), meshDesc.referenceCount);
196 }
197 else
198 {
199 // This is a new reference to a mesh
200 meshDesc.shape = shape.Clone();
201 meshDesc.shapeKey = shape.shapeKey;
202 // We keep a reference to the underlying IMesh data so a hull can be built
203 meshDesc.referenceCount = 1;
204 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceShape,newMesh,key={1},cnt={2}",
205 BSScene.DetailLogZero, shape.shapeKey.ToString("X"), meshDesc.referenceCount);
206 ret = true;
207 }
208 meshDesc.lastReferenced = System.DateTime.Now;
209 Meshes[shape.shapeKey] = meshDesc;
210 break;
211 case BSPhysicsShapeType.SHAPE_HULL:
212 HullDesc hullDesc;
213 if (Hulls.TryGetValue(shape.shapeKey, out hullDesc))
214 {
215 // There is an existing instance of this hull.
216 hullDesc.referenceCount++;
217 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceShape,existingHull,key={1},cnt={2}",
218 BSScene.DetailLogZero, shape.shapeKey.ToString("X"), hullDesc.referenceCount);
219 }
220 else
221 {
222 // This is a new reference to a hull
223 hullDesc.shape = shape.Clone();
224 hullDesc.shapeKey = shape.shapeKey;
225 hullDesc.referenceCount = 1;
226 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceShape,newHull,key={1},cnt={2}",
227 BSScene.DetailLogZero, shape.shapeKey.ToString("X"), hullDesc.referenceCount);
228 ret = true;
229
230 }
231 hullDesc.lastReferenced = System.DateTime.Now;
232 Hulls[shape.shapeKey] = hullDesc;
233 break;
234 case BSPhysicsShapeType.SHAPE_UNKNOWN:
235 break;
236 default:
237 // Native shapes are not tracked and they don't go into any list
238 break;
239 }
240 return ret;
241 } 104 }
242 105
243 // Release the usage of a shape. 106 // If the existing prim's shape is to be replaced, remove the tie to the existing shape
244 public void DereferenceShape(BulletShape shape, ShapeDestructionCallback shapeCallback) 107 // before replacing it.
108 private void DereferenceExistingShape(BSPhysObject prim, PhysicalDestructionCallback shapeCallback)
245 { 109 {
246 if (!shape.HasPhysicalShape) 110 if (prim.PhysShape.HasPhysicalShape)
247 return;
248
249 PhysicsScene.AssertInTaintTime("BSShapeCollection.DereferenceShape");
250
251 if (shape.HasPhysicalShape)
252 {
253 if (shape.isNativeShape)
254 {
255 // Native shapes are not tracked and are released immediately
256 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceShape,deleteNativeShape,ptr={1}",
257 BSScene.DetailLogZero, shape.AddrString);
258 if (shapeCallback != null) shapeCallback(shape);
259 PhysicsScene.PE.DeleteCollisionShape(PhysicsScene.World, shape);
260 }
261 else
262 {
263 switch (shape.type)
264 {
265 case BSPhysicsShapeType.SHAPE_HULL:
266 DereferenceHull(shape, shapeCallback);
267 break;
268 case BSPhysicsShapeType.SHAPE_MESH:
269 DereferenceMesh(shape, shapeCallback);
270 break;
271 case BSPhysicsShapeType.SHAPE_COMPOUND:
272 DereferenceCompound(shape, shapeCallback);
273 break;
274 case BSPhysicsShapeType.SHAPE_UNKNOWN:
275 break;
276 default:
277 break;
278 }
279 }
280 }
281 }
282
283 // Count down the reference count for a mesh shape
284 // Called at taint-time.
285 private void DereferenceMesh(BulletShape shape, ShapeDestructionCallback shapeCallback)
286 {
287 MeshDesc meshDesc;
288 if (Meshes.TryGetValue(shape.shapeKey, out meshDesc))
289 { 111 {
290 meshDesc.referenceCount--; 112 if (shapeCallback != null)
291 // TODO: release the Bullet storage 113 shapeCallback(prim.PhysBody, prim.PhysShape.physShapeInfo);
292 if (shapeCallback != null) shapeCallback(shape); 114 prim.PhysShape.Dereference(m_physicsScene);
293 meshDesc.lastReferenced = System.DateTime.Now;
294 Meshes[shape.shapeKey] = meshDesc;
295 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceMesh,shape={1},refCnt={2}",
296 BSScene.DetailLogZero, shape, meshDesc.referenceCount);
297
298 }
299 }
300
301 // Count down the reference count for a hull shape
302 // Called at taint-time.
303 private void DereferenceHull(BulletShape shape, ShapeDestructionCallback shapeCallback)
304 {
305 HullDesc hullDesc;
306 if (Hulls.TryGetValue(shape.shapeKey, out hullDesc))
307 {
308 hullDesc.referenceCount--;
309 // TODO: release the Bullet storage (aging old entries?)
310
311 // Tell upper layers that, if they have dependencies on this shape, this link is going away
312 if (shapeCallback != null) shapeCallback(shape);
313
314 hullDesc.lastReferenced = System.DateTime.Now;
315 Hulls[shape.shapeKey] = hullDesc;
316 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceHull,shape={1},refCnt={2}",
317 BSScene.DetailLogZero, shape, hullDesc.referenceCount);
318 }
319 }
320
321 // Remove a reference to a compound shape.
322 // Taking a compound shape apart is a little tricky because if you just delete the
323 // physical shape, it will free all the underlying children. We can't do that because
324 // they could be shared. So, this removes each of the children from the compound and
325 // dereferences them separately before destroying the compound collision object itself.
326 // Called at taint-time.
327 private void DereferenceCompound(BulletShape shape, ShapeDestructionCallback shapeCallback)
328 {
329 if (!PhysicsScene.PE.IsCompound(shape))
330 {
331 // Failed the sanity check!!
332 PhysicsScene.Logger.ErrorFormat("{0} Attempt to free a compound shape that is not compound!! type={1}, ptr={2}",
333 LogHeader, shape.type, shape.AddrString);
334 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceCompound,notACompoundShape,type={1},ptr={2}",
335 BSScene.DetailLogZero, shape.type, shape.AddrString);
336 return;
337 }
338
339 int numChildren = PhysicsScene.PE.GetNumberOfCompoundChildren(shape);
340 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceCompound,shape={1},children={2}", BSScene.DetailLogZero, shape, numChildren);
341
342 for (int ii = numChildren - 1; ii >= 0; ii--)
343 {
344 BulletShape childShape = PhysicsScene.PE.RemoveChildShapeFromCompoundShapeIndex(shape, ii);
345 DereferenceAnonCollisionShape(childShape);
346 }
347 PhysicsScene.PE.DeleteCollisionShape(PhysicsScene.World, shape);
348 }
349
350 // Sometimes we have a pointer to a collision shape but don't know what type it is.
351 // Figure out type and call the correct dereference routine.
352 // Called at taint-time.
353 private void DereferenceAnonCollisionShape(BulletShape shapeInfo)
354 {
355 MeshDesc meshDesc;
356 HullDesc hullDesc;
357
358 if (TryGetMeshByPtr(shapeInfo, out meshDesc))
359 {
360 shapeInfo.type = BSPhysicsShapeType.SHAPE_MESH;
361 shapeInfo.shapeKey = meshDesc.shapeKey;
362 }
363 else
364 {
365 if (TryGetHullByPtr(shapeInfo, out hullDesc))
366 {
367 shapeInfo.type = BSPhysicsShapeType.SHAPE_HULL;
368 shapeInfo.shapeKey = hullDesc.shapeKey;
369 }
370 else
371 {
372 if (PhysicsScene.PE.IsCompound(shapeInfo))
373 {
374 shapeInfo.type = BSPhysicsShapeType.SHAPE_COMPOUND;
375 }
376 else
377 {
378 if (PhysicsScene.PE.IsNativeShape(shapeInfo))
379 {
380 shapeInfo.isNativeShape = true;
381 shapeInfo.type = BSPhysicsShapeType.SHAPE_BOX; // (technically, type doesn't matter)
382 }
383 }
384 }
385 }
386
387 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceAnonCollisionShape,shape={1}", BSScene.DetailLogZero, shapeInfo);
388
389 if (shapeInfo.type != BSPhysicsShapeType.SHAPE_UNKNOWN)
390 {
391 DereferenceShape(shapeInfo, null);
392 }
393 else
394 {
395 PhysicsScene.Logger.ErrorFormat("{0} Could not decypher shape type. Region={1}, addr={2}",
396 LogHeader, PhysicsScene.RegionName, shapeInfo.AddrString);
397 } 115 }
116 prim.PhysShape = new BSShapeNull();
398 } 117 }
399 118
400 // Create the geometry information in Bullet for later use. 119 // Create the geometry information in Bullet for later use.
@@ -405,60 +124,41 @@ public sealed class BSShapeCollection : IDisposable
405 // Info in prim.BSShape is updated to the new shape. 124 // Info in prim.BSShape is updated to the new shape.
406 // Returns 'true' if the geometry was rebuilt. 125 // Returns 'true' if the geometry was rebuilt.
407 // Called at taint-time! 126 // Called at taint-time!
408 private bool CreateGeom(bool forceRebuild, BSPhysObject prim, ShapeDestructionCallback shapeCallback) 127 private bool CreateGeom(bool forceRebuild, BSPhysObject prim, PhysicalDestructionCallback shapeCallback)
409 { 128 {
410 bool ret = false; 129 bool ret = false;
411 bool haveShape = false; 130 bool haveShape = false;
131 bool nativeShapePossible = true;
132 PrimitiveBaseShape pbs = prim.BaseShape;
412 133
413 if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_CAPSULE) 134 // Kludge to create the capsule for the avatar.
135 // TDOD: Remove/redo this when BSShapeAvatar is working!!
136 BSCharacter theChar = prim as BSCharacter;
137 if (theChar != null)
414 { 138 {
415 // an avatar capsule is close to a native shape (it is not shared) 139 DereferenceExistingShape(prim, shapeCallback);
416 GetReferenceToNativeShape(prim, BSPhysicsShapeType.SHAPE_CAPSULE, FixedShapeKey.KEY_CAPSULE, shapeCallback); 140 prim.PhysShape = BSShapeNative.GetReference(m_physicsScene, prim,
417 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,avatarCapsule,shape={1}", prim.LocalID, prim.PhysShape); 141 BSPhysicsShapeType.SHAPE_CAPSULE, FixedShapeKey.KEY_CAPSULE);
418 ret = true; 142 ret = true;
419 haveShape = true; 143 haveShape = true;
420 } 144 }
421 145
422 // Compound shapes are handled special as they are rebuilt from scratch.
423 // This isn't too great a hardship since most of the child shapes will have already been created.
424 if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_COMPOUND)
425 {
426 ret = GetReferenceToCompoundShape(prim, shapeCallback);
427 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,compoundShape,shape={1}", prim.LocalID, prim.PhysShape);
428 haveShape = true;
429 }
430
431 if (!haveShape)
432 {
433 ret = CreateGeomNonSpecial(forceRebuild, prim, shapeCallback);
434 }
435
436 return ret;
437 }
438
439 // Create a mesh, hull or native shape.
440 // Return 'true' if the prim's shape was changed.
441 public bool CreateGeomNonSpecial(bool forceRebuild, BSPhysObject prim, ShapeDestructionCallback shapeCallback)
442 {
443 bool ret = false;
444 bool haveShape = false;
445 bool nativeShapePossible = true;
446 PrimitiveBaseShape pbs = prim.BaseShape;
447
448 // If the prim attributes are simple, this could be a simple Bullet native shape 146 // If the prim attributes are simple, this could be a simple Bullet native shape
147 // Native shapes work whether to object is static or physical.
449 if (!haveShape 148 if (!haveShape
450 && nativeShapePossible 149 && nativeShapePossible
451 && pbs != null 150 && pbs != null
452 && !pbs.SculptEntry 151 && PrimHasNoCuts(pbs)
453 && ((pbs.SculptEntry && !BSParam.ShouldMeshSculptedPrim) || PrimHasNoCuts(pbs)) ) 152 && ( !pbs.SculptEntry || (pbs.SculptEntry && !BSParam.ShouldMeshSculptedPrim) )
153 )
454 { 154 {
455 // Get the scale of any existing shape so we can see if the new shape is same native type and same size. 155 // Get the scale of any existing shape so we can see if the new shape is same native type and same size.
456 OMV.Vector3 scaleOfExistingShape = OMV.Vector3.Zero; 156 OMV.Vector3 scaleOfExistingShape = OMV.Vector3.Zero;
457 if (prim.PhysShape.HasPhysicalShape) 157 if (prim.PhysShape.HasPhysicalShape)
458 scaleOfExistingShape = PhysicsScene.PE.GetLocalScaling(prim.PhysShape); 158 scaleOfExistingShape = m_physicsScene.PE.GetLocalScaling(prim.PhysShape.physShapeInfo);
459 159
460 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,maybeNative,force={1},primScale={2},primSize={3},primShape={4}", 160 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,maybeNative,force={1},primScale={2},primSize={3},primShape={4}",
461 prim.LocalID, forceRebuild, prim.Scale, prim.Size, prim.PhysShape.type); 161 prim.LocalID, forceRebuild, prim.Scale, prim.Size, prim.PhysShape.physShapeInfo.shapeType);
462 162
463 // It doesn't look like Bullet scales native spheres so make sure the scales are all equal 163 // It doesn't look like Bullet scales native spheres so make sure the scales are all equal
464 if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1) 164 if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1)
@@ -466,26 +166,30 @@ public sealed class BSShapeCollection : IDisposable
466 { 166 {
467 haveShape = true; 167 haveShape = true;
468 if (forceRebuild 168 if (forceRebuild
469 || prim.Scale != scaleOfExistingShape 169 || prim.PhysShape.ShapeType != BSPhysicsShapeType.SHAPE_SPHERE
470 || prim.PhysShape.type != BSPhysicsShapeType.SHAPE_SPHERE 170 )
471 )
472 { 171 {
473 ret = GetReferenceToNativeShape(prim, BSPhysicsShapeType.SHAPE_SPHERE, 172 DereferenceExistingShape(prim, shapeCallback);
474 FixedShapeKey.KEY_SPHERE, shapeCallback); 173 prim.PhysShape = BSShapeNative.GetReference(m_physicsScene, prim,
174 BSPhysicsShapeType.SHAPE_SPHERE, FixedShapeKey.KEY_SPHERE);
175 ret = true;
475 } 176 }
476 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,sphere,force={1},rebuilt={2},shape={3}", 177 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,sphere,force={1},rebuilt={2},shape={3}",
477 prim.LocalID, forceRebuild, ret, prim.PhysShape); 178 prim.LocalID, forceRebuild, ret, prim.PhysShape);
478 } 179 }
180 // If we didn't make a sphere, maybe a box will work.
479 if (!haveShape && pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight) 181 if (!haveShape && pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight)
480 { 182 {
481 haveShape = true; 183 haveShape = true;
482 if (forceRebuild 184 if (forceRebuild
483 || prim.Scale != scaleOfExistingShape 185 || prim.Scale != scaleOfExistingShape
484 || prim.PhysShape.type != BSPhysicsShapeType.SHAPE_BOX 186 || prim.PhysShape.ShapeType != BSPhysicsShapeType.SHAPE_BOX
485 ) 187 )
486 { 188 {
487 ret = GetReferenceToNativeShape( prim, BSPhysicsShapeType.SHAPE_BOX, 189 DereferenceExistingShape(prim, shapeCallback);
488 FixedShapeKey.KEY_BOX, shapeCallback); 190 prim.PhysShape = BSShapeNative.GetReference(m_physicsScene, prim,
191 BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX);
192 ret = true;
489 } 193 }
490 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,box,force={1},rebuilt={2},shape={3}", 194 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,box,force={1},rebuilt={2},shape={3}",
491 prim.LocalID, forceRebuild, ret, prim.PhysShape); 195 prim.LocalID, forceRebuild, ret, prim.PhysShape);
@@ -502,7 +206,7 @@ public sealed class BSShapeCollection : IDisposable
502 } 206 }
503 207
504 // return 'true' if this shape description does not include any cutting or twisting. 208 // return 'true' if this shape description does not include any cutting or twisting.
505 private bool PrimHasNoCuts(PrimitiveBaseShape pbs) 209 public static bool PrimHasNoCuts(PrimitiveBaseShape pbs)
506 { 210 {
507 return pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0 211 return pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
508 && pbs.ProfileHollow == 0 212 && pbs.ProfileHollow == 0
@@ -514,7 +218,7 @@ public sealed class BSShapeCollection : IDisposable
514 } 218 }
515 219
516 // return 'true' if the prim's shape was changed. 220 // return 'true' if the prim's shape was changed.
517 public bool CreateGeomMeshOrHull(BSPhysObject prim, ShapeDestructionCallback shapeCallback) 221 private bool CreateGeomMeshOrHull(BSPhysObject prim, PhysicalDestructionCallback shapeCallback)
518 { 222 {
519 223
520 bool ret = false; 224 bool ret = false;
@@ -522,503 +226,121 @@ public sealed class BSShapeCollection : IDisposable
522 // made. Native shapes work in either case. 226 // made. Native shapes work in either case.
523 if (prim.IsPhysical && BSParam.ShouldUseHullsForPhysicalObjects) 227 if (prim.IsPhysical && BSParam.ShouldUseHullsForPhysicalObjects)
524 { 228 {
525 // Update prim.BSShape to reference a hull of this shape. 229 // Use a simple, single mesh convex hull shape if the object is simple enough
526 ret = GetReferenceToHull(prim, shapeCallback); 230 BSShape potentialHull = null;
527 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,hull,shape={1},key={2}",
528 prim.LocalID, prim.PhysShape, prim.PhysShape.shapeKey.ToString("X"));
529 }
530 else
531 {
532 ret = GetReferenceToMesh(prim, shapeCallback);
533 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,mesh,shape={1},key={2}",
534 prim.LocalID, prim.PhysShape, prim.PhysShape.shapeKey.ToString("X"));
535 }
536 return ret;
537 }
538
539 // Creates a native shape and assignes it to prim.BSShape.
540 // "Native" shapes are never shared. they are created here and destroyed in DereferenceShape().
541 private bool GetReferenceToNativeShape(BSPhysObject prim,
542 BSPhysicsShapeType shapeType, FixedShapeKey shapeKey,
543 ShapeDestructionCallback shapeCallback)
544 {
545 // release any previous shape
546 DereferenceShape(prim.PhysShape, shapeCallback);
547
548 BulletShape newShape = BuildPhysicalNativeShape(prim, shapeType, shapeKey);
549
550 // Don't need to do a 'ReferenceShape()' here because native shapes are not shared.
551 if (DDetail) DetailLog("{0},BSShapeCollection.AddNativeShapeToPrim,create,newshape={1},scale={2}",
552 prim.LocalID, newShape, prim.Scale);
553
554 // native shapes are scaled by Bullet
555 prim.PhysShape = newShape;
556 return true;
557 }
558
559 private BulletShape BuildPhysicalNativeShape(BSPhysObject prim, BSPhysicsShapeType shapeType,
560 FixedShapeKey shapeKey)
561 {
562 BulletShape newShape;
563 // Need to make sure the passed shape information is for the native type.
564 ShapeData nativeShapeData = new ShapeData();
565 nativeShapeData.Type = shapeType;
566 nativeShapeData.ID = prim.LocalID;
567 nativeShapeData.Scale = prim.Scale;
568 nativeShapeData.Size = prim.Scale; // unneeded, I think.
569 nativeShapeData.MeshKey = (ulong)shapeKey;
570 nativeShapeData.HullKey = (ulong)shapeKey;
571
572 if (shapeType == BSPhysicsShapeType.SHAPE_CAPSULE)
573 {
574 231
575 newShape = PhysicsScene.PE.BuildCapsuleShape(PhysicsScene.World, 1f, 1f, prim.Scale); 232 PrimitiveBaseShape pbs = prim.BaseShape;
576 if (DDetail) DetailLog("{0},BSShapeCollection.BuildPhysicalNativeShape,capsule,scale={1}", prim.LocalID, prim.Scale); 233 // Use a simple, one section convex shape for prims that are probably convex (no cuts or twists)
577 } 234 if (BSParam.ShouldUseSingleConvexHullForPrims
578 else 235 && pbs != null
579 { 236 && !pbs.SculptEntry
580 // Native shapes are scaled in Bullet so set the scaling to the size 237 && PrimHasNoCuts(pbs)
581 newShape = PhysicsScene.PE.BuildNativeShape(PhysicsScene.World, nativeShapeData); 238 )
582 239 {
583 } 240 potentialHull = BSShapeConvexHull.GetReference(m_physicsScene, false /* forceRebuild */, prim);
584 if (!newShape.HasPhysicalShape) 241 }
585 { 242 // Use the GImpact shape if it is a prim that has some concaveness
586 PhysicsScene.Logger.ErrorFormat("{0} BuildPhysicalNativeShape failed. ID={1}, shape={2}", 243 if (potentialHull == null
587 LogHeader, prim.LocalID, shapeType); 244 && BSParam.ShouldUseGImpactShapeForPrims
588 } 245 && pbs != null
589 newShape.shapeKey = (System.UInt64)shapeKey; 246 && !pbs.SculptEntry
590 newShape.isNativeShape = true; 247 )
591 248 {
592 return newShape; 249 potentialHull = BSShapeGImpact.GetReference(m_physicsScene, false /* forceRebuild */, prim);
593 } 250 }
594 251 // If not any of the simple cases, just make a hull
595 // Builds a mesh shape in the physical world and updates prim.BSShape. 252 if (potentialHull == null)
596 // Dereferences previous shape in BSShape and adds a reference for this new shape. 253 {
597 // Returns 'true' of a mesh was actually built. Otherwise . 254 potentialHull = BSShapeHull.GetReference(m_physicsScene, false /*forceRebuild*/, prim);
598 // Called at taint-time! 255 }
599 private bool GetReferenceToMesh(BSPhysObject prim, ShapeDestructionCallback shapeCallback)
600 {
601 BulletShape newShape = new BulletShape();
602
603 float lod;
604 System.UInt64 newMeshKey = ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
605
606 // if this new shape is the same as last time, don't recreate the mesh
607 if (newMeshKey == prim.PhysShape.shapeKey && prim.PhysShape.type == BSPhysicsShapeType.SHAPE_MESH)
608 return false;
609
610 if (DDetail) DetailLog("{0},BSShapeCollection.GetReferenceToMesh,create,oldKey={1},newKey={2},size={3},lod={4}",
611 prim.LocalID, prim.PhysShape.shapeKey.ToString("X"), newMeshKey.ToString("X"), prim.Size, lod);
612
613 // Since we're recreating new, get rid of the reference to the previous shape
614 DereferenceShape(prim.PhysShape, shapeCallback);
615
616 newShape = CreatePhysicalMesh(prim, newMeshKey, prim.BaseShape, prim.Size, lod);
617 // Take evasive action if the mesh was not constructed.
618 newShape = VerifyMeshCreated(newShape, prim);
619
620 ReferenceShape(newShape);
621
622 prim.PhysShape = newShape;
623
624 return true; // 'true' means a new shape has been added to this prim
625 }
626
627 private BulletShape CreatePhysicalMesh(BSPhysObject prim, System.UInt64 newMeshKey, PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
628 {
629 BulletShape newShape = new BulletShape();
630 256
631 MeshDesc meshDesc; 257 // If the current shape is not what is on the prim at the moment, time to change.
632 if (Meshes.TryGetValue(newMeshKey, out meshDesc)) 258 if (!prim.PhysShape.HasPhysicalShape
633 { 259 || potentialHull.ShapeType != prim.PhysShape.ShapeType
634 // If the mesh has already been built just use it. 260 || potentialHull.physShapeInfo.shapeKey != prim.PhysShape.physShapeInfo.shapeKey)
635 newShape = meshDesc.shape.Clone(); 261 {
262 DereferenceExistingShape(prim, shapeCallback);
263 prim.PhysShape = potentialHull;
264 ret = true;
265 }
266 else
267 {
268 // The current shape on the prim is the correct one. We don't need the potential reference.
269 potentialHull.Dereference(m_physicsScene);
270 }
271 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,hull,shape={1}", prim.LocalID, prim.PhysShape);
636 } 272 }
637 else 273 else
638 { 274 {
639 IMesh meshData = PhysicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod, 275 // Non-physical objects should be just meshes.
640 true, 276 BSShape potentialMesh = BSShapeMesh.GetReference(m_physicsScene, false /*forceRebuild*/, prim);
641 false, // say it is not physical so a bounding box is not built 277 // If the current shape is not what is on the prim at the moment, time to change.
642 false, // do not cache the mesh and do not use previously built versions 278 if (!prim.PhysShape.HasPhysicalShape
643 false // It's NOT for ODE 279 || potentialMesh.ShapeType != prim.PhysShape.ShapeType
644 ); 280 || potentialMesh.physShapeInfo.shapeKey != prim.PhysShape.physShapeInfo.shapeKey)
645
646 if (meshData != null)
647 { 281 {
648 282 DereferenceExistingShape(prim, shapeCallback);
649 int[] indices = meshData.getIndexListAsInt(); 283 prim.PhysShape = potentialMesh;
650 int realIndicesIndex = indices.Length; 284 ret = true;
651 float[] verticesAsFloats = meshData.getVertexListAsFloat();
652
653 if (BSParam.ShouldRemoveZeroWidthTriangles)
654 {
655 // Remove degenerate triangles. These are triangles with two of the vertices
656 // are the same. This is complicated by the problem that vertices are not
657 // made unique in sculpties so we have to compare the values in the vertex.
658 realIndicesIndex = 0;
659 for (int tri = 0; tri < indices.Length; tri += 3)
660 {
661 // Compute displacements into vertex array for each vertex of the triangle
662 int v1 = indices[tri + 0] * 3;
663 int v2 = indices[tri + 1] * 3;
664 int v3 = indices[tri + 2] * 3;
665 // Check to see if any two of the vertices are the same
666 if (!( ( verticesAsFloats[v1 + 0] == verticesAsFloats[v2 + 0]
667 && verticesAsFloats[v1 + 1] == verticesAsFloats[v2 + 1]
668 && verticesAsFloats[v1 + 2] == verticesAsFloats[v2 + 2])
669 || ( verticesAsFloats[v2 + 0] == verticesAsFloats[v3 + 0]
670 && verticesAsFloats[v2 + 1] == verticesAsFloats[v3 + 1]
671 && verticesAsFloats[v2 + 2] == verticesAsFloats[v3 + 2])
672 || ( verticesAsFloats[v1 + 0] == verticesAsFloats[v3 + 0]
673 && verticesAsFloats[v1 + 1] == verticesAsFloats[v3 + 1]
674 && verticesAsFloats[v1 + 2] == verticesAsFloats[v3 + 2]) )
675 )
676 {
677 // None of the vertices of the triangles are the same. This is a good triangle;
678 indices[realIndicesIndex + 0] = indices[tri + 0];
679 indices[realIndicesIndex + 1] = indices[tri + 1];
680 indices[realIndicesIndex + 2] = indices[tri + 2];
681 realIndicesIndex += 3;
682 }
683 }
684 }
685 DetailLog("{0},BSShapeCollection.CreatePhysicalMesh,origTri={1},realTri={2},numVerts={3}",
686 BSScene.DetailLogZero, indices.Length / 3, realIndicesIndex / 3, verticesAsFloats.Length / 3);
687
688 if (realIndicesIndex != 0)
689 {
690 newShape = PhysicsScene.PE.CreateMeshShape(PhysicsScene.World,
691 realIndicesIndex, indices, verticesAsFloats.Length / 3, verticesAsFloats);
692 }
693 else
694 {
695 PhysicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}",
696 LogHeader, prim.PhysObjectName, prim.RawPosition, PhysicsScene.Name);
697 }
698 } 285 }
286 else
287 {
288 // We don't need this reference to the mesh that is already being using.
289 potentialMesh.Dereference(m_physicsScene);
290 }
291 if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,mesh,shape={1}", prim.LocalID, prim.PhysShape);
699 } 292 }
700 newShape.shapeKey = newMeshKey; 293 return ret;
701
702 return newShape;
703 }
704
705 // See that hull shape exists in the physical world and update prim.BSShape.
706 // We could be creating the hull because scale changed or whatever.
707 // Return 'true' if a new hull was built. Otherwise, returning a shared hull instance.
708 private bool GetReferenceToHull(BSPhysObject prim, ShapeDestructionCallback shapeCallback)
709 {
710 BulletShape newShape;
711
712 float lod;
713 System.UInt64 newHullKey = ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
714
715 // if the hull hasn't changed, don't rebuild it
716 if (newHullKey == prim.PhysShape.shapeKey && prim.PhysShape.type == BSPhysicsShapeType.SHAPE_HULL)
717 return false;
718
719 if (DDetail) DetailLog("{0},BSShapeCollection.GetReferenceToHull,create,oldKey={1},newKey={2}",
720 prim.LocalID, prim.PhysShape.shapeKey.ToString("X"), newHullKey.ToString("X"));
721
722 // Remove usage of the previous shape.
723 DereferenceShape(prim.PhysShape, shapeCallback);
724
725 newShape = CreatePhysicalHull(prim.PhysObjectName, newHullKey, prim.BaseShape, prim.Size, lod);
726 // It might not have been created if we're waiting for an asset.
727 newShape = VerifyMeshCreated(newShape, prim);
728
729 ReferenceShape(newShape);
730
731 prim.PhysShape = newShape;
732 return true; // 'true' means a new shape has been added to this prim
733 } 294 }
734 295
735 List<ConvexResult> m_hulls; 296 // Track another user of a body.
736 private BulletShape CreatePhysicalHull(string objName, System.UInt64 newHullKey, PrimitiveBaseShape pbs, OMV.Vector3 size, float lod) 297 // We presume the caller has allocated the body.
298 // Bodies only have one user so the body is just put into the world if not already there.
299 private void ReferenceBody(BulletBody body)
737 { 300 {
738 301 lock (m_collectionActivityLock)
739 BulletShape newShape = new BulletShape();
740 IntPtr hullPtr = IntPtr.Zero;
741
742 HullDesc hullDesc;
743 if (Hulls.TryGetValue(newHullKey, out hullDesc))
744 {
745 // If the hull shape already has been created, just use the one shared instance.
746 newShape = hullDesc.shape.Clone();
747 }
748 else
749 { 302 {
750 // Build a new hull in the physical world. 303 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceBody,newBody,body={1}", body.ID, body);
751 // Pass true for physicalness as this prevents the creation of bounding box which is not needed 304 if (!m_physicsScene.PE.IsInWorld(m_physicsScene.World, body))
752 IMesh meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, true, false, false, false);
753 if (meshData != null)
754 { 305 {
755 306 m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, body);
756 int[] indices = meshData.getIndexListAsInt(); 307 if (DDetail) DetailLog("{0},BSShapeCollection.ReferenceBody,addedToWorld,ref={1}", body.ID, body);
757 List<OMV.Vector3> vertices = meshData.getVertexList();
758
759 //format conversion from IMesh format to DecompDesc format
760 List<int> convIndices = new List<int>();
761 List<float3> convVertices = new List<float3>();
762 for (int ii = 0; ii < indices.GetLength(0); ii++)
763 {
764 convIndices.Add(indices[ii]);
765 }
766 foreach (OMV.Vector3 vv in vertices)
767 {
768 convVertices.Add(new float3(vv.X, vv.Y, vv.Z));
769 }
770
771 uint maxDepthSplit = (uint)BSParam.CSHullMaxDepthSplit;
772 if (BSParam.CSHullMaxDepthSplit != BSParam.CSHullMaxDepthSplitForSimpleShapes)
773 {
774 // Simple primitive shapes we know are convex so they are better implemented with
775 // fewer hulls.
776 // Check for simple shape (prim without cuts) and reduce split parameter if so.
777 if (PrimHasNoCuts(pbs))
778 {
779 maxDepthSplit = (uint)BSParam.CSHullMaxDepthSplitForSimpleShapes;
780 }
781 }
782
783 // setup and do convex hull conversion
784 m_hulls = new List<ConvexResult>();
785 DecompDesc dcomp = new DecompDesc();
786 dcomp.mIndices = convIndices;
787 dcomp.mVertices = convVertices;
788 dcomp.mDepth = maxDepthSplit;
789 dcomp.mCpercent = BSParam.CSHullConcavityThresholdPercent;
790 dcomp.mPpercent = BSParam.CSHullVolumeConservationThresholdPercent;
791 dcomp.mMaxVertices = (uint)BSParam.CSHullMaxVertices;
792 dcomp.mSkinWidth = BSParam.CSHullMaxSkinWidth;
793 ConvexBuilder convexBuilder = new ConvexBuilder(HullReturn);
794 // create the hull into the _hulls variable
795 convexBuilder.process(dcomp);
796
797 DetailLog("{0},BSShapeCollection.CreatePhysicalHull,key={1},inVert={2},inInd={3},split={4},hulls={5}",
798 BSScene.DetailLogZero, newHullKey, indices.GetLength(0), vertices.Count, maxDepthSplit, m_hulls.Count);
799
800 // Convert the vertices and indices for passing to unmanaged.
801 // The hull information is passed as a large floating point array.
802 // The format is:
803 // convHulls[0] = number of hulls
804 // convHulls[1] = number of vertices in first hull
805 // convHulls[2] = hull centroid X coordinate
806 // convHulls[3] = hull centroid Y coordinate
807 // convHulls[4] = hull centroid Z coordinate
808 // convHulls[5] = first hull vertex X
809 // convHulls[6] = first hull vertex Y
810 // convHulls[7] = first hull vertex Z
811 // convHulls[8] = second hull vertex X
812 // ...
813 // convHulls[n] = number of vertices in second hull
814 // convHulls[n+1] = second hull centroid X coordinate
815 // ...
816 //
817 // TODO: is is very inefficient. Someday change the convex hull generator to return
818 // data structures that do not need to be converted in order to pass to Bullet.
819 // And maybe put the values directly into pinned memory rather than marshaling.
820 int hullCount = m_hulls.Count;
821 int totalVertices = 1; // include one for the count of the hulls
822 foreach (ConvexResult cr in m_hulls)
823 {
824 totalVertices += 4; // add four for the vertex count and centroid
825 totalVertices += cr.HullIndices.Count * 3; // we pass just triangles
826 }
827 float[] convHulls = new float[totalVertices];
828
829 convHulls[0] = (float)hullCount;
830 int jj = 1;
831 foreach (ConvexResult cr in m_hulls)
832 {
833 // copy vertices for index access
834 float3[] verts = new float3[cr.HullVertices.Count];
835 int kk = 0;
836 foreach (float3 ff in cr.HullVertices)
837 {
838 verts[kk++] = ff;
839 }
840
841 // add to the array one hull's worth of data
842 convHulls[jj++] = cr.HullIndices.Count;
843 convHulls[jj++] = 0f; // centroid x,y,z
844 convHulls[jj++] = 0f;
845 convHulls[jj++] = 0f;
846 foreach (int ind in cr.HullIndices)
847 {
848 convHulls[jj++] = verts[ind].x;
849 convHulls[jj++] = verts[ind].y;
850 convHulls[jj++] = verts[ind].z;
851 }
852 }
853 // create the hull data structure in Bullet
854 newShape = PhysicsScene.PE.CreateHullShape(PhysicsScene.World, hullCount, convHulls);
855 } 308 }
856 } 309 }
857
858 newShape.shapeKey = newHullKey;
859
860 return newShape;
861 }
862
863 // Callback from convex hull creater with a newly created hull.
864 // Just add it to our collection of hulls for this shape.
865 private void HullReturn(ConvexResult result)
866 {
867 m_hulls.Add(result);
868 return;
869 } 310 }
870 311
871 // Compound shapes are always built from scratch. 312 // Release the usage of a body.
872 // This shouldn't be to bad since most of the parts will be meshes that had been built previously. 313 // Called when releasing use of a BSBody. BSShape is handled separately.
873 private bool GetReferenceToCompoundShape(BSPhysObject prim, ShapeDestructionCallback shapeCallback) 314 // Called in taint time.
874 { 315 public void DereferenceBody(BulletBody body, PhysicalDestructionCallback bodyCallback )
875 // Remove reference to the old shape
876 // Don't need to do this as the shape is freed when the new root shape is created below.
877 // DereferenceShape(prim.PhysShape, true, shapeCallback);
878
879 BulletShape cShape = PhysicsScene.PE.CreateCompoundShape(PhysicsScene.World, false);
880
881 // Create the shape for the root prim and add it to the compound shape. Cannot be a native shape.
882 CreateGeomMeshOrHull(prim, shapeCallback);
883 PhysicsScene.PE.AddChildShapeToCompoundShape(cShape, prim.PhysShape, OMV.Vector3.Zero, OMV.Quaternion.Identity);
884 if (DDetail) DetailLog("{0},BSShapeCollection.GetReferenceToCompoundShape,addRootPrim,compShape={1},rootShape={2}",
885 prim.LocalID, cShape, prim.PhysShape);
886
887 prim.PhysShape = cShape;
888
889 return true;
890 }
891
892 // Create a hash of all the shape parameters to be used as a key
893 // for this particular shape.
894 private System.UInt64 ComputeShapeKey(OMV.Vector3 size, PrimitiveBaseShape pbs, out float retLod)
895 {
896 // level of detail based on size and type of the object
897 float lod = BSParam.MeshLOD;
898
899 // prims with curvy internal cuts need higher lod
900 if (pbs.HollowShape == HollowShape.Circle)
901 lod = BSParam.MeshCircularLOD;
902
903 if (pbs.SculptEntry)
904 lod = BSParam.SculptLOD;
905
906 // Mega prims usually get more detail because one can interact with shape approximations at this size.
907 float maxAxis = Math.Max(size.X, Math.Max(size.Y, size.Z));
908 if (maxAxis > BSParam.MeshMegaPrimThreshold)
909 lod = BSParam.MeshMegaPrimLOD;
910
911 retLod = lod;
912 return pbs.GetMeshKey(size, lod);
913 }
914 // For those who don't want the LOD
915 private System.UInt64 ComputeShapeKey(OMV.Vector3 size, PrimitiveBaseShape pbs)
916 { 316 {
917 float lod; 317 if (!body.HasPhysicalBody)
918 return ComputeShapeKey(size, pbs, out lod); 318 return;
919 }
920 319
921 // The creation of a mesh or hull can fail if an underlying asset is not available. 320 m_physicsScene.AssertInTaintTime("BSShapeCollection.DereferenceBody");
922 // There are two cases: 1) the asset is not in the cache and it needs to be fetched;
923 // and 2) the asset cannot be converted (like failed decompression of JPEG2000s).
924 // The first case causes the asset to be fetched. The second case requires
925 // us to not loop forever.
926 // Called after creating a physical mesh or hull. If the physical shape was created,
927 // just return.
928 private BulletShape VerifyMeshCreated(BulletShape newShape, BSPhysObject prim)
929 {
930 // If the shape was successfully created, nothing more to do
931 if (newShape.HasPhysicalShape)
932 return newShape;
933 321
934 // VerifyMeshCreated is called after trying to create the mesh. If we think the asset had been 322 lock (m_collectionActivityLock)
935 // fetched but we end up here again, the meshing of the asset must have failed.
936 // Prevent trying to keep fetching the mesh by declaring failure.
937 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Fetched)
938 {
939 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
940 PhysicsScene.Logger.WarnFormat("{0} Fetched asset would not mesh. {1}, texture={2}",
941 LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
942 }
943 else
944 { 323 {
945 // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset 324 if (DDetail) DetailLog("{0},BSShapeCollection.DereferenceBody,DestroyingBody,body={1}", body.ID, body);
946 if (prim.BaseShape.SculptEntry 325 // If the caller needs to know the old body is going away, pass the event up.
947 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed 326 if (bodyCallback != null)
948 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Waiting 327 bodyCallback(body, null);
949 && prim.BaseShape.SculptTexture != OMV.UUID.Zero
950 )
951 {
952 DetailLog("{0},BSShapeCollection.VerifyMeshCreated,fetchAsset", prim.LocalID);
953 // Multiple requestors will know we're waiting for this asset
954 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Waiting;
955
956 BSPhysObject xprim = prim;
957 Util.FireAndForget(delegate
958 {
959 RequestAssetDelegate assetProvider = PhysicsScene.RequestAssetMethod;
960 if (assetProvider != null)
961 {
962 BSPhysObject yprim = xprim; // probably not necessary, but, just in case.
963 assetProvider(yprim.BaseShape.SculptTexture, delegate(AssetBase asset)
964 {
965 bool assetFound = false;
966 string mismatchIDs = String.Empty; // DEBUG DEBUG
967 if (asset != null && yprim.BaseShape.SculptEntry)
968 {
969 if (yprim.BaseShape.SculptTexture.ToString() == asset.ID)
970 {
971 yprim.BaseShape.SculptData = asset.Data;
972 // This will cause the prim to see that the filler shape is not the right
973 // one and try again to build the object.
974 // No race condition with the normal shape setting since the rebuild is at taint time.
975 yprim.ForceBodyShapeRebuild(false /* inTaintTime */);
976 assetFound = true;
977 }
978 else
979 {
980 mismatchIDs = yprim.BaseShape.SculptTexture.ToString() + "/" + asset.ID;
981 }
982 }
983 if (assetFound)
984 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Fetched;
985 else
986 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
987 DetailLog("{0},BSShapeCollection,fetchAssetCallback,found={1},isSculpt={2},ids={3}",
988 yprim.LocalID, assetFound, yprim.BaseShape.SculptEntry, mismatchIDs );
989 328
990 }); 329 // Removing an object not in the world is a NOOP
991 } 330 m_physicsScene.PE.RemoveObjectFromWorld(m_physicsScene.World, body);
992 else
993 {
994 xprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
995 PhysicsScene.Logger.ErrorFormat("{0} Physical object requires asset but no asset provider. Name={1}",
996 LogHeader, PhysicsScene.Name);
997 }
998 });
999 }
1000 else
1001 {
1002 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
1003 {
1004 PhysicsScene.Logger.WarnFormat("{0} Mesh failed to fetch asset. obj={1}, texture={2}",
1005 LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
1006 }
1007 }
1008 }
1009 331
1010 // While we wait for the mesh defining asset to be loaded, stick in a simple box for the object. 332 // Zero any reference to the shape so it is not freed when the body is deleted.
1011 BulletShape fillinShape = BuildPhysicalNativeShape(prim, BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX); 333 m_physicsScene.PE.SetCollisionShape(m_physicsScene.World, body, null);
1012 DetailLog("{0},BSShapeCollection.VerifyMeshCreated,boxTempShape", prim.LocalID);
1013 334
1014 return fillinShape; 335 m_physicsScene.PE.DestroyObject(m_physicsScene.World, body);
336 }
1015 } 337 }
1016 338
1017 // Create a body object in Bullet. 339 // Create a body object in Bullet.
1018 // Updates prim.BSBody with the information about the new body if one is created. 340 // Updates prim.BSBody with the information about the new body if one is created.
1019 // Returns 'true' if an object was actually created. 341 // Returns 'true' if an object was actually created.
1020 // Called at taint-time. 342 // Called at taint-time.
1021 private bool CreateBody(bool forceRebuild, BSPhysObject prim, BulletWorld sim, BodyDestructionCallback bodyCallback) 343 private bool CreateBody(bool forceRebuild, BSPhysObject prim, BulletWorld sim, PhysicalDestructionCallback bodyCallback)
1022 { 344 {
1023 bool ret = false; 345 bool ret = false;
1024 346
@@ -1029,7 +351,7 @@ public sealed class BSShapeCollection : IDisposable
1029 // If not a solid object, body is a GhostObject. Otherwise a RigidBody. 351 // If not a solid object, body is a GhostObject. Otherwise a RigidBody.
1030 if (!mustRebuild) 352 if (!mustRebuild)
1031 { 353 {
1032 CollisionObjectTypes bodyType = (CollisionObjectTypes)PhysicsScene.PE.GetBodyType(prim.PhysBody); 354 CollisionObjectTypes bodyType = (CollisionObjectTypes)m_physicsScene.PE.GetBodyType(prim.PhysBody);
1033 if (prim.IsSolid && bodyType != CollisionObjectTypes.CO_RIGID_BODY 355 if (prim.IsSolid && bodyType != CollisionObjectTypes.CO_RIGID_BODY
1034 || !prim.IsSolid && bodyType != CollisionObjectTypes.CO_GHOST_OBJECT) 356 || !prim.IsSolid && bodyType != CollisionObjectTypes.CO_GHOST_OBJECT)
1035 { 357 {
@@ -1047,12 +369,12 @@ public sealed class BSShapeCollection : IDisposable
1047 BulletBody aBody; 369 BulletBody aBody;
1048 if (prim.IsSolid) 370 if (prim.IsSolid)
1049 { 371 {
1050 aBody = PhysicsScene.PE.CreateBodyFromShape(sim, prim.PhysShape, prim.LocalID, prim.RawPosition, prim.RawOrientation); 372 aBody = m_physicsScene.PE.CreateBodyFromShape(sim, prim.PhysShape.physShapeInfo, prim.LocalID, prim.RawPosition, prim.RawOrientation);
1051 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,mesh,body={1}", prim.LocalID, aBody); 373 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,rigid,body={1}", prim.LocalID, aBody);
1052 } 374 }
1053 else 375 else
1054 { 376 {
1055 aBody = PhysicsScene.PE.CreateGhostFromShape(sim, prim.PhysShape, prim.LocalID, prim.RawPosition, prim.RawOrientation); 377 aBody = m_physicsScene.PE.CreateGhostFromShape(sim, prim.PhysShape.physShapeInfo, prim.LocalID, prim.RawPosition, prim.RawOrientation);
1056 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,ghost,body={1}", prim.LocalID, aBody); 378 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,ghost,body={1}", prim.LocalID, aBody);
1057 } 379 }
1058 380
@@ -1066,46 +388,10 @@ public sealed class BSShapeCollection : IDisposable
1066 return ret; 388 return ret;
1067 } 389 }
1068 390
1069 private bool TryGetMeshByPtr(BulletShape shape, out MeshDesc outDesc)
1070 {
1071 bool ret = false;
1072 MeshDesc foundDesc = new MeshDesc();
1073 foreach (MeshDesc md in Meshes.Values)
1074 {
1075 if (md.shape.ReferenceSame(shape))
1076 {
1077 foundDesc = md;
1078 ret = true;
1079 break;
1080 }
1081
1082 }
1083 outDesc = foundDesc;
1084 return ret;
1085 }
1086
1087 private bool TryGetHullByPtr(BulletShape shape, out HullDesc outDesc)
1088 {
1089 bool ret = false;
1090 HullDesc foundDesc = new HullDesc();
1091 foreach (HullDesc hd in Hulls.Values)
1092 {
1093 if (hd.shape.ReferenceSame(shape))
1094 {
1095 foundDesc = hd;
1096 ret = true;
1097 break;
1098 }
1099
1100 }
1101 outDesc = foundDesc;
1102 return ret;
1103 }
1104
1105 private void DetailLog(string msg, params Object[] args) 391 private void DetailLog(string msg, params Object[] args)
1106 { 392 {
1107 if (PhysicsScene.PhysicsLogging.Enabled) 393 if (m_physicsScene.PhysicsLogging.Enabled)
1108 PhysicsScene.DetailLog(msg, args); 394 m_physicsScene.DetailLog(msg, args);
1109 } 395 }
1110} 396}
1111} 397}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs
index ee18379..326fc9e 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs
@@ -29,115 +29,291 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Text; 30using System.Text;
31 31
32using OpenSim.Framework;
33using OpenSim.Region.Physics.Manager;
34using OpenSim.Region.Physics.Meshing;
35using OpenSim.Region.Physics.ConvexDecompositionDotNet;
36
32using OMV = OpenMetaverse; 37using OMV = OpenMetaverse;
33 38
34namespace OpenSim.Region.Physics.BulletSPlugin 39namespace OpenSim.Region.Physics.BulletSPlugin
35{ 40{
36public abstract class BSShape 41public abstract class BSShape
37{ 42{
43 private static string LogHeader = "[BULLETSIM SHAPE]";
44
38 public int referenceCount { get; set; } 45 public int referenceCount { get; set; }
39 public DateTime lastReferenced { get; set; } 46 public DateTime lastReferenced { get; set; }
47 public BulletShape physShapeInfo { get; set; }
40 48
41 public BSShape() 49 public BSShape()
42 { 50 {
43 referenceCount = 0; 51 referenceCount = 1;
44 lastReferenced = DateTime.Now; 52 lastReferenced = DateTime.Now;
53 physShapeInfo = new BulletShape();
45 } 54 }
46 55 public BSShape(BulletShape pShape)
47 // Get a reference to a physical shape. Create if it doesn't exist
48 public static BSShape GetShapeReference(BSScene physicsScene, bool forceRebuild, BSPhysObject prim)
49 { 56 {
50 BSShape ret = null; 57 referenceCount = 1;
51 58 lastReferenced = DateTime.Now;
52 if (prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_CAPSULE) 59 physShapeInfo = pShape;
53 { 60 }
54 // an avatar capsule is close to a native shape (it is not shared)
55 ret = BSShapeNative.GetReference(physicsScene, prim, BSPhysicsShapeType.SHAPE_CAPSULE,
56 FixedShapeKey.KEY_CAPSULE);
57 physicsScene.DetailLog("{0},BSShape.GetShapeReference,avatarCapsule,shape={1}", prim.LocalID, ret);
58 }
59
60 // Compound shapes are handled special as they are rebuilt from scratch.
61 // This isn't too great a hardship since most of the child shapes will have already been created.
62 if (ret == null && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_COMPOUND)
63 {
64 // Getting a reference to a compound shape gets you the compound shape with the root prim shape added
65 ret = BSShapeCompound.GetReference(prim);
66 physicsScene.DetailLog("{0},BSShapeCollection.CreateGeom,compoundShape,shape={1}", prim.LocalID, ret);
67 }
68
69 // Avatars have their own unique shape
70 if (ret == null && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_AVATAR)
71 {
72 // Getting a reference to a compound shape gets you the compound shape with the root prim shape added
73 ret = BSShapeAvatar.GetReference(prim);
74 physicsScene.DetailLog("{0},BSShapeCollection.CreateGeom,avatarShape,shape={1}", prim.LocalID, ret);
75 }
76 61
77 if (ret == null) 62 // Get another reference to this shape.
78 ret = GetShapeReferenceNonSpecial(physicsScene, forceRebuild, prim); 63 public abstract BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim);
79 64
80 return ret; 65 // Called when this shape is being used again.
81 } 66 // Used internally. External callers should call instance.GetReference() to properly copy/reference
82 public static BSShape GetShapeReferenceNonSpecial(BSScene physicsScene, bool forceRebuild, BSPhysObject prim) 67 // the shape.
68 protected virtual void IncrementReference()
83 { 69 {
84 return null; 70 referenceCount++;
71 lastReferenced = DateTime.Now;
85 } 72 }
86 public static BSShape GetShapeReferenceNonNative(BSScene physicsScene, bool forceRebuild, BSPhysObject prim) 73
74 // Called when this shape is being used again.
75 protected virtual void DecrementReference()
87 { 76 {
88 return null; 77 referenceCount--;
78 lastReferenced = DateTime.Now;
89 } 79 }
90 80
91 // Release the use of a physical shape. 81 // Release the use of a physical shape.
92 public abstract void Dereference(BSScene physicsScene); 82 public abstract void Dereference(BSScene physicsScene);
93 83
94 // All shapes have a static call to get a reference to the physical shape 84 // Return 'true' if there is an allocated physics physical shape under this class instance.
95 // protected abstract static BSShape GetReference(); 85 public virtual bool HasPhysicalShape
86 {
87 get
88 {
89 if (physShapeInfo != null)
90 return physShapeInfo.HasPhysicalShape;
91 return false;
92 }
93 }
94 public virtual BSPhysicsShapeType ShapeType
95 {
96 get
97 {
98 BSPhysicsShapeType ret = BSPhysicsShapeType.SHAPE_UNKNOWN;
99 if (physShapeInfo != null && physShapeInfo.HasPhysicalShape)
100 ret = physShapeInfo.shapeType;
101 return ret;
102 }
103 }
96 104
97 // Returns a string for debugging that uniquily identifies the memory used by this instance 105 // Returns a string for debugging that uniquily identifies the memory used by this instance
98 public virtual string AddrString 106 public virtual string AddrString
99 { 107 {
100 get { return "unknown"; } 108 get
109 {
110 if (physShapeInfo != null)
111 return physShapeInfo.AddrString;
112 return "unknown";
113 }
101 } 114 }
102 115
103 public override string ToString() 116 public override string ToString()
104 { 117 {
105 StringBuilder buff = new StringBuilder(); 118 StringBuilder buff = new StringBuilder();
106 buff.Append("<p="); 119 if (physShapeInfo == null)
107 buff.Append(AddrString); 120 {
121 buff.Append("<noPhys");
122 }
123 else
124 {
125 buff.Append("<phy=");
126 buff.Append(physShapeInfo.ToString());
127 }
108 buff.Append(",c="); 128 buff.Append(",c=");
109 buff.Append(referenceCount.ToString()); 129 buff.Append(referenceCount.ToString());
110 buff.Append(">"); 130 buff.Append(">");
111 return buff.ToString(); 131 return buff.ToString();
112 } 132 }
133
134 #region Common shape routines
135 // Create a hash of all the shape parameters to be used as a key for this particular shape.
136 public static System.UInt64 ComputeShapeKey(OMV.Vector3 size, PrimitiveBaseShape pbs, out float retLod)
137 {
138 // level of detail based on size and type of the object
139 float lod = BSParam.MeshLOD;
140 if (pbs.SculptEntry)
141 lod = BSParam.SculptLOD;
142
143 // Mega prims usually get more detail because one can interact with shape approximations at this size.
144 float maxAxis = Math.Max(size.X, Math.Max(size.Y, size.Z));
145 if (maxAxis > BSParam.MeshMegaPrimThreshold)
146 lod = BSParam.MeshMegaPrimLOD;
147
148 retLod = lod;
149 return pbs.GetMeshKey(size, lod);
150 }
151
152 // The creation of a mesh or hull can fail if an underlying asset is not available.
153 // There are two cases: 1) the asset is not in the cache and it needs to be fetched;
154 // and 2) the asset cannot be converted (like failed decompression of JPEG2000s).
155 // The first case causes the asset to be fetched. The second case requires
156 // us to not loop forever.
157 // Called after creating a physical mesh or hull. If the physical shape was created,
158 // just return.
159 public static BulletShape VerifyMeshCreated(BSScene physicsScene, BulletShape newShape, BSPhysObject prim)
160 {
161 // If the shape was successfully created, nothing more to do
162 if (newShape.HasPhysicalShape)
163 return newShape;
164
165 // VerifyMeshCreated is called after trying to create the mesh. If we think the asset had been
166 // fetched but we end up here again, the meshing of the asset must have failed.
167 // Prevent trying to keep fetching the mesh by declaring failure.
168 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Fetched)
169 {
170 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
171 physicsScene.Logger.WarnFormat("{0} Fetched asset would not mesh. {1}, texture={2}",
172 LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
173 physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,setFailed,objNam={1},tex={2}",
174 prim.LocalID, prim.PhysObjectName, prim.BaseShape.SculptTexture);
175 }
176 else
177 {
178 // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset
179 if (prim.BaseShape.SculptEntry
180 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed
181 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Waiting
182 && prim.BaseShape.SculptTexture != OMV.UUID.Zero
183 )
184 {
185 physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,fetchAsset,objNam={1},tex={2}",
186 prim.LocalID, prim.PhysObjectName, prim.BaseShape.SculptTexture);
187 // Multiple requestors will know we're waiting for this asset
188 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Waiting;
189
190 BSPhysObject xprim = prim;
191 Util.FireAndForget(delegate
192 {
193 // physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,inFireAndForget", xprim.LocalID);
194 RequestAssetDelegate assetProvider = physicsScene.RequestAssetMethod;
195 if (assetProvider != null)
196 {
197 BSPhysObject yprim = xprim; // probably not necessary, but, just in case.
198 assetProvider(yprim.BaseShape.SculptTexture, delegate(AssetBase asset)
199 {
200 // physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,assetProviderCallback", xprim.LocalID);
201 bool assetFound = false;
202 string mismatchIDs = String.Empty; // DEBUG DEBUG
203 if (asset != null && yprim.BaseShape.SculptEntry)
204 {
205 if (yprim.BaseShape.SculptTexture.ToString() == asset.ID)
206 {
207 yprim.BaseShape.SculptData = asset.Data;
208 // This will cause the prim to see that the filler shape is not the right
209 // one and try again to build the object.
210 // No race condition with the normal shape setting since the rebuild is at taint time.
211 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Fetched;
212 yprim.ForceBodyShapeRebuild(false /* inTaintTime */);
213 assetFound = true;
214 }
215 else
216 {
217 mismatchIDs = yprim.BaseShape.SculptTexture.ToString() + "/" + asset.ID;
218 }
219 }
220 if (!assetFound)
221 {
222 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
223 }
224 physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,fetchAssetCallback,found={1},isSculpt={2},ids={3}",
225 yprim.LocalID, assetFound, yprim.BaseShape.SculptEntry, mismatchIDs );
226 });
227 }
228 else
229 {
230 xprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
231 physicsScene.Logger.ErrorFormat("{0} Physical object requires asset but no asset provider. Name={1}",
232 LogHeader, physicsScene.Name);
233 }
234 });
235 }
236 else
237 {
238 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
239 {
240 physicsScene.Logger.WarnFormat("{0} Mesh failed to fetch asset. obj={1}, texture={2}",
241 LogHeader, prim.PhysObjectName, prim.BaseShape.SculptTexture);
242 physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,wasFailed,objNam={1},tex={2}",
243 prim.LocalID, prim.PhysObjectName, prim.BaseShape.SculptTexture);
244 }
245 }
246 }
247
248 // While we wait for the mesh defining asset to be loaded, stick in a simple box for the object.
249 BSShape fillShape = BSShapeNative.GetReference(physicsScene, prim, BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX);
250 physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,boxTempShape", prim.LocalID);
251
252 return fillShape.physShapeInfo;
253 }
254
255 #endregion // Common shape routines
113} 256}
114 257
258// ============================================================================================================
115public class BSShapeNull : BSShape 259public class BSShapeNull : BSShape
116{ 260{
117 public BSShapeNull() : base() 261 public BSShapeNull() : base()
118 { 262 {
119 } 263 }
120 public static BSShape GetReference() { return new BSShapeNull(); } 264 public static BSShape GetReference() { return new BSShapeNull(); }
265 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim) { return new BSShapeNull(); }
121 public override void Dereference(BSScene physicsScene) { /* The magic of garbage collection will make this go away */ } 266 public override void Dereference(BSScene physicsScene) { /* The magic of garbage collection will make this go away */ }
122} 267}
123 268
269// ============================================================================================================
124public class BSShapeNative : BSShape 270public class BSShapeNative : BSShape
125{ 271{
126 private static string LogHeader = "[BULLETSIM SHAPE NATIVE]"; 272 private static string LogHeader = "[BULLETSIM SHAPE NATIVE]";
127 public BSShapeNative() : base() 273 public BSShapeNative(BulletShape pShape) : base(pShape)
128 { 274 {
129 } 275 }
130 public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim, 276
131 BSPhysicsShapeType shapeType, FixedShapeKey shapeKey) 277 public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim,
278 BSPhysicsShapeType shapeType, FixedShapeKey shapeKey)
132 { 279 {
133 // Native shapes are not shared and are always built anew. 280 // Native shapes are not shared and are always built anew.
134 //return new BSShapeNative(physicsScene, prim, shapeType, shapeKey); 281 return new BSShapeNative(CreatePhysicalNativeShape(physicsScene, prim, shapeType, shapeKey));
135 return null; 282 }
283
284 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim)
285 {
286 // Native shapes are not shared so we return a new shape.
287 BSShape ret = null;
288 lock (physShapeInfo)
289 {
290 ret = new BSShapeNative(CreatePhysicalNativeShape(pPhysicsScene, pPrim,
291 physShapeInfo.shapeType, (FixedShapeKey)physShapeInfo.shapeKey));
292 }
293 return ret;
294 }
295
296 // Make this reference to the physical shape go away since native shapes are not shared.
297 public override void Dereference(BSScene physicsScene)
298 {
299 // Native shapes are not tracked and are released immediately
300 lock (physShapeInfo)
301 {
302 if (physShapeInfo.HasPhysicalShape)
303 {
304 physicsScene.DetailLog("{0},BSShapeNative.Dereference,deleteNativeShape,shape={1}", BSScene.DetailLogZero, this);
305 physicsScene.PE.DeleteCollisionShape(physicsScene.World, physShapeInfo);
306 }
307 physShapeInfo.Clear();
308 // Garbage collection will free up this instance.
309 }
136 } 310 }
137 311
138 private BSShapeNative(BSScene physicsScene, BSPhysObject prim, 312 private static BulletShape CreatePhysicalNativeShape(BSScene physicsScene, BSPhysObject prim,
139 BSPhysicsShapeType shapeType, FixedShapeKey shapeKey) 313 BSPhysicsShapeType shapeType, FixedShapeKey shapeKey)
140 { 314 {
315 BulletShape newShape;
316
141 ShapeData nativeShapeData = new ShapeData(); 317 ShapeData nativeShapeData = new ShapeData();
142 nativeShapeData.Type = shapeType; 318 nativeShapeData.Type = shapeType;
143 nativeShapeData.ID = prim.LocalID; 319 nativeShapeData.ID = prim.LocalID;
@@ -146,84 +322,849 @@ public class BSShapeNative : BSShape
146 nativeShapeData.MeshKey = (ulong)shapeKey; 322 nativeShapeData.MeshKey = (ulong)shapeKey;
147 nativeShapeData.HullKey = (ulong)shapeKey; 323 nativeShapeData.HullKey = (ulong)shapeKey;
148 324
149
150 /*
151 if (shapeType == BSPhysicsShapeType.SHAPE_CAPSULE) 325 if (shapeType == BSPhysicsShapeType.SHAPE_CAPSULE)
152 { 326 {
153 ptr = PhysicsScene.PE.BuildCapsuleShape(physicsScene.World, 1f, 1f, prim.Scale); 327 newShape = physicsScene.PE.BuildCapsuleShape(physicsScene.World, 1f, 1f, prim.Scale);
154 physicsScene.DetailLog("{0},BSShapeCollection.BuiletPhysicalNativeShape,capsule,scale={1}", prim.LocalID, prim.Scale); 328 physicsScene.DetailLog("{0},BSShapeNative,capsule,scale={1}", prim.LocalID, prim.Scale);
155 } 329 }
156 else 330 else
157 { 331 {
158 ptr = PhysicsScene.PE.BuildNativeShape(physicsScene.World, nativeShapeData); 332 newShape = physicsScene.PE.BuildNativeShape(physicsScene.World, nativeShapeData);
159 } 333 }
160 if (ptr == IntPtr.Zero) 334 if (!newShape.HasPhysicalShape)
161 { 335 {
162 physicsScene.Logger.ErrorFormat("{0} BuildPhysicalNativeShape failed. ID={1}, shape={2}", 336 physicsScene.Logger.ErrorFormat("{0} BuildPhysicalNativeShape failed. ID={1}, shape={2}",
163 LogHeader, prim.LocalID, shapeType); 337 LogHeader, prim.LocalID, shapeType);
164 } 338 }
165 type = shapeType; 339 newShape.shapeType = shapeType;
166 key = (UInt64)shapeKey; 340 newShape.isNativeShape = true;
167 */ 341 newShape.shapeKey = (UInt64)shapeKey;
168 } 342 return newShape;
169 // Make this reference to the physical shape go away since native shapes are not shared.
170 public override void Dereference(BSScene physicsScene)
171 {
172 /*
173 // Native shapes are not tracked and are released immediately
174 physicsScene.DetailLog("{0},BSShapeCollection.DereferenceShape,deleteNativeShape,shape={1}", BSScene.DetailLogZero, this);
175 PhysicsScene.PE.DeleteCollisionShape(physicsScene.World, this);
176 ptr = IntPtr.Zero;
177 // Garbage collection will free up this instance.
178 */
179 } 343 }
344
180} 345}
181 346
347// ============================================================================================================
182public class BSShapeMesh : BSShape 348public class BSShapeMesh : BSShape
183{ 349{
184 private static string LogHeader = "[BULLETSIM SHAPE MESH]"; 350 private static string LogHeader = "[BULLETSIM SHAPE MESH]";
185 private static Dictionary<System.UInt64, BSShapeMesh> Meshes = new Dictionary<System.UInt64, BSShapeMesh>(); 351 public static Dictionary<System.UInt64, BSShapeMesh> Meshes = new Dictionary<System.UInt64, BSShapeMesh>();
186 352
187 public BSShapeMesh() : base() 353 public BSShapeMesh(BulletShape pShape) : base(pShape)
188 { 354 {
189 } 355 }
190 public static BSShape GetReference() { return new BSShapeNull(); } 356 public static BSShape GetReference(BSScene physicsScene, bool forceRebuild, BSPhysObject prim)
191 public override void Dereference(BSScene physicsScene) { } 357 {
358 float lod;
359 System.UInt64 newMeshKey = BSShape.ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
360
361 BSShapeMesh retMesh = null;
362 lock (Meshes)
363 {
364 if (Meshes.TryGetValue(newMeshKey, out retMesh))
365 {
366 // The mesh has already been created. Return a new reference to same.
367 retMesh.IncrementReference();
368 }
369 else
370 {
371 retMesh = new BSShapeMesh(new BulletShape());
372 // An instance of this mesh has not been created. Build and remember same.
373 BulletShape newShape = retMesh.CreatePhysicalMesh(physicsScene, prim, newMeshKey, prim.BaseShape, prim.Size, lod);
374
375 // Check to see if mesh was created (might require an asset).
376 newShape = VerifyMeshCreated(physicsScene, newShape, prim);
377 if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
378 {
379 // If a mesh was what was created, remember the built shape for later sharing.
380 // Also note that if meshing failed we put it in the mesh list as there is nothing else to do about the mesh.
381 Meshes.Add(newMeshKey, retMesh);
382 }
383
384 retMesh.physShapeInfo = newShape;
385 }
386 }
387 physicsScene.DetailLog("{0},BSShapeMesh,getReference,mesh={1},size={2},lod={3}", prim.LocalID, retMesh, prim.Size, lod);
388 return retMesh;
389 }
390 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim)
391 {
392 BSShape ret = null;
393 // If the underlying shape is native, the actual shape has not been build (waiting for asset)
394 // and we must create a copy of the native shape since they are never shared.
395 if (physShapeInfo.HasPhysicalShape && physShapeInfo.isNativeShape)
396 {
397 // TODO: decide when the native shapes should be freed. Check in Dereference?
398 ret = BSShapeNative.GetReference(pPhysicsScene, pPrim, BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX);
399 }
400 else
401 {
402 // Another reference to this shape is just counted.
403 IncrementReference();
404 ret = this;
405 }
406 return ret;
407 }
408 public override void Dereference(BSScene physicsScene)
409 {
410 lock (Meshes)
411 {
412 this.DecrementReference();
413 physicsScene.DetailLog("{0},BSShapeMesh.Dereference,shape={1}", BSScene.DetailLogZero, this);
414 // TODO: schedule aging and destruction of unused meshes.
415 }
416 }
417 // Loop through all the known meshes and return the description based on the physical address.
418 public static bool TryGetMeshByPtr(BulletShape pShape, out BSShapeMesh outMesh)
419 {
420 bool ret = false;
421 BSShapeMesh foundDesc = null;
422 lock (Meshes)
423 {
424 foreach (BSShapeMesh sm in Meshes.Values)
425 {
426 if (sm.physShapeInfo.ReferenceSame(pShape))
427 {
428 foundDesc = sm;
429 ret = true;
430 break;
431 }
432
433 }
434 }
435 outMesh = foundDesc;
436 return ret;
437 }
438
439 public delegate BulletShape CreateShapeCall(BulletWorld world, int indicesCount, int[] indices, int verticesCount, float[] vertices );
440 private BulletShape CreatePhysicalMesh(BSScene physicsScene, BSPhysObject prim, System.UInt64 newMeshKey,
441 PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
442 {
443 return BSShapeMesh.CreatePhysicalMeshShape(physicsScene, prim, newMeshKey, pbs, size, lod,
444 (w, iC, i, vC, v) => physicsScene.PE.CreateMeshShape(w, iC, i, vC, v) );
445 }
446
447 // Code that uses the mesher to create the index/vertices info for a trimesh shape.
448 // This is used by the passed 'makeShape' call to create the Bullet mesh shape.
449 // The actual build call is passed so this logic can be used by several of the shapes that use a
450 // simple mesh as their base shape.
451 public static BulletShape CreatePhysicalMeshShape(BSScene physicsScene, BSPhysObject prim, System.UInt64 newMeshKey,
452 PrimitiveBaseShape pbs, OMV.Vector3 size, float lod, CreateShapeCall makeShape)
453 {
454 BulletShape newShape = new BulletShape();
455
456 IMesh meshData = null;
457 lock (physicsScene.mesher)
458 {
459 meshData = physicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod,
460 false, // say it is not physical so a bounding box is not built
461 false, // do not cache the mesh and do not use previously built versions
462 false,
463 false
464 );
465 }
466
467 if (meshData != null)
468 {
469 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Fetched)
470 {
471 // Release the fetched asset data once it has been used.
472 pbs.SculptData = new byte[0];
473 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Unknown;
474 }
475
476 int[] indices = meshData.getIndexListAsInt();
477 int realIndicesIndex = indices.Length;
478 float[] verticesAsFloats = meshData.getVertexListAsFloat();
479
480 if (BSParam.ShouldRemoveZeroWidthTriangles)
481 {
482 // Remove degenerate triangles. These are triangles with two of the vertices
483 // are the same. This is complicated by the problem that vertices are not
484 // made unique in sculpties so we have to compare the values in the vertex.
485 realIndicesIndex = 0;
486 for (int tri = 0; tri < indices.Length; tri += 3)
487 {
488 // Compute displacements into vertex array for each vertex of the triangle
489 int v1 = indices[tri + 0] * 3;
490 int v2 = indices[tri + 1] * 3;
491 int v3 = indices[tri + 2] * 3;
492 // Check to see if any two of the vertices are the same
493 if (!( ( verticesAsFloats[v1 + 0] == verticesAsFloats[v2 + 0]
494 && verticesAsFloats[v1 + 1] == verticesAsFloats[v2 + 1]
495 && verticesAsFloats[v1 + 2] == verticesAsFloats[v2 + 2])
496 || ( verticesAsFloats[v2 + 0] == verticesAsFloats[v3 + 0]
497 && verticesAsFloats[v2 + 1] == verticesAsFloats[v3 + 1]
498 && verticesAsFloats[v2 + 2] == verticesAsFloats[v3 + 2])
499 || ( verticesAsFloats[v1 + 0] == verticesAsFloats[v3 + 0]
500 && verticesAsFloats[v1 + 1] == verticesAsFloats[v3 + 1]
501 && verticesAsFloats[v1 + 2] == verticesAsFloats[v3 + 2]) )
502 )
503 {
504 // None of the vertices of the triangles are the same. This is a good triangle;
505 indices[realIndicesIndex + 0] = indices[tri + 0];
506 indices[realIndicesIndex + 1] = indices[tri + 1];
507 indices[realIndicesIndex + 2] = indices[tri + 2];
508 realIndicesIndex += 3;
509 }
510 }
511 }
512 physicsScene.DetailLog("{0},BSShapeMesh.CreatePhysicalMesh,key={1},origTri={2},realTri={3},numVerts={4}",
513 BSScene.DetailLogZero, newMeshKey.ToString("X"), indices.Length / 3, realIndicesIndex / 3, verticesAsFloats.Length / 3);
514
515 if (realIndicesIndex != 0)
516 {
517 newShape = makeShape(physicsScene.World, realIndicesIndex, indices, verticesAsFloats.Length / 3, verticesAsFloats);
518 }
519 else
520 {
521 // Force the asset condition to 'failed' so we won't try to keep fetching and processing this mesh.
522 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
523 physicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}",
524 LogHeader, prim.PhysObjectName, prim.RawPosition, physicsScene.Name);
525 physicsScene.DetailLog("{0},BSShapeMesh.CreatePhysicalMesh,allDegenerate,key={1}", prim.LocalID, newMeshKey);
526 }
527 }
528 newShape.shapeKey = newMeshKey;
529
530 return newShape;
531 }
192} 532}
193 533
534// ============================================================================================================
194public class BSShapeHull : BSShape 535public class BSShapeHull : BSShape
195{ 536{
196 private static string LogHeader = "[BULLETSIM SHAPE HULL]"; 537 private static string LogHeader = "[BULLETSIM SHAPE HULL]";
197 private static Dictionary<System.UInt64, BSShapeHull> Hulls = new Dictionary<System.UInt64, BSShapeHull>(); 538 public static Dictionary<System.UInt64, BSShapeHull> Hulls = new Dictionary<System.UInt64, BSShapeHull>();
198 539
199 public BSShapeHull() : base() 540 public BSShapeHull(BulletShape pShape) : base(pShape)
200 { 541 {
201 } 542 }
202 public static BSShape GetReference() { return new BSShapeNull(); } 543 public static BSShape GetReference(BSScene physicsScene, bool forceRebuild, BSPhysObject prim)
203 public override void Dereference(BSScene physicsScene) { } 544 {
545 float lod;
546 System.UInt64 newHullKey = BSShape.ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
547
548 BSShapeHull retHull = null;
549 lock (Hulls)
550 {
551 if (Hulls.TryGetValue(newHullKey, out retHull))
552 {
553 // The mesh has already been created. Return a new reference to same.
554 retHull.IncrementReference();
555 }
556 else
557 {
558 retHull = new BSShapeHull(new BulletShape());
559 // An instance of this mesh has not been created. Build and remember same.
560 BulletShape newShape = retHull.CreatePhysicalHull(physicsScene, prim, newHullKey, prim.BaseShape, prim.Size, lod);
561
562 // Check to see if hull was created (might require an asset).
563 newShape = VerifyMeshCreated(physicsScene, newShape, prim);
564 if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
565 {
566 // If a mesh was what was created, remember the built shape for later sharing.
567 Hulls.Add(newHullKey, retHull);
568 }
569 retHull.physShapeInfo = newShape;
570 }
571 }
572 physicsScene.DetailLog("{0},BSShapeHull,getReference,hull={1},size={2},lod={3}", prim.LocalID, retHull, prim.Size, lod);
573 return retHull;
574 }
575 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim)
576 {
577 BSShape ret = null;
578 // If the underlying shape is native, the actual shape has not been build (waiting for asset)
579 // and we must create a copy of the native shape since they are never shared.
580 if (physShapeInfo.HasPhysicalShape && physShapeInfo.isNativeShape)
581 {
582 // TODO: decide when the native shapes should be freed. Check in Dereference?
583 ret = BSShapeNative.GetReference(pPhysicsScene, pPrim, BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX);
584 }
585 else
586 {
587 // Another reference to this shape is just counted.
588 IncrementReference();
589 ret = this;
590 }
591 return ret;
592 }
593 public override void Dereference(BSScene physicsScene)
594 {
595 lock (Hulls)
596 {
597 this.DecrementReference();
598 physicsScene.DetailLog("{0},BSShapeHull.Dereference,shape={1}", BSScene.DetailLogZero, this);
599 // TODO: schedule aging and destruction of unused meshes.
600 }
601 }
602 List<ConvexResult> m_hulls;
603 private BulletShape CreatePhysicalHull(BSScene physicsScene, BSPhysObject prim, System.UInt64 newHullKey,
604 PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
605 {
606 BulletShape newShape = new BulletShape();
607
608 IMesh meshData = null;
609 List<List<OMV.Vector3>> allHulls = null;
610 lock (physicsScene.mesher)
611 {
612 // Pass true for physicalness as this prevents the creation of bounding box which is not needed
613 meshData = physicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod, true /* isPhysical */, false /* shouldCache */, false, false);
614
615 // If we should use the asset's hull info, fetch it out of the locked mesher
616 if (meshData != null && BSParam.ShouldUseAssetHulls)
617 {
618 Meshmerizer realMesher = physicsScene.mesher as Meshmerizer;
619 if (realMesher != null)
620 {
621 allHulls = realMesher.GetConvexHulls(size);
622 }
623 if (allHulls == null)
624 {
625 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,assetHulls,noAssetHull", prim.LocalID);
626 }
627 }
628 }
629
630 // If there is hull data in the mesh asset, build the hull from that
631 if (allHulls != null && BSParam.ShouldUseAssetHulls)
632 {
633 int hullCount = allHulls.Count;
634 int totalVertices = 1; // include one for the count of the hulls
635 // Using the structure described for HACD hulls, create the memory sturcture
636 // to pass the hull data to the creater.
637 foreach (List<OMV.Vector3> hullVerts in allHulls)
638 {
639 totalVertices += 4; // add four for the vertex count and centroid
640 totalVertices += hullVerts.Count * 3; // one vertex is three dimensions
641 }
642 float[] convHulls = new float[totalVertices];
643
644 convHulls[0] = (float)hullCount;
645 int jj = 1;
646 foreach (List<OMV.Vector3> hullVerts in allHulls)
647 {
648 convHulls[jj + 0] = hullVerts.Count;
649 convHulls[jj + 1] = 0f; // centroid x,y,z
650 convHulls[jj + 2] = 0f;
651 convHulls[jj + 3] = 0f;
652 jj += 4;
653 foreach (OMV.Vector3 oneVert in hullVerts)
654 {
655 convHulls[jj + 0] = oneVert.X;
656 convHulls[jj + 1] = oneVert.Y;
657 convHulls[jj + 2] = oneVert.Z;
658 jj += 3;
659 }
660 }
661
662 // create the hull data structure in Bullet
663 newShape = physicsScene.PE.CreateHullShape(physicsScene.World, hullCount, convHulls);
664
665 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,assetHulls,hulls={1},totVert={2},shape={3}",
666 prim.LocalID, hullCount, totalVertices, newShape);
667 }
668
669 // If no hull specified in the asset and we should use Bullet's HACD approximation...
670 if (!newShape.HasPhysicalShape && BSParam.ShouldUseBulletHACD)
671 {
672 // Build the hull shape from an existing mesh shape.
673 // The mesh should have already been created in Bullet.
674 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,bulletHACD,entry", prim.LocalID);
675 BSShape meshShape = BSShapeMesh.GetReference(physicsScene, true, prim);
676
677 if (meshShape.physShapeInfo.HasPhysicalShape)
678 {
679 HACDParams parms;
680 parms.maxVerticesPerHull = BSParam.BHullMaxVerticesPerHull;
681 parms.minClusters = BSParam.BHullMinClusters;
682 parms.compacityWeight = BSParam.BHullCompacityWeight;
683 parms.volumeWeight = BSParam.BHullVolumeWeight;
684 parms.concavity = BSParam.BHullConcavity;
685 parms.addExtraDistPoints = BSParam.NumericBool(BSParam.BHullAddExtraDistPoints);
686 parms.addNeighboursDistPoints = BSParam.NumericBool(BSParam.BHullAddNeighboursDistPoints);
687 parms.addFacesPoints = BSParam.NumericBool(BSParam.BHullAddFacesPoints);
688 parms.shouldAdjustCollisionMargin = BSParam.NumericBool(BSParam.BHullShouldAdjustCollisionMargin);
689
690 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,hullFromMesh,beforeCall", prim.LocalID, newShape.HasPhysicalShape);
691 newShape = physicsScene.PE.BuildHullShapeFromMesh(physicsScene.World, meshShape.physShapeInfo, parms);
692 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,hullFromMesh,shape={1}", prim.LocalID, newShape);
693
694 // Now done with the mesh shape.
695 meshShape.Dereference(physicsScene);
696 }
697 physicsScene.DetailLog("{0},BSShapeHull.CreatePhysicalHull,bulletHACD,exit,hasBody={1}", prim.LocalID, newShape.HasPhysicalShape);
698 }
699
700 // If no other hull specifications, use our HACD hull approximation.
701 if (!newShape.HasPhysicalShape && meshData != null)
702 {
703 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Fetched)
704 {
705 // Release the fetched asset data once it has been used.
706 pbs.SculptData = new byte[0];
707 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Unknown;
708 }
709
710 int[] indices = meshData.getIndexListAsInt();
711 List<OMV.Vector3> vertices = meshData.getVertexList();
712
713 //format conversion from IMesh format to DecompDesc format
714 List<int> convIndices = new List<int>();
715 List<float3> convVertices = new List<float3>();
716 for (int ii = 0; ii < indices.GetLength(0); ii++)
717 {
718 convIndices.Add(indices[ii]);
719 }
720 foreach (OMV.Vector3 vv in vertices)
721 {
722 convVertices.Add(new float3(vv.X, vv.Y, vv.Z));
723 }
724
725 uint maxDepthSplit = (uint)BSParam.CSHullMaxDepthSplit;
726 if (BSParam.CSHullMaxDepthSplit != BSParam.CSHullMaxDepthSplitForSimpleShapes)
727 {
728 // Simple primitive shapes we know are convex so they are better implemented with
729 // fewer hulls.
730 // Check for simple shape (prim without cuts) and reduce split parameter if so.
731 if (BSShapeCollection.PrimHasNoCuts(pbs))
732 {
733 maxDepthSplit = (uint)BSParam.CSHullMaxDepthSplitForSimpleShapes;
734 }
735 }
736
737 // setup and do convex hull conversion
738 m_hulls = new List<ConvexResult>();
739 DecompDesc dcomp = new DecompDesc();
740 dcomp.mIndices = convIndices;
741 dcomp.mVertices = convVertices;
742 dcomp.mDepth = maxDepthSplit;
743 dcomp.mCpercent = BSParam.CSHullConcavityThresholdPercent;
744 dcomp.mPpercent = BSParam.CSHullVolumeConservationThresholdPercent;
745 dcomp.mMaxVertices = (uint)BSParam.CSHullMaxVertices;
746 dcomp.mSkinWidth = BSParam.CSHullMaxSkinWidth;
747 ConvexBuilder convexBuilder = new ConvexBuilder(HullReturn);
748 // create the hull into the _hulls variable
749 convexBuilder.process(dcomp);
750
751 physicsScene.DetailLog("{0},BSShapeCollection.CreatePhysicalHull,key={1},inVert={2},inInd={3},split={4},hulls={5}",
752 BSScene.DetailLogZero, newHullKey, indices.GetLength(0), vertices.Count, maxDepthSplit, m_hulls.Count);
753
754 // Convert the vertices and indices for passing to unmanaged.
755 // The hull information is passed as a large floating point array.
756 // The format is:
757 // convHulls[0] = number of hulls
758 // convHulls[1] = number of vertices in first hull
759 // convHulls[2] = hull centroid X coordinate
760 // convHulls[3] = hull centroid Y coordinate
761 // convHulls[4] = hull centroid Z coordinate
762 // convHulls[5] = first hull vertex X
763 // convHulls[6] = first hull vertex Y
764 // convHulls[7] = first hull vertex Z
765 // convHulls[8] = second hull vertex X
766 // ...
767 // convHulls[n] = number of vertices in second hull
768 // convHulls[n+1] = second hull centroid X coordinate
769 // ...
770 //
771 // TODO: is is very inefficient. Someday change the convex hull generator to return
772 // data structures that do not need to be converted in order to pass to Bullet.
773 // And maybe put the values directly into pinned memory rather than marshaling.
774 int hullCount = m_hulls.Count;
775 int totalVertices = 1; // include one for the count of the hulls
776 foreach (ConvexResult cr in m_hulls)
777 {
778 totalVertices += 4; // add four for the vertex count and centroid
779 totalVertices += cr.HullIndices.Count * 3; // we pass just triangles
780 }
781 float[] convHulls = new float[totalVertices];
782
783 convHulls[0] = (float)hullCount;
784 int jj = 1;
785 foreach (ConvexResult cr in m_hulls)
786 {
787 // copy vertices for index access
788 float3[] verts = new float3[cr.HullVertices.Count];
789 int kk = 0;
790 foreach (float3 ff in cr.HullVertices)
791 {
792 verts[kk++] = ff;
793 }
794
795 // add to the array one hull's worth of data
796 convHulls[jj++] = cr.HullIndices.Count;
797 convHulls[jj++] = 0f; // centroid x,y,z
798 convHulls[jj++] = 0f;
799 convHulls[jj++] = 0f;
800 foreach (int ind in cr.HullIndices)
801 {
802 convHulls[jj++] = verts[ind].x;
803 convHulls[jj++] = verts[ind].y;
804 convHulls[jj++] = verts[ind].z;
805 }
806 }
807 // create the hull data structure in Bullet
808 newShape = physicsScene.PE.CreateHullShape(physicsScene.World, hullCount, convHulls);
809 }
810 newShape.shapeKey = newHullKey;
811 return newShape;
812 }
813 // Callback from convex hull creater with a newly created hull.
814 // Just add it to our collection of hulls for this shape.
815 private void HullReturn(ConvexResult result)
816 {
817 m_hulls.Add(result);
818 return;
819 }
820 // Loop through all the known hulls and return the description based on the physical address.
821 public static bool TryGetHullByPtr(BulletShape pShape, out BSShapeHull outHull)
822 {
823 bool ret = false;
824 BSShapeHull foundDesc = null;
825 lock (Hulls)
826 {
827 foreach (BSShapeHull sh in Hulls.Values)
828 {
829 if (sh.physShapeInfo.ReferenceSame(pShape))
830 {
831 foundDesc = sh;
832 ret = true;
833 break;
834 }
835
836 }
837 }
838 outHull = foundDesc;
839 return ret;
840 }
204} 841}
205 842
843// ============================================================================================================
206public class BSShapeCompound : BSShape 844public class BSShapeCompound : BSShape
207{ 845{
208 private static string LogHeader = "[BULLETSIM SHAPE COMPOUND]"; 846 private static string LogHeader = "[BULLETSIM SHAPE COMPOUND]";
209 public BSShapeCompound() : base() 847 public BSShapeCompound(BulletShape pShape) : base(pShape)
210 { 848 {
211 } 849 }
212 public static BSShape GetReference(BSPhysObject prim) 850 public static BSShape GetReference(BSScene physicsScene)
213 { 851 {
214 return new BSShapeNull(); 852 // Base compound shapes are not shared so this returns a raw shape.
853 // A built compound shape can be reused in linksets.
854 return new BSShapeCompound(CreatePhysicalCompoundShape(physicsScene));
855 }
856 public override BSShape GetReference(BSScene physicsScene, BSPhysObject prim)
857 {
858 // Calling this reference means we want another handle to an existing compound shape
859 // (usually linksets) so return this copy.
860 IncrementReference();
861 return this;
862 }
863 // Dereferencing a compound shape releases the hold on all the child shapes.
864 public override void Dereference(BSScene physicsScene)
865 {
866 lock (physShapeInfo)
867 {
868 this.DecrementReference();
869 physicsScene.DetailLog("{0},BSShapeCompound.Dereference,shape={1}", BSScene.DetailLogZero, this);
870 if (referenceCount <= 0)
871 {
872 if (!physicsScene.PE.IsCompound(physShapeInfo))
873 {
874 // Failed the sanity check!!
875 physicsScene.Logger.ErrorFormat("{0} Attempt to free a compound shape that is not compound!! type={1}, ptr={2}",
876 LogHeader, physShapeInfo.shapeType, physShapeInfo.AddrString);
877 physicsScene.DetailLog("{0},BSShapeCollection.DereferenceCompound,notACompoundShape,type={1},ptr={2}",
878 BSScene.DetailLogZero, physShapeInfo.shapeType, physShapeInfo.AddrString);
879 return;
880 }
881
882 int numChildren = physicsScene.PE.GetNumberOfCompoundChildren(physShapeInfo);
883 physicsScene.DetailLog("{0},BSShapeCollection.DereferenceCompound,shape={1},children={2}",
884 BSScene.DetailLogZero, physShapeInfo, numChildren);
885
886 // Loop through all the children dereferencing each.
887 for (int ii = numChildren - 1; ii >= 0; ii--)
888 {
889 BulletShape childShape = physicsScene.PE.RemoveChildShapeFromCompoundShapeIndex(physShapeInfo, ii);
890 DereferenceAnonCollisionShape(physicsScene, childShape);
891 }
892 physicsScene.PE.DeleteCollisionShape(physicsScene.World, physShapeInfo);
893 }
894 }
895 }
896 private static BulletShape CreatePhysicalCompoundShape(BSScene physicsScene)
897 {
898 BulletShape cShape = physicsScene.PE.CreateCompoundShape(physicsScene.World, false);
899 return cShape;
900 }
901 // Sometimes we have a pointer to a collision shape but don't know what type it is.
902 // Figure out type and call the correct dereference routine.
903 // Called at taint-time.
904 private void DereferenceAnonCollisionShape(BSScene physicsScene, BulletShape pShape)
905 {
906 // TODO: figure a better way to go through all the shape types and find a possible instance.
907 BSShapeMesh meshDesc;
908 if (BSShapeMesh.TryGetMeshByPtr(pShape, out meshDesc))
909 {
910 meshDesc.Dereference(physicsScene);
911 }
912 else
913 {
914 BSShapeHull hullDesc;
915 if (BSShapeHull.TryGetHullByPtr(pShape, out hullDesc))
916 {
917 hullDesc.Dereference(physicsScene);
918 }
919 else
920 {
921 BSShapeConvexHull chullDesc;
922 if (BSShapeConvexHull.TryGetHullByPtr(pShape, out chullDesc))
923 {
924 chullDesc.Dereference(physicsScene);
925 }
926 else
927 {
928 BSShapeGImpact gImpactDesc;
929 if (BSShapeGImpact.TryGetGImpactByPtr(pShape, out gImpactDesc))
930 {
931 gImpactDesc.Dereference(physicsScene);
932 }
933 else
934 {
935 // Didn't find it in the lists of specific types. It could be compound.
936 if (physicsScene.PE.IsCompound(pShape))
937 {
938 BSShapeCompound recursiveCompound = new BSShapeCompound(pShape);
939 recursiveCompound.Dereference(physicsScene);
940 }
941 else
942 {
943 // If none of the above, maybe it is a simple native shape.
944 if (physicsScene.PE.IsNativeShape(pShape))
945 {
946 BSShapeNative nativeShape = new BSShapeNative(pShape);
947 nativeShape.Dereference(physicsScene);
948 }
949 }
950 }
951 }
952 }
953 }
954 }
955}
956
957// ============================================================================================================
958public class BSShapeConvexHull : BSShape
959{
960 private static string LogHeader = "[BULLETSIM SHAPE CONVEX HULL]";
961 public static Dictionary<System.UInt64, BSShapeConvexHull> ConvexHulls = new Dictionary<System.UInt64, BSShapeConvexHull>();
962
963 public BSShapeConvexHull(BulletShape pShape) : base(pShape)
964 {
965 }
966 public static BSShape GetReference(BSScene physicsScene, bool forceRebuild, BSPhysObject prim)
967 {
968 float lod;
969 System.UInt64 newMeshKey = BSShape.ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
970
971 physicsScene.DetailLog("{0},BSShapeConvexHull,getReference,newKey={1},size={2},lod={3}",
972 prim.LocalID, newMeshKey.ToString("X"), prim.Size, lod);
973
974 BSShapeConvexHull retConvexHull = null;
975 lock (ConvexHulls)
976 {
977 if (ConvexHulls.TryGetValue(newMeshKey, out retConvexHull))
978 {
979 // The mesh has already been created. Return a new reference to same.
980 retConvexHull.IncrementReference();
981 }
982 else
983 {
984 retConvexHull = new BSShapeConvexHull(new BulletShape());
985 BulletShape convexShape = null;
986
987 // Get a handle to a mesh to build the hull from
988 BSShape baseMesh = BSShapeMesh.GetReference(physicsScene, false /* forceRebuild */, prim);
989 if (baseMesh.physShapeInfo.isNativeShape)
990 {
991 // We get here if the mesh was not creatable. Could be waiting for an asset from the disk.
992 // In the short term, we return the native shape and a later ForceBodyShapeRebuild should
993 // get back to this code with a buildable mesh.
994 // TODO: not sure the temp native shape is freed when the mesh is rebuilt. When does this get freed?
995 convexShape = baseMesh.physShapeInfo;
996 }
997 else
998 {
999 convexShape = physicsScene.PE.BuildConvexHullShapeFromMesh(physicsScene.World, baseMesh.physShapeInfo);
1000 convexShape.shapeKey = newMeshKey;
1001 ConvexHulls.Add(convexShape.shapeKey, retConvexHull);
1002 }
1003
1004 // Done with the base mesh
1005 baseMesh.Dereference(physicsScene);
1006
1007 retConvexHull.physShapeInfo = convexShape;
1008 }
1009 }
1010 return retConvexHull;
1011 }
1012 public override BSShape GetReference(BSScene physicsScene, BSPhysObject prim)
1013 {
1014 // Calling this reference means we want another handle to an existing shape
1015 // (usually linksets) so return this copy.
1016 IncrementReference();
1017 return this;
1018 }
1019 // Dereferencing a compound shape releases the hold on all the child shapes.
1020 public override void Dereference(BSScene physicsScene)
1021 {
1022 lock (ConvexHulls)
1023 {
1024 this.DecrementReference();
1025 physicsScene.DetailLog("{0},BSShapeConvexHull.Dereference,shape={1}", BSScene.DetailLogZero, this);
1026 // TODO: schedule aging and destruction of unused meshes.
1027 }
1028 }
1029 // Loop through all the known hulls and return the description based on the physical address.
1030 public static bool TryGetHullByPtr(BulletShape pShape, out BSShapeConvexHull outHull)
1031 {
1032 bool ret = false;
1033 BSShapeConvexHull foundDesc = null;
1034 lock (ConvexHulls)
1035 {
1036 foreach (BSShapeConvexHull sh in ConvexHulls.Values)
1037 {
1038 if (sh.physShapeInfo.ReferenceSame(pShape))
1039 {
1040 foundDesc = sh;
1041 ret = true;
1042 break;
1043 }
1044
1045 }
1046 }
1047 outHull = foundDesc;
1048 return ret;
215 } 1049 }
216 public override void Dereference(BSScene physicsScene) { }
217} 1050}
1051// ============================================================================================================
1052public class BSShapeGImpact : BSShape
1053{
1054 private static string LogHeader = "[BULLETSIM SHAPE GIMPACT]";
1055 public static Dictionary<System.UInt64, BSShapeGImpact> GImpacts = new Dictionary<System.UInt64, BSShapeGImpact>();
1056
1057 public BSShapeGImpact(BulletShape pShape) : base(pShape)
1058 {
1059 }
1060 public static BSShape GetReference(BSScene physicsScene, bool forceRebuild, BSPhysObject prim)
1061 {
1062 float lod;
1063 System.UInt64 newMeshKey = BSShape.ComputeShapeKey(prim.Size, prim.BaseShape, out lod);
1064
1065 physicsScene.DetailLog("{0},BSShapeGImpact,getReference,newKey={1},size={2},lod={3}",
1066 prim.LocalID, newMeshKey.ToString("X"), prim.Size, lod);
1067
1068 BSShapeGImpact retGImpact = null;
1069 lock (GImpacts)
1070 {
1071 if (GImpacts.TryGetValue(newMeshKey, out retGImpact))
1072 {
1073 // The mesh has already been created. Return a new reference to same.
1074 retGImpact.IncrementReference();
1075 }
1076 else
1077 {
1078 retGImpact = new BSShapeGImpact(new BulletShape());
1079 BulletShape newShape = retGImpact.CreatePhysicalGImpact(physicsScene, prim, newMeshKey, prim.BaseShape, prim.Size, lod);
218 1080
1081 // Check to see if mesh was created (might require an asset).
1082 newShape = VerifyMeshCreated(physicsScene, newShape, prim);
1083 newShape.shapeKey = newMeshKey;
1084 if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
1085 {
1086 // If a mesh was what was created, remember the built shape for later sharing.
1087 // Also note that if meshing failed we put it in the mesh list as there is nothing else to do about the mesh.
1088 GImpacts.Add(newMeshKey, retGImpact);
1089 }
1090
1091 retGImpact.physShapeInfo = newShape;
1092 }
1093 }
1094 return retGImpact;
1095 }
1096
1097 private BulletShape CreatePhysicalGImpact(BSScene physicsScene, BSPhysObject prim, System.UInt64 newMeshKey,
1098 PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
1099 {
1100 return BSShapeMesh.CreatePhysicalMeshShape(physicsScene, prim, newMeshKey, pbs, size, lod,
1101 (w, iC, i, vC, v) => physicsScene.PE.CreateGImpactShape(w, iC, i, vC, v) );
1102 }
1103
1104 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim)
1105 {
1106 BSShape ret = null;
1107 // If the underlying shape is native, the actual shape has not been build (waiting for asset)
1108 // and we must create a copy of the native shape since they are never shared.
1109 if (physShapeInfo.HasPhysicalShape && physShapeInfo.isNativeShape)
1110 {
1111 // TODO: decide when the native shapes should be freed. Check in Dereference?
1112 ret = BSShapeNative.GetReference(pPhysicsScene, pPrim, BSPhysicsShapeType.SHAPE_BOX, FixedShapeKey.KEY_BOX);
1113 }
1114 else
1115 {
1116 // Another reference to this shape is just counted.
1117 IncrementReference();
1118 ret = this;
1119 }
1120 return ret;
1121 }
1122 // Dereferencing a compound shape releases the hold on all the child shapes.
1123 public override void Dereference(BSScene physicsScene)
1124 {
1125 lock (GImpacts)
1126 {
1127 this.DecrementReference();
1128 physicsScene.DetailLog("{0},BSShapeGImpact.Dereference,shape={1}", BSScene.DetailLogZero, this);
1129 // TODO: schedule aging and destruction of unused meshes.
1130 }
1131 }
1132 // Loop through all the known hulls and return the description based on the physical address.
1133 public static bool TryGetGImpactByPtr(BulletShape pShape, out BSShapeGImpact outHull)
1134 {
1135 bool ret = false;
1136 BSShapeGImpact foundDesc = null;
1137 lock (GImpacts)
1138 {
1139 foreach (BSShapeGImpact sh in GImpacts.Values)
1140 {
1141 if (sh.physShapeInfo.ReferenceSame(pShape))
1142 {
1143 foundDesc = sh;
1144 ret = true;
1145 break;
1146 }
1147
1148 }
1149 }
1150 outHull = foundDesc;
1151 return ret;
1152 }
1153}
1154
1155// ============================================================================================================
219public class BSShapeAvatar : BSShape 1156public class BSShapeAvatar : BSShape
220{ 1157{
221 private static string LogHeader = "[BULLETSIM SHAPE AVATAR]"; 1158 private static string LogHeader = "[BULLETSIM SHAPE AVATAR]";
222 public BSShapeAvatar() : base() 1159 public BSShapeAvatar() : base()
223 { 1160 {
224 } 1161 }
225 public static BSShape GetReference(BSPhysObject prim) 1162 public static BSShape GetReference(BSPhysObject prim)
226 { 1163 {
1164 return new BSShapeNull();
1165 }
1166 public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim)
1167 {
227 return new BSShapeNull(); 1168 return new BSShapeNull();
228 } 1169 }
229 public override void Dereference(BSScene physicsScene) { } 1170 public override void Dereference(BSScene physicsScene) { }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainHeightmap.cs b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainHeightmap.cs
index e4fecc3..c7deb4e 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainHeightmap.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainHeightmap.cs
@@ -68,7 +68,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
68 68
69 // This minCoords and maxCoords passed in give the size of the terrain (min and max Z 69 // This minCoords and maxCoords passed in give the size of the terrain (min and max Z
70 // are the high and low points of the heightmap). 70 // are the high and low points of the heightmap).
71 public BSTerrainHeightmap(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap, 71 public BSTerrainHeightmap(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap,
72 Vector3 minCoords, Vector3 maxCoords) 72 Vector3 minCoords, Vector3 maxCoords)
73 : base(physicsScene, regionBase, id) 73 : base(physicsScene, regionBase, id)
74 { 74 {
@@ -92,7 +92,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
92 private void BuildHeightmapTerrain() 92 private void BuildHeightmapTerrain()
93 { 93 {
94 // Create the terrain shape from the mapInfo 94 // Create the terrain shape from the mapInfo
95 m_mapInfo.terrainShape = PhysicsScene.PE.CreateTerrainShape( m_mapInfo.ID, 95 m_mapInfo.terrainShape = m_physicsScene.PE.CreateTerrainShape( m_mapInfo.ID,
96 new Vector3(m_mapInfo.sizeX, m_mapInfo.sizeY, 0), m_mapInfo.minZ, m_mapInfo.maxZ, 96 new Vector3(m_mapInfo.sizeX, m_mapInfo.sizeY, 0), m_mapInfo.minZ, m_mapInfo.maxZ,
97 m_mapInfo.heightMap, 1f, BSParam.TerrainCollisionMargin); 97 m_mapInfo.heightMap, 1f, BSParam.TerrainCollisionMargin);
98 98
@@ -103,26 +103,26 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
103 centerPos.Y = m_mapInfo.minCoords.Y + (m_mapInfo.sizeY / 2f); 103 centerPos.Y = m_mapInfo.minCoords.Y + (m_mapInfo.sizeY / 2f);
104 centerPos.Z = m_mapInfo.minZ + ((m_mapInfo.maxZ - m_mapInfo.minZ) / 2f); 104 centerPos.Z = m_mapInfo.minZ + ((m_mapInfo.maxZ - m_mapInfo.minZ) / 2f);
105 105
106 m_mapInfo.terrainBody = PhysicsScene.PE.CreateBodyWithDefaultMotionState(m_mapInfo.terrainShape, 106 m_mapInfo.terrainBody = m_physicsScene.PE.CreateBodyWithDefaultMotionState(m_mapInfo.terrainShape,
107 m_mapInfo.ID, centerPos, Quaternion.Identity); 107 m_mapInfo.ID, centerPos, Quaternion.Identity);
108 108
109 // Set current terrain attributes 109 // Set current terrain attributes
110 PhysicsScene.PE.SetFriction(m_mapInfo.terrainBody, BSParam.TerrainFriction); 110 m_physicsScene.PE.SetFriction(m_mapInfo.terrainBody, BSParam.TerrainFriction);
111 PhysicsScene.PE.SetHitFraction(m_mapInfo.terrainBody, BSParam.TerrainHitFraction); 111 m_physicsScene.PE.SetHitFraction(m_mapInfo.terrainBody, BSParam.TerrainHitFraction);
112 PhysicsScene.PE.SetRestitution(m_mapInfo.terrainBody, BSParam.TerrainRestitution); 112 m_physicsScene.PE.SetRestitution(m_mapInfo.terrainBody, BSParam.TerrainRestitution);
113 PhysicsScene.PE.SetCollisionFlags(m_mapInfo.terrainBody, CollisionFlags.CF_STATIC_OBJECT); 113 m_physicsScene.PE.SetCollisionFlags(m_mapInfo.terrainBody, CollisionFlags.CF_STATIC_OBJECT);
114 114
115 // Return the new terrain to the world of physical objects 115 // Return the new terrain to the world of physical objects
116 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, m_mapInfo.terrainBody); 116 m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, m_mapInfo.terrainBody);
117 117
118 // redo its bounding box now that it is in the world 118 // redo its bounding box now that it is in the world
119 PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, m_mapInfo.terrainBody); 119 m_physicsScene.PE.UpdateSingleAabb(m_physicsScene.World, m_mapInfo.terrainBody);
120 120
121 m_mapInfo.terrainBody.collisionType = CollisionType.Terrain; 121 m_mapInfo.terrainBody.collisionType = CollisionType.Terrain;
122 m_mapInfo.terrainBody.ApplyCollisionMask(PhysicsScene); 122 m_mapInfo.terrainBody.ApplyCollisionMask(m_physicsScene);
123 123
124 // Make it so the terrain will not move or be considered for movement. 124 // Make it so the terrain will not move or be considered for movement.
125 PhysicsScene.PE.ForceActivationState(m_mapInfo.terrainBody, ActivationState.DISABLE_SIMULATION); 125 m_physicsScene.PE.ForceActivationState(m_mapInfo.terrainBody, ActivationState.DISABLE_SIMULATION);
126 126
127 return; 127 return;
128 } 128 }
@@ -134,9 +134,9 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
134 { 134 {
135 if (m_mapInfo.terrainBody.HasPhysicalBody) 135 if (m_mapInfo.terrainBody.HasPhysicalBody)
136 { 136 {
137 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, m_mapInfo.terrainBody); 137 m_physicsScene.PE.RemoveObjectFromWorld(m_physicsScene.World, m_mapInfo.terrainBody);
138 // Frees both the body and the shape. 138 // Frees both the body and the shape.
139 PhysicsScene.PE.DestroyObject(PhysicsScene.World, m_mapInfo.terrainBody); 139 m_physicsScene.PE.DestroyObject(m_physicsScene.World, m_mapInfo.terrainBody);
140 } 140 }
141 } 141 }
142 m_mapInfo = null; 142 m_mapInfo = null;
@@ -155,7 +155,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
155 catch 155 catch
156 { 156 {
157 // Sometimes they give us wonky values of X and Y. Give a warning and return something. 157 // Sometimes they give us wonky values of X and Y. Give a warning and return something.
158 PhysicsScene.Logger.WarnFormat("{0} Bad request for terrain height. terrainBase={1}, pos={2}", 158 m_physicsScene.Logger.WarnFormat("{0} Bad request for terrain height. terrainBase={1}, pos={2}",
159 LogHeader, m_mapInfo.terrainRegionBase, pos); 159 LogHeader, m_mapInfo.terrainRegionBase, pos);
160 ret = BSTerrainManager.HEIGHT_GETHEIGHT_RET; 160 ret = BSTerrainManager.HEIGHT_GETHEIGHT_RET;
161 } 161 }
@@ -165,7 +165,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
165 // The passed position is relative to the base of the region. 165 // The passed position is relative to the base of the region.
166 public override float GetWaterLevelAtXYZ(Vector3 pos) 166 public override float GetWaterLevelAtXYZ(Vector3 pos)
167 { 167 {
168 return PhysicsScene.SimpleWaterLevel; 168 return m_physicsScene.SimpleWaterLevel;
169 } 169 }
170} 170}
171} 171}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs
index b2fb835..c4807c4 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs
@@ -50,14 +50,14 @@ public abstract class BSTerrainPhys : IDisposable
50 Mesh = 1 50 Mesh = 1
51 } 51 }
52 52
53 public BSScene PhysicsScene { get; private set; } 53 protected BSScene m_physicsScene { get; private set; }
54 // Base of the region in world coordinates. Coordinates inside the region are relative to this. 54 // Base of the region in world coordinates. Coordinates inside the region are relative to this.
55 public Vector3 TerrainBase { get; private set; } 55 public Vector3 TerrainBase { get; private set; }
56 public uint ID { get; private set; } 56 public uint ID { get; private set; }
57 57
58 public BSTerrainPhys(BSScene physicsScene, Vector3 regionBase, uint id) 58 public BSTerrainPhys(BSScene physicsScene, Vector3 regionBase, uint id)
59 { 59 {
60 PhysicsScene = physicsScene; 60 m_physicsScene = physicsScene;
61 TerrainBase = regionBase; 61 TerrainBase = regionBase;
62 ID = id; 62 ID = id;
63 } 63 }
@@ -86,7 +86,7 @@ public sealed class BSTerrainManager : IDisposable
86 public Vector3 DefaultRegionSize = new Vector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionHeight); 86 public Vector3 DefaultRegionSize = new Vector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionHeight);
87 87
88 // The scene that I am part of 88 // The scene that I am part of
89 private BSScene PhysicsScene { get; set; } 89 private BSScene m_physicsScene { get; set; }
90 90
91 // The ground plane created to keep thing from falling to infinity. 91 // The ground plane created to keep thing from falling to infinity.
92 private BulletBody m_groundPlane; 92 private BulletBody m_groundPlane;
@@ -113,7 +113,7 @@ public sealed class BSTerrainManager : IDisposable
113 113
114 public BSTerrainManager(BSScene physicsScene) 114 public BSTerrainManager(BSScene physicsScene)
115 { 115 {
116 PhysicsScene = physicsScene; 116 m_physicsScene = physicsScene;
117 m_terrains = new Dictionary<Vector3,BSTerrainPhys>(); 117 m_terrains = new Dictionary<Vector3,BSTerrainPhys>();
118 118
119 // Assume one region of default size 119 // Assume one region of default size
@@ -132,21 +132,21 @@ public sealed class BSTerrainManager : IDisposable
132 // safe to call Bullet in real time. We hope no one is moving prims around yet. 132 // safe to call Bullet in real time. We hope no one is moving prims around yet.
133 public void CreateInitialGroundPlaneAndTerrain() 133 public void CreateInitialGroundPlaneAndTerrain()
134 { 134 {
135 DetailLog("{0},BSTerrainManager.CreateInitialGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, PhysicsScene.RegionName); 135 DetailLog("{0},BSTerrainManager.CreateInitialGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, m_physicsScene.RegionName);
136 // The ground plane is here to catch things that are trying to drop to negative infinity 136 // The ground plane is here to catch things that are trying to drop to negative infinity
137 BulletShape groundPlaneShape = PhysicsScene.PE.CreateGroundPlaneShape(BSScene.GROUNDPLANE_ID, 1f, BSParam.TerrainCollisionMargin); 137 BulletShape groundPlaneShape = m_physicsScene.PE.CreateGroundPlaneShape(BSScene.GROUNDPLANE_ID, 1f, BSParam.TerrainCollisionMargin);
138 m_groundPlane = PhysicsScene.PE.CreateBodyWithDefaultMotionState(groundPlaneShape, 138 m_groundPlane = m_physicsScene.PE.CreateBodyWithDefaultMotionState(groundPlaneShape,
139 BSScene.GROUNDPLANE_ID, Vector3.Zero, Quaternion.Identity); 139 BSScene.GROUNDPLANE_ID, Vector3.Zero, Quaternion.Identity);
140 140
141 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, m_groundPlane); 141 m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, m_groundPlane);
142 PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, m_groundPlane); 142 m_physicsScene.PE.UpdateSingleAabb(m_physicsScene.World, m_groundPlane);
143 // Ground plane does not move 143 // Ground plane does not move
144 PhysicsScene.PE.ForceActivationState(m_groundPlane, ActivationState.DISABLE_SIMULATION); 144 m_physicsScene.PE.ForceActivationState(m_groundPlane, ActivationState.DISABLE_SIMULATION);
145 // Everything collides with the ground plane. 145 // Everything collides with the ground plane.
146 m_groundPlane.collisionType = CollisionType.Groundplane; 146 m_groundPlane.collisionType = CollisionType.Groundplane;
147 m_groundPlane.ApplyCollisionMask(PhysicsScene); 147 m_groundPlane.ApplyCollisionMask(m_physicsScene);
148 148
149 BSTerrainPhys initialTerrain = new BSTerrainHeightmap(PhysicsScene, Vector3.Zero, BSScene.TERRAIN_ID, DefaultRegionSize); 149 BSTerrainPhys initialTerrain = new BSTerrainHeightmap(m_physicsScene, Vector3.Zero, BSScene.TERRAIN_ID, DefaultRegionSize);
150 lock (m_terrains) 150 lock (m_terrains)
151 { 151 {
152 // Build an initial terrain and put it in the world. This quickly gets replaced by the real region terrain. 152 // Build an initial terrain and put it in the world. This quickly gets replaced by the real region terrain.
@@ -157,12 +157,12 @@ public sealed class BSTerrainManager : IDisposable
157 // Release all the terrain structures we might have allocated 157 // Release all the terrain structures we might have allocated
158 public void ReleaseGroundPlaneAndTerrain() 158 public void ReleaseGroundPlaneAndTerrain()
159 { 159 {
160 DetailLog("{0},BSTerrainManager.ReleaseGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, PhysicsScene.RegionName); 160 DetailLog("{0},BSTerrainManager.ReleaseGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, m_physicsScene.RegionName);
161 if (m_groundPlane.HasPhysicalBody) 161 if (m_groundPlane.HasPhysicalBody)
162 { 162 {
163 if (PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, m_groundPlane)) 163 if (m_physicsScene.PE.RemoveObjectFromWorld(m_physicsScene.World, m_groundPlane))
164 { 164 {
165 PhysicsScene.PE.DestroyObject(PhysicsScene.World, m_groundPlane); 165 m_physicsScene.PE.DestroyObject(m_physicsScene.World, m_groundPlane);
166 } 166 }
167 m_groundPlane.Clear(); 167 m_groundPlane.Clear();
168 } 168 }
@@ -188,7 +188,7 @@ public sealed class BSTerrainManager : IDisposable
188 float[] localHeightMap = heightMap; 188 float[] localHeightMap = heightMap;
189 // If there are multiple requests for changes to the same terrain between ticks, 189 // If there are multiple requests for changes to the same terrain between ticks,
190 // only do that last one. 190 // only do that last one.
191 PhysicsScene.PostTaintObject("TerrainManager.SetTerrain-"+ m_worldOffset.ToString(), 0, delegate() 191 m_physicsScene.PostTaintObject("TerrainManager.SetTerrain-"+ m_worldOffset.ToString(), 0, delegate()
192 { 192 {
193 if (m_worldOffset != Vector3.Zero && MegaRegionParentPhysicsScene != null) 193 if (m_worldOffset != Vector3.Zero && MegaRegionParentPhysicsScene != null)
194 { 194 {
@@ -199,15 +199,8 @@ public sealed class BSTerrainManager : IDisposable
199 if (MegaRegionParentPhysicsScene is BSScene) 199 if (MegaRegionParentPhysicsScene is BSScene)
200 { 200 {
201 DetailLog("{0},SetTerrain.ToParent,offset={1},worldMax={2}", BSScene.DetailLogZero, m_worldOffset, m_worldMax); 201 DetailLog("{0},SetTerrain.ToParent,offset={1},worldMax={2}", BSScene.DetailLogZero, m_worldOffset, m_worldMax);
202 // This looks really odd but this region is passing its terrain to its mega-region root region 202 ((BSScene)MegaRegionParentPhysicsScene).TerrainManager.AddMegaRegionChildTerrain(
203 // and the creation of the terrain must happen on the root region's taint thread and not 203 BSScene.CHILDTERRAIN_ID, localHeightMap, m_worldOffset, m_worldOffset + DefaultRegionSize);
204 // my taint thread.
205 ((BSScene)MegaRegionParentPhysicsScene).PostTaintObject("TerrainManager.SetTerrain.Mega-" + m_worldOffset.ToString(), 0, delegate()
206 {
207 ((BSScene)MegaRegionParentPhysicsScene).TerrainManager.UpdateTerrain(
208 BSScene.CHILDTERRAIN_ID, localHeightMap,
209 m_worldOffset, m_worldOffset + DefaultRegionSize, true /* inTaintTime */);
210 });
211 } 204 }
212 } 205 }
213 else 206 else
@@ -215,12 +208,23 @@ public sealed class BSTerrainManager : IDisposable
215 // If not doing the mega-prim thing, just change the terrain 208 // If not doing the mega-prim thing, just change the terrain
216 DetailLog("{0},SetTerrain.Existing", BSScene.DetailLogZero); 209 DetailLog("{0},SetTerrain.Existing", BSScene.DetailLogZero);
217 210
218 UpdateTerrain(BSScene.TERRAIN_ID, localHeightMap, 211 UpdateTerrain(BSScene.TERRAIN_ID, localHeightMap, m_worldOffset, m_worldOffset + DefaultRegionSize);
219 m_worldOffset, m_worldOffset + DefaultRegionSize, true /* inTaintTime */);
220 } 212 }
221 }); 213 });
222 } 214 }
223 215
216 // Another region is calling this region and passing a terrain.
217 // A region that is not the mega-region root will pass its terrain to the root region so the root region
218 // physics engine will have all the terrains.
219 private void AddMegaRegionChildTerrain(uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords)
220 {
221 // Since we are called by another region's thread, the action must be rescheduled onto our processing thread.
222 m_physicsScene.PostTaintObject("TerrainManager.AddMegaRegionChild" + minCoords.ToString(), id, delegate()
223 {
224 UpdateTerrain(id, heightMap, minCoords, maxCoords);
225 });
226 }
227
224 // If called for terrain has has not been previously allocated, a new terrain will be built 228 // If called for terrain has has not been previously allocated, a new terrain will be built
225 // based on the passed information. The 'id' should be either the terrain id or 229 // based on the passed information. The 'id' should be either the terrain id or
226 // BSScene.CHILDTERRAIN_ID. If the latter, a new child terrain ID will be allocated and used. 230 // BSScene.CHILDTERRAIN_ID. If the latter, a new child terrain ID will be allocated and used.
@@ -230,11 +234,10 @@ public sealed class BSTerrainManager : IDisposable
230 // This call is most often used to update the heightMap and parameters of the terrain. 234 // This call is most often used to update the heightMap and parameters of the terrain.
231 // (The above does suggest that some simplification/refactoring is in order.) 235 // (The above does suggest that some simplification/refactoring is in order.)
232 // Called during taint-time. 236 // Called during taint-time.
233 private void UpdateTerrain(uint id, float[] heightMap, 237 private void UpdateTerrain(uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords)
234 Vector3 minCoords, Vector3 maxCoords, bool inTaintTime)
235 { 238 {
236 DetailLog("{0},BSTerrainManager.UpdateTerrain,call,id={1},minC={2},maxC={3},inTaintTime={4}", 239 DetailLog("{0},BSTerrainManager.UpdateTerrain,call,id={1},minC={2},maxC={3}",
237 BSScene.DetailLogZero, id, minCoords, maxCoords, inTaintTime); 240 BSScene.DetailLogZero, id, minCoords, maxCoords);
238 241
239 // Find high and low points of passed heightmap. 242 // Find high and low points of passed heightmap.
240 // The min and max passed in is usually the area objects can be in (maximum 243 // The min and max passed in is usually the area objects can be in (maximum
@@ -303,7 +306,7 @@ public sealed class BSTerrainManager : IDisposable
303 newTerrainID = ++m_terrainCount; 306 newTerrainID = ++m_terrainCount;
304 307
305 DetailLog("{0},BSTerrainManager.UpdateTerrain:NewTerrain,taint,newID={1},minCoord={2},maxCoord={3}", 308 DetailLog("{0},BSTerrainManager.UpdateTerrain:NewTerrain,taint,newID={1},minCoord={2},maxCoord={3}",
306 BSScene.DetailLogZero, newTerrainID, minCoords, minCoords); 309 BSScene.DetailLogZero, newTerrainID, minCoords, maxCoords);
307 BSTerrainPhys newTerrainPhys = BuildPhysicalTerrain(terrainRegionBase, id, heightMap, minCoords, maxCoords); 310 BSTerrainPhys newTerrainPhys = BuildPhysicalTerrain(terrainRegionBase, id, heightMap, minCoords, maxCoords);
308 m_terrains.Add(terrainRegionBase, newTerrainPhys); 311 m_terrains.Add(terrainRegionBase, newTerrainPhys);
309 312
@@ -315,26 +318,26 @@ public sealed class BSTerrainManager : IDisposable
315 // TODO: redo terrain implementation selection to allow other base types than heightMap. 318 // TODO: redo terrain implementation selection to allow other base types than heightMap.
316 private BSTerrainPhys BuildPhysicalTerrain(Vector3 terrainRegionBase, uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords) 319 private BSTerrainPhys BuildPhysicalTerrain(Vector3 terrainRegionBase, uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords)
317 { 320 {
318 PhysicsScene.Logger.DebugFormat("{0} Terrain for {1}/{2} created with {3}", 321 m_physicsScene.Logger.DebugFormat("{0} Terrain for {1}/{2} created with {3}",
319 LogHeader, PhysicsScene.RegionName, terrainRegionBase, 322 LogHeader, m_physicsScene.RegionName, terrainRegionBase,
320 (BSTerrainPhys.TerrainImplementation)BSParam.TerrainImplementation); 323 (BSTerrainPhys.TerrainImplementation)BSParam.TerrainImplementation);
321 BSTerrainPhys newTerrainPhys = null; 324 BSTerrainPhys newTerrainPhys = null;
322 switch ((int)BSParam.TerrainImplementation) 325 switch ((int)BSParam.TerrainImplementation)
323 { 326 {
324 case (int)BSTerrainPhys.TerrainImplementation.Heightmap: 327 case (int)BSTerrainPhys.TerrainImplementation.Heightmap:
325 newTerrainPhys = new BSTerrainHeightmap(PhysicsScene, terrainRegionBase, id, 328 newTerrainPhys = new BSTerrainHeightmap(m_physicsScene, terrainRegionBase, id,
326 heightMap, minCoords, maxCoords); 329 heightMap, minCoords, maxCoords);
327 break; 330 break;
328 case (int)BSTerrainPhys.TerrainImplementation.Mesh: 331 case (int)BSTerrainPhys.TerrainImplementation.Mesh:
329 newTerrainPhys = new BSTerrainMesh(PhysicsScene, terrainRegionBase, id, 332 newTerrainPhys = new BSTerrainMesh(m_physicsScene, terrainRegionBase, id,
330 heightMap, minCoords, maxCoords); 333 heightMap, minCoords, maxCoords);
331 break; 334 break;
332 default: 335 default:
333 PhysicsScene.Logger.ErrorFormat("{0} Bad terrain implementation specified. Type={1}/{2},Region={3}/{4}", 336 m_physicsScene.Logger.ErrorFormat("{0} Bad terrain implementation specified. Type={1}/{2},Region={3}/{4}",
334 LogHeader, 337 LogHeader,
335 (int)BSParam.TerrainImplementation, 338 (int)BSParam.TerrainImplementation,
336 BSParam.TerrainImplementation, 339 BSParam.TerrainImplementation,
337 PhysicsScene.RegionName, terrainRegionBase); 340 m_physicsScene.RegionName, terrainRegionBase);
338 break; 341 break;
339 } 342 }
340 return newTerrainPhys; 343 return newTerrainPhys;
@@ -426,8 +429,8 @@ public sealed class BSTerrainManager : IDisposable
426 } 429 }
427 else 430 else
428 { 431 {
429 PhysicsScene.Logger.ErrorFormat("{0} GetTerrainHeightAtXY: terrain not found: region={1}, x={2}, y={3}", 432 m_physicsScene.Logger.ErrorFormat("{0} GetTerrainHeightAtXY: terrain not found: region={1}, x={2}, y={3}",
430 LogHeader, PhysicsScene.RegionName, tX, tY); 433 LogHeader, m_physicsScene.RegionName, tX, tY);
431 DetailLog("{0},BSTerrainManager.GetTerrainHeightAtXYZ,terrainNotFound,pos={1},base={2}", 434 DetailLog("{0},BSTerrainManager.GetTerrainHeightAtXYZ,terrainNotFound,pos={1},base={2}",
432 BSScene.DetailLogZero, pos, terrainBaseXYZ); 435 BSScene.DetailLogZero, pos, terrainBaseXYZ);
433 } 436 }
@@ -448,8 +451,8 @@ public sealed class BSTerrainManager : IDisposable
448 } 451 }
449 else 452 else
450 { 453 {
451 PhysicsScene.Logger.ErrorFormat("{0} GetWaterHeightAtXY: terrain not found: pos={1}, terrainBase={2}, height={3}", 454 m_physicsScene.Logger.ErrorFormat("{0} GetWaterHeightAtXY: terrain not found: pos={1}, terrainBase={2}, height={3}",
452 LogHeader, PhysicsScene.RegionName, pos, terrainBaseXYZ, ret); 455 LogHeader, m_physicsScene.RegionName, pos, terrainBaseXYZ, ret);
453 } 456 }
454 return ret; 457 return ret;
455 } 458 }
@@ -561,7 +564,7 @@ public sealed class BSTerrainManager : IDisposable
561 564
562 private void DetailLog(string msg, params Object[] args) 565 private void DetailLog(string msg, params Object[] args)
563 { 566 {
564 PhysicsScene.PhysicsLogging.Write(msg, args); 567 m_physicsScene.PhysicsLogging.Write(msg, args);
565 } 568 }
566} 569}
567} 570}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainMesh.cs b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainMesh.cs
index 2ce1513..e4ca098 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainMesh.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainMesh.cs
@@ -51,7 +51,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
51 BulletShape m_terrainShape; 51 BulletShape m_terrainShape;
52 BulletBody m_terrainBody; 52 BulletBody m_terrainBody;
53 53
54 public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, Vector3 regionSize) 54 public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, Vector3 regionSize)
55 : base(physicsScene, regionBase, id) 55 : base(physicsScene, regionBase, id)
56 { 56 {
57 } 57 }
@@ -62,7 +62,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
62 } 62 }
63 63
64 // Create terrain mesh from a heightmap. 64 // Create terrain mesh from a heightmap.
65 public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap, 65 public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap,
66 Vector3 minCoords, Vector3 maxCoords) 66 Vector3 minCoords, Vector3 maxCoords)
67 : base(physicsScene, regionBase, id) 67 : base(physicsScene, regionBase, id)
68 { 68 {
@@ -80,7 +80,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
80 if (BSParam.TerrainMeshMagnification == 1) 80 if (BSParam.TerrainMeshMagnification == 1)
81 { 81 {
82 // If a magnification of one, use the old routine that is tried and true. 82 // If a magnification of one, use the old routine that is tried and true.
83 meshCreationSuccess = BSTerrainMesh.ConvertHeightmapToMesh(PhysicsScene, 83 meshCreationSuccess = BSTerrainMesh.ConvertHeightmapToMesh(m_physicsScene,
84 initialMap, m_sizeX, m_sizeY, // input size 84 initialMap, m_sizeX, m_sizeY, // input size
85 Vector3.Zero, // base for mesh 85 Vector3.Zero, // base for mesh
86 out indicesCount, out indices, out verticesCount, out vertices); 86 out indicesCount, out indices, out verticesCount, out vertices);
@@ -88,7 +88,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
88 else 88 else
89 { 89 {
90 // Other magnifications use the newer routine 90 // Other magnifications use the newer routine
91 meshCreationSuccess = BSTerrainMesh.ConvertHeightmapToMesh2(PhysicsScene, 91 meshCreationSuccess = BSTerrainMesh.ConvertHeightmapToMesh2(m_physicsScene,
92 initialMap, m_sizeX, m_sizeY, // input size 92 initialMap, m_sizeX, m_sizeY, // input size
93 BSParam.TerrainMeshMagnification, 93 BSParam.TerrainMeshMagnification,
94 physicsScene.TerrainManager.DefaultRegionSize, 94 physicsScene.TerrainManager.DefaultRegionSize,
@@ -98,21 +98,21 @@ public sealed class BSTerrainMesh : BSTerrainPhys
98 if (!meshCreationSuccess) 98 if (!meshCreationSuccess)
99 { 99 {
100 // DISASTER!! 100 // DISASTER!!
101 PhysicsScene.DetailLog("{0},BSTerrainMesh.create,failedConversionOfHeightmap,id={1}", BSScene.DetailLogZero, ID); 101 m_physicsScene.DetailLog("{0},BSTerrainMesh.create,failedConversionOfHeightmap,id={1}", BSScene.DetailLogZero, ID);
102 PhysicsScene.Logger.ErrorFormat("{0} Failed conversion of heightmap to mesh! base={1}", LogHeader, TerrainBase); 102 m_physicsScene.Logger.ErrorFormat("{0} Failed conversion of heightmap to mesh! base={1}", LogHeader, TerrainBase);
103 // Something is very messed up and a crash is in our future. 103 // Something is very messed up and a crash is in our future.
104 return; 104 return;
105 } 105 }
106 106
107 PhysicsScene.DetailLog("{0},BSTerrainMesh.create,meshed,id={1},indices={2},indSz={3},vertices={4},vertSz={5}", 107 m_physicsScene.DetailLog("{0},BSTerrainMesh.create,meshed,id={1},indices={2},indSz={3},vertices={4},vertSz={5}",
108 BSScene.DetailLogZero, ID, indicesCount, indices.Length, verticesCount, vertices.Length); 108 BSScene.DetailLogZero, ID, indicesCount, indices.Length, verticesCount, vertices.Length);
109 109
110 m_terrainShape = PhysicsScene.PE.CreateMeshShape(PhysicsScene.World, indicesCount, indices, verticesCount, vertices); 110 m_terrainShape = m_physicsScene.PE.CreateMeshShape(m_physicsScene.World, indicesCount, indices, verticesCount, vertices);
111 if (!m_terrainShape.HasPhysicalShape) 111 if (!m_terrainShape.HasPhysicalShape)
112 { 112 {
113 // DISASTER!! 113 // DISASTER!!
114 PhysicsScene.DetailLog("{0},BSTerrainMesh.create,failedCreationOfShape,id={1}", BSScene.DetailLogZero, ID); 114 m_physicsScene.DetailLog("{0},BSTerrainMesh.create,failedCreationOfShape,id={1}", BSScene.DetailLogZero, ID);
115 PhysicsScene.Logger.ErrorFormat("{0} Failed creation of terrain mesh! base={1}", LogHeader, TerrainBase); 115 m_physicsScene.Logger.ErrorFormat("{0} Failed creation of terrain mesh! base={1}", LogHeader, TerrainBase);
116 // Something is very messed up and a crash is in our future. 116 // Something is very messed up and a crash is in our future.
117 return; 117 return;
118 } 118 }
@@ -120,52 +120,52 @@ public sealed class BSTerrainMesh : BSTerrainPhys
120 Vector3 pos = regionBase; 120 Vector3 pos = regionBase;
121 Quaternion rot = Quaternion.Identity; 121 Quaternion rot = Quaternion.Identity;
122 122
123 m_terrainBody = PhysicsScene.PE.CreateBodyWithDefaultMotionState(m_terrainShape, ID, pos, rot); 123 m_terrainBody = m_physicsScene.PE.CreateBodyWithDefaultMotionState(m_terrainShape, ID, pos, rot);
124 if (!m_terrainBody.HasPhysicalBody) 124 if (!m_terrainBody.HasPhysicalBody)
125 { 125 {
126 // DISASTER!! 126 // DISASTER!!
127 PhysicsScene.Logger.ErrorFormat("{0} Failed creation of terrain body! base={1}", LogHeader, TerrainBase); 127 m_physicsScene.Logger.ErrorFormat("{0} Failed creation of terrain body! base={1}", LogHeader, TerrainBase);
128 // Something is very messed up and a crash is in our future. 128 // Something is very messed up and a crash is in our future.
129 return; 129 return;
130 } 130 }
131 physicsScene.PE.SetShapeCollisionMargin(m_terrainShape, BSParam.TerrainCollisionMargin); 131 physicsScene.PE.SetShapeCollisionMargin(m_terrainShape, BSParam.TerrainCollisionMargin);
132 132
133 // Set current terrain attributes 133 // Set current terrain attributes
134 PhysicsScene.PE.SetFriction(m_terrainBody, BSParam.TerrainFriction); 134 m_physicsScene.PE.SetFriction(m_terrainBody, BSParam.TerrainFriction);
135 PhysicsScene.PE.SetHitFraction(m_terrainBody, BSParam.TerrainHitFraction); 135 m_physicsScene.PE.SetHitFraction(m_terrainBody, BSParam.TerrainHitFraction);
136 PhysicsScene.PE.SetRestitution(m_terrainBody, BSParam.TerrainRestitution); 136 m_physicsScene.PE.SetRestitution(m_terrainBody, BSParam.TerrainRestitution);
137 PhysicsScene.PE.SetContactProcessingThreshold(m_terrainBody, BSParam.TerrainContactProcessingThreshold); 137 m_physicsScene.PE.SetContactProcessingThreshold(m_terrainBody, BSParam.TerrainContactProcessingThreshold);
138 PhysicsScene.PE.SetCollisionFlags(m_terrainBody, CollisionFlags.CF_STATIC_OBJECT); 138 m_physicsScene.PE.SetCollisionFlags(m_terrainBody, CollisionFlags.CF_STATIC_OBJECT);
139 139
140 // Static objects are not very massive. 140 // Static objects are not very massive.
141 PhysicsScene.PE.SetMassProps(m_terrainBody, 0f, Vector3.Zero); 141 m_physicsScene.PE.SetMassProps(m_terrainBody, 0f, Vector3.Zero);
142 142
143 // Put the new terrain to the world of physical objects 143 // Put the new terrain to the world of physical objects
144 PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, m_terrainBody); 144 m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, m_terrainBody);
145 145
146 // Redo its bounding box now that it is in the world 146 // Redo its bounding box now that it is in the world
147 PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, m_terrainBody); 147 m_physicsScene.PE.UpdateSingleAabb(m_physicsScene.World, m_terrainBody);
148 148
149 m_terrainBody.collisionType = CollisionType.Terrain; 149 m_terrainBody.collisionType = CollisionType.Terrain;
150 m_terrainBody.ApplyCollisionMask(PhysicsScene); 150 m_terrainBody.ApplyCollisionMask(m_physicsScene);
151 151
152 if (BSParam.UseSingleSidedMeshes) 152 if (BSParam.UseSingleSidedMeshes)
153 { 153 {
154 PhysicsScene.DetailLog("{0},BSTerrainMesh.settingCustomMaterial,id={1}", BSScene.DetailLogZero, id); 154 m_physicsScene.DetailLog("{0},BSTerrainMesh.settingCustomMaterial,id={1}", BSScene.DetailLogZero, id);
155 PhysicsScene.PE.AddToCollisionFlags(m_terrainBody, CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK); 155 m_physicsScene.PE.AddToCollisionFlags(m_terrainBody, CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK);
156 } 156 }
157 157
158 // Make it so the terrain will not move or be considered for movement. 158 // Make it so the terrain will not move or be considered for movement.
159 PhysicsScene.PE.ForceActivationState(m_terrainBody, ActivationState.DISABLE_SIMULATION); 159 m_physicsScene.PE.ForceActivationState(m_terrainBody, ActivationState.DISABLE_SIMULATION);
160 } 160 }
161 161
162 public override void Dispose() 162 public override void Dispose()
163 { 163 {
164 if (m_terrainBody.HasPhysicalBody) 164 if (m_terrainBody.HasPhysicalBody)
165 { 165 {
166 PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, m_terrainBody); 166 m_physicsScene.PE.RemoveObjectFromWorld(m_physicsScene.World, m_terrainBody);
167 // Frees both the body and the shape. 167 // Frees both the body and the shape.
168 PhysicsScene.PE.DestroyObject(PhysicsScene.World, m_terrainBody); 168 m_physicsScene.PE.DestroyObject(m_physicsScene.World, m_terrainBody);
169 m_terrainBody.Clear(); 169 m_terrainBody.Clear();
170 m_terrainShape.Clear(); 170 m_terrainShape.Clear();
171 } 171 }
@@ -185,7 +185,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
185 catch 185 catch
186 { 186 {
187 // Sometimes they give us wonky values of X and Y. Give a warning and return something. 187 // Sometimes they give us wonky values of X and Y. Give a warning and return something.
188 PhysicsScene.Logger.WarnFormat("{0} Bad request for terrain height. terrainBase={1}, pos={2}", 188 m_physicsScene.Logger.WarnFormat("{0} Bad request for terrain height. terrainBase={1}, pos={2}",
189 LogHeader, TerrainBase, pos); 189 LogHeader, TerrainBase, pos);
190 ret = BSTerrainManager.HEIGHT_GETHEIGHT_RET; 190 ret = BSTerrainManager.HEIGHT_GETHEIGHT_RET;
191 } 191 }
@@ -195,7 +195,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
195 // The passed position is relative to the base of the region. 195 // The passed position is relative to the base of the region.
196 public override float GetWaterLevelAtXYZ(Vector3 pos) 196 public override float GetWaterLevelAtXYZ(Vector3 pos)
197 { 197 {
198 return PhysicsScene.SimpleWaterLevel; 198 return m_physicsScene.SimpleWaterLevel;
199 } 199 }
200 200
201 // Convert the passed heightmap to mesh information suitable for CreateMeshShape2(). 201 // Convert the passed heightmap to mesh information suitable for CreateMeshShape2().
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs
index 8012d91..d5060e3 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs
@@ -104,11 +104,11 @@ public class BulletShape
104{ 104{
105 public BulletShape() 105 public BulletShape()
106 { 106 {
107 type = BSPhysicsShapeType.SHAPE_UNKNOWN; 107 shapeType = BSPhysicsShapeType.SHAPE_UNKNOWN;
108 shapeKey = (System.UInt64)FixedShapeKey.KEY_NONE; 108 shapeKey = (System.UInt64)FixedShapeKey.KEY_NONE;
109 isNativeShape = false; 109 isNativeShape = false;
110 } 110 }
111 public BSPhysicsShapeType type; 111 public BSPhysicsShapeType shapeType;
112 public System.UInt64 shapeKey; 112 public System.UInt64 shapeKey;
113 public bool isNativeShape; 113 public bool isNativeShape;
114 114
@@ -133,7 +133,7 @@ public class BulletShape
133 buff.Append("<p="); 133 buff.Append("<p=");
134 buff.Append(AddrString); 134 buff.Append(AddrString);
135 buff.Append(",s="); 135 buff.Append(",s=");
136 buff.Append(type.ToString()); 136 buff.Append(shapeType.ToString());
137 buff.Append(",k="); 137 buff.Append(",k=");
138 buff.Append(shapeKey.ToString("X")); 138 buff.Append(shapeKey.ToString("X"));
139 buff.Append(",n="); 139 buff.Append(",n=");
@@ -224,42 +224,42 @@ public static class BulletSimData
224// As mentioned above, don't use the CollisionFilterGroups definitions directly in the code 224// As mentioned above, don't use the CollisionFilterGroups definitions directly in the code
225// but, instead, use references to this dictionary. Finding and debugging 225// but, instead, use references to this dictionary. Finding and debugging
226// collision flag problems will be made easier. 226// collision flag problems will be made easier.
227public static Dictionary<CollisionType, CollisionTypeFilterGroup> CollisionTypeMasks 227public static Dictionary<CollisionType, CollisionTypeFilterGroup> CollisionTypeMasks
228 = new Dictionary<CollisionType, CollisionTypeFilterGroup>() 228 = new Dictionary<CollisionType, CollisionTypeFilterGroup>()
229{ 229{
230 { CollisionType.Avatar, 230 { CollisionType.Avatar,
231 new CollisionTypeFilterGroup(CollisionType.Avatar, 231 new CollisionTypeFilterGroup(CollisionType.Avatar,
232 (uint)CollisionFilterGroups.BCharacterGroup, 232 (uint)CollisionFilterGroups.BCharacterGroup,
233 (uint)CollisionFilterGroups.BAllGroup) 233 (uint)CollisionFilterGroups.BAllGroup)
234 }, 234 },
235 { CollisionType.Groundplane, 235 { CollisionType.Groundplane,
236 new CollisionTypeFilterGroup(CollisionType.Groundplane, 236 new CollisionTypeFilterGroup(CollisionType.Groundplane,
237 (uint)CollisionFilterGroups.BGroundPlaneGroup, 237 (uint)CollisionFilterGroups.BGroundPlaneGroup,
238 (uint)CollisionFilterGroups.BAllGroup) 238 (uint)CollisionFilterGroups.BAllGroup)
239 }, 239 },
240 { CollisionType.Terrain, 240 { CollisionType.Terrain,
241 new CollisionTypeFilterGroup(CollisionType.Terrain, 241 new CollisionTypeFilterGroup(CollisionType.Terrain,
242 (uint)CollisionFilterGroups.BTerrainGroup, 242 (uint)CollisionFilterGroups.BTerrainGroup,
243 (uint)(CollisionFilterGroups.BAllGroup & ~CollisionFilterGroups.BStaticGroup)) 243 (uint)(CollisionFilterGroups.BAllGroup & ~CollisionFilterGroups.BStaticGroup))
244 }, 244 },
245 { CollisionType.Static, 245 { CollisionType.Static,
246 new CollisionTypeFilterGroup(CollisionType.Static, 246 new CollisionTypeFilterGroup(CollisionType.Static,
247 (uint)CollisionFilterGroups.BStaticGroup, 247 (uint)CollisionFilterGroups.BStaticGroup,
248 (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup)) 248 (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup))
249 }, 249 },
250 { CollisionType.Dynamic, 250 { CollisionType.Dynamic,
251 new CollisionTypeFilterGroup(CollisionType.Dynamic, 251 new CollisionTypeFilterGroup(CollisionType.Dynamic,
252 (uint)CollisionFilterGroups.BSolidGroup, 252 (uint)CollisionFilterGroups.BSolidGroup,
253 (uint)(CollisionFilterGroups.BAllGroup)) 253 (uint)(CollisionFilterGroups.BAllGroup))
254 }, 254 },
255 { CollisionType.VolumeDetect, 255 { CollisionType.VolumeDetect,
256 new CollisionTypeFilterGroup(CollisionType.VolumeDetect, 256 new CollisionTypeFilterGroup(CollisionType.VolumeDetect,
257 (uint)CollisionFilterGroups.BSensorTrigger, 257 (uint)CollisionFilterGroups.BSensorTrigger,
258 (uint)(~CollisionFilterGroups.BSensorTrigger)) 258 (uint)(~CollisionFilterGroups.BSensorTrigger))
259 }, 259 },
260 { CollisionType.LinksetChild, 260 { CollisionType.LinksetChild,
261 new CollisionTypeFilterGroup(CollisionType.LinksetChild, 261 new CollisionTypeFilterGroup(CollisionType.LinksetChild,
262 (uint)CollisionFilterGroups.BLinksetChildGroup, 262 (uint)CollisionFilterGroups.BLinksetChildGroup,
263 (uint)(CollisionFilterGroups.BNoneGroup)) 263 (uint)(CollisionFilterGroups.BNoneGroup))
264 // (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup)) 264 // (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup))
265 }, 265 },
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
index 8a15abe..df1da63 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
@@ -1,17 +1,23 @@
1CURRENT PRIORITIES 1CURRENT PROBLEMS TO FIX AND/OR LOOK AT
2================================================= 2=================================================
3Use the HACD convex hull routine in Bullet rather than the C# version. 3Script changing rotation of child prim while vehicle moving (eg turning wheel) causes
4 Speed up hullifying large meshes. 4 the wheel to appear to jump back. Looks like sending position from previous update.
5Vehicle ride, get up, ride again. Second time vehicle does not act correctly.
6 Have to rez new vehicle and delete the old to fix situation.
7Hitting RESET on Nebadon's vehicle while riding causes vehicle to get into odd
8 position state where it will not settle onto ground properly, etc
9Two of Nebadon vehicles in a sim max the CPU. This is new.
5Enable vehicle border crossings (at least as poorly as ODE) 10Enable vehicle border crossings (at least as poorly as ODE)
6 Terrain skirts 11 Terrain skirts
7 Avatar created in previous region and not new region when crossing border 12 Avatar created in previous region and not new region when crossing border
8 Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) 13 Vehicle recreated in new sim at small Z value (offset from root value?) (DONE)
9Lock axis
10Deleting a linkset while standing on the root will leave the physical shape of the root behind. 14Deleting a linkset while standing on the root will leave the physical shape of the root behind.
11 Not sure if it is because standing on it. Done with large prim linksets. 15 Not sure if it is because standing on it. Done with large prim linksets.
12Linkset child rotations. 16Linkset child rotations.
13 Nebadon spiral tube has middle sections which are rotated wrong. 17 Nebadon spiral tube has middle sections which are rotated wrong.
14 Select linked spiral tube. Delink and note where the middle section ends up. 18 Select linked spiral tube. Delink and note where the middle section ends up.
19Refarb compound linkset creation to create a pseudo-root for center-of-mass
20 Let children change their shape to physical indendently and just add shapes to compound
15Vehicle angular vertical attraction 21Vehicle angular vertical attraction
16vehicle angular banking 22vehicle angular banking
17Center-of-gravity 23Center-of-gravity
@@ -28,14 +34,13 @@ llLookAt
28Avatars walking up stairs (HALF DONE) 34Avatars walking up stairs (HALF DONE)
29Avatar movement 35Avatar movement
30 flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE) 36 flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE)
31 walking up stairs is not calibrated correctly (stairs out of Kepler cabin) 37 walking up stairs is not calibrated correctly (stairs out of Kepler cabin) (DONE)
32 avatar capsule rotation completed (NOT DONE - Bullet's capsule shape is not the solution) 38 avatar capsule rotation completed (NOT DONE - Bullet's capsule shape is not the solution)
33Vehicle script tuning/debugging 39Vehicle script tuning/debugging
34 Avanti speed script 40 Avanti speed script
35 Weapon shooter script 41 Weapon shooter script
36Move material definitions (friction, ...) into simulator. 42Move material definitions (friction, ...) into simulator.
37Add material densities to the material types. 43Add material densities to the material types.
38Terrain detail: double terrain mesh detail
39One sided meshes? Should terrain be built into a closed shape? 44One sided meshes? Should terrain be built into a closed shape?
40 When meshes get partially wedged into the terrain, they cannot push themselves out. 45 When meshes get partially wedged into the terrain, they cannot push themselves out.
41 It is possible that Bullet processes collisions whether entering or leaving a mesh. 46 It is possible that Bullet processes collisions whether entering or leaving a mesh.
@@ -43,6 +48,11 @@ One sided meshes? Should terrain be built into a closed shape?
43 48
44VEHICLES TODO LIST: 49VEHICLES TODO LIST:
45================================================= 50=================================================
51LINEAR_MOTOR_DIRECTION values should be clamped to reasonable numbers.
52 What are the limits in SL?
53 Same for other velocity settings.
54UBit improvements to remove rubber-banding of avatars sitting on vehicle child prims:
55 https://github.com/UbitUmarov/Ubit-opensim
46Border crossing with linked vehicle causes crash 56Border crossing with linked vehicle causes crash
47 20121129.1411: editting/moving phys object across region boundries causes crash 57 20121129.1411: editting/moving phys object across region boundries causes crash
48 getPos-> btRigidBody::upcast -> getBodyType -> BOOM 58 getPos-> btRigidBody::upcast -> getBodyType -> BOOM
@@ -168,6 +178,7 @@ Eliminate collisions between objects in a linkset. (LinksetConstraint)
168 178
169MORE 179MORE
170====================================================== 180======================================================
181Compute avatar size and scale correctly. Now it is a bit off from the capsule size.
171Create tests for different interface components 182Create tests for different interface components
172 Have test objects/scripts measure themselves and turn color if correct/bad 183 Have test objects/scripts measure themselves and turn color if correct/bad
173 Test functions in SL and calibrate correctness there 184 Test functions in SL and calibrate correctness there
@@ -344,3 +355,8 @@ Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
344 Verify that angular motion specified around Z moves in the vehicle coordinates. 355 Verify that angular motion specified around Z moves in the vehicle coordinates.
345 DONE 20130120: BulletSim properly applies force in vehicle relative coordinates. 356 DONE 20130120: BulletSim properly applies force in vehicle relative coordinates.
346Nebadon vehicles turning funny in arena (DONE) 357Nebadon vehicles turning funny in arena (DONE)
358Lock axis (DONE 20130401)
359Terrain detail: double terrain mesh detail (DONE)
360Use the HACD convex hull routine in Bullet rather than the C# version.
361 Speed up hullifying large meshes. (DONE)
362
diff --git a/OpenSim/Region/Physics/BulletSPlugin/Tests/BasicVehicles.cs b/OpenSim/Region/Physics/BulletSPlugin/Tests/BasicVehicles.cs
index 33232bd..b040e21 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/Tests/BasicVehicles.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/Tests/BasicVehicles.cs
@@ -114,9 +114,9 @@ public class BasicVehicles : OpenSimTestCase
114 // Instead the appropriate values are set and calls are made just the parts of the 114 // Instead the appropriate values are set and calls are made just the parts of the
115 // controller we want to exercise. Stepping the physics engine then applies 115 // controller we want to exercise. Stepping the physics engine then applies
116 // the actions of that one feature. 116 // the actions of that one feature.
117 TestVehicle.VehicleController.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency); 117 TestVehicle.VehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency);
118 TestVehicle.VehicleController.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale); 118 TestVehicle.VehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale);
119 TestVehicle.VehicleController.enableAngularVerticalAttraction = true; 119 TestVehicle.VehicleActor.enableAngularVerticalAttraction = true;
120 120
121 TestVehicle.IsPhysical = true; 121 TestVehicle.IsPhysical = true;
122 PhysicsScene.ProcessTaints(); 122 PhysicsScene.ProcessTaints();
@@ -124,9 +124,9 @@ public class BasicVehicles : OpenSimTestCase
124 // Step the simulator a bunch of times and vertical attraction should orient the vehicle up 124 // Step the simulator a bunch of times and vertical attraction should orient the vehicle up
125 for (int ii = 0; ii < simSteps; ii++) 125 for (int ii = 0; ii < simSteps; ii++)
126 { 126 {
127 TestVehicle.VehicleController.ForgetKnownVehicleProperties(); 127 TestVehicle.VehicleActor.ForgetKnownVehicleProperties();
128 TestVehicle.VehicleController.ComputeAngularVerticalAttraction(); 128 TestVehicle.VehicleActor.ComputeAngularVerticalAttraction();
129 TestVehicle.VehicleController.PushKnownChanged(); 129 TestVehicle.VehicleActor.PushKnownChanged();
130 130
131 PhysicsScene.Simulate(simulationTimeStep); 131 PhysicsScene.Simulate(simulationTimeStep);
132 } 132 }
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index d181b78..16d65eb 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -64,6 +64,7 @@ namespace OpenSim.Region.Physics.Meshing
64 public class Meshmerizer : IMesher 64 public class Meshmerizer : IMesher
65 { 65 {
66 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 66 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
67 private static string LogHeader = "[MESH]";
67 68
68 // Setting baseDir to a path will enable the dumping of raw files 69 // Setting baseDir to a path will enable the dumping of raw files
69 // raw files can be imported by blender so a visual inspection of the results can be done 70 // raw files can be imported by blender so a visual inspection of the results can be done
@@ -72,6 +73,8 @@ namespace OpenSim.Region.Physics.Meshing
72#else 73#else
73 private const string baseDir = null; //"rawFiles"; 74 private const string baseDir = null; //"rawFiles";
74#endif 75#endif
76 // If 'true', lots of DEBUG logging of asset parsing details
77 private bool debugDetail = false;
75 78
76 private bool cacheSculptMaps = true; 79 private bool cacheSculptMaps = true;
77 private string decodedSculptMapPath = null; 80 private string decodedSculptMapPath = null;
@@ -79,6 +82,9 @@ namespace OpenSim.Region.Physics.Meshing
79 82
80 private float minSizeForComplexMesh = 0.2f; // prims with all dimensions smaller than this will have a bounding box mesh 83 private float minSizeForComplexMesh = 0.2f; // prims with all dimensions smaller than this will have a bounding box mesh
81 84
85 private List<List<Vector3>> mConvexHulls = null;
86 private List<Vector3> mBoundingHull = null;
87
82 private Dictionary<ulong, Mesh> m_uniqueMeshes = new Dictionary<ulong, Mesh>(); 88 private Dictionary<ulong, Mesh> m_uniqueMeshes = new Dictionary<ulong, Mesh>();
83 89
84 public Meshmerizer(IConfigSource config) 90 public Meshmerizer(IConfigSource config)
@@ -88,8 +94,11 @@ namespace OpenSim.Region.Physics.Meshing
88 94
89 decodedSculptMapPath = start_config.GetString("DecodedSculptMapPath","j2kDecodeCache"); 95 decodedSculptMapPath = start_config.GetString("DecodedSculptMapPath","j2kDecodeCache");
90 cacheSculptMaps = start_config.GetBoolean("CacheSculptMaps", cacheSculptMaps); 96 cacheSculptMaps = start_config.GetBoolean("CacheSculptMaps", cacheSculptMaps);
91 if(mesh_config != null) 97 if (mesh_config != null)
98 {
92 useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh); 99 useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh);
100 debugDetail = mesh_config.GetBoolean("LogMeshDetails", debugDetail);
101 }
93 102
94 try 103 try
95 { 104 {
@@ -319,6 +328,9 @@ namespace OpenSim.Region.Physics.Meshing
319 faces = new List<Face>(); 328 faces = new List<Face>();
320 OSD meshOsd = null; 329 OSD meshOsd = null;
321 330
331 mConvexHulls = null;
332 mBoundingHull = null;
333
322 if (primShape.SculptData.Length <= 0) 334 if (primShape.SculptData.Length <= 0)
323 { 335 {
324 // XXX: At the moment we can not log here since ODEPrim, for instance, ends up triggering this 336 // XXX: At the moment we can not log here since ODEPrim, for instance, ends up triggering this
@@ -355,9 +367,139 @@ namespace OpenSim.Region.Physics.Meshing
355 OSDMap physicsParms = null; 367 OSDMap physicsParms = null;
356 OSDMap map = (OSDMap)meshOsd; 368 OSDMap map = (OSDMap)meshOsd;
357 if (map.ContainsKey("physics_shape")) 369 if (map.ContainsKey("physics_shape"))
370 {
358 physicsParms = (OSDMap)map["physics_shape"]; // old asset format 371 physicsParms = (OSDMap)map["physics_shape"]; // old asset format
372 if (debugDetail) m_log.DebugFormat("{0} prim='{1}': using 'physics_shape' mesh data", LogHeader, primName);
373 }
359 else if (map.ContainsKey("physics_mesh")) 374 else if (map.ContainsKey("physics_mesh"))
375 {
360 physicsParms = (OSDMap)map["physics_mesh"]; // new asset format 376 physicsParms = (OSDMap)map["physics_mesh"]; // new asset format
377 if (debugDetail) m_log.DebugFormat("{0} prim='{1}':using 'physics_mesh' mesh data", LogHeader, primName);
378 }
379 else if (map.ContainsKey("medium_lod"))
380 {
381 physicsParms = (OSDMap)map["medium_lod"]; // if no physics mesh, try to fall back to medium LOD display mesh
382 if (debugDetail) m_log.DebugFormat("{0} prim='{1}':using 'medium_lod' mesh data", LogHeader, primName);
383 }
384 else if (map.ContainsKey("high_lod"))
385 {
386 physicsParms = (OSDMap)map["high_lod"]; // if all else fails, use highest LOD display mesh and hope it works :)
387 if (debugDetail) m_log.DebugFormat("{0} prim='{1}':using 'high_lod' mesh data", LogHeader, primName);
388 }
389
390 if (map.ContainsKey("physics_convex"))
391 { // pull this out also in case physics engine can use it
392 OSD convexBlockOsd = null;
393 try
394 {
395 OSDMap convexBlock = (OSDMap)map["physics_convex"];
396 {
397 int convexOffset = convexBlock["offset"].AsInteger() + (int)start;
398 int convexSize = convexBlock["size"].AsInteger();
399
400 byte[] convexBytes = new byte[convexSize];
401
402 System.Buffer.BlockCopy(primShape.SculptData, convexOffset, convexBytes, 0, convexSize);
403
404 try
405 {
406 convexBlockOsd = DecompressOsd(convexBytes);
407 }
408 catch (Exception e)
409 {
410 m_log.ErrorFormat("{0} prim='{1}': exception decoding convex block: {2}", LogHeader, primName, e);
411 //return false;
412 }
413 }
414
415 if (convexBlockOsd != null && convexBlockOsd is OSDMap)
416 {
417 convexBlock = convexBlockOsd as OSDMap;
418
419 if (debugDetail)
420 {
421 string keys = LogHeader + " keys found in convexBlock: ";
422 foreach (KeyValuePair<string, OSD> kvp in convexBlock)
423 keys += "'" + kvp.Key + "' ";
424 m_log.Debug(keys);
425 }
426
427 Vector3 min = new Vector3(-0.5f, -0.5f, -0.5f);
428 if (convexBlock.ContainsKey("Min")) min = convexBlock["Min"].AsVector3();
429 Vector3 max = new Vector3(0.5f, 0.5f, 0.5f);
430 if (convexBlock.ContainsKey("Max")) max = convexBlock["Max"].AsVector3();
431
432 List<Vector3> boundingHull = null;
433
434 if (convexBlock.ContainsKey("BoundingVerts"))
435 {
436 byte[] boundingVertsBytes = convexBlock["BoundingVerts"].AsBinary();
437 boundingHull = new List<Vector3>();
438 for (int i = 0; i < boundingVertsBytes.Length; )
439 {
440 ushort uX = Utils.BytesToUInt16(boundingVertsBytes, i); i += 2;
441 ushort uY = Utils.BytesToUInt16(boundingVertsBytes, i); i += 2;
442 ushort uZ = Utils.BytesToUInt16(boundingVertsBytes, i); i += 2;
443
444 Vector3 pos = new Vector3(
445 Utils.UInt16ToFloat(uX, min.X, max.X),
446 Utils.UInt16ToFloat(uY, min.Y, max.Y),
447 Utils.UInt16ToFloat(uZ, min.Z, max.Z)
448 );
449
450 boundingHull.Add(pos);
451 }
452
453 mBoundingHull = boundingHull;
454 if (debugDetail) m_log.DebugFormat("{0} prim='{1}': parsed bounding hull. nVerts={2}", LogHeader, primName, mBoundingHull.Count);
455 }
456
457 if (convexBlock.ContainsKey("HullList"))
458 {
459 byte[] hullList = convexBlock["HullList"].AsBinary();
460
461 byte[] posBytes = convexBlock["Positions"].AsBinary();
462
463 List<List<Vector3>> hulls = new List<List<Vector3>>();
464 int posNdx = 0;
465
466 foreach (byte cnt in hullList)
467 {
468 int count = cnt == 0 ? 256 : cnt;
469 List<Vector3> hull = new List<Vector3>();
470
471 for (int i = 0; i < count; i++)
472 {
473 ushort uX = Utils.BytesToUInt16(posBytes, posNdx); posNdx += 2;
474 ushort uY = Utils.BytesToUInt16(posBytes, posNdx); posNdx += 2;
475 ushort uZ = Utils.BytesToUInt16(posBytes, posNdx); posNdx += 2;
476
477 Vector3 pos = new Vector3(
478 Utils.UInt16ToFloat(uX, min.X, max.X),
479 Utils.UInt16ToFloat(uY, min.Y, max.Y),
480 Utils.UInt16ToFloat(uZ, min.Z, max.Z)
481 );
482
483 hull.Add(pos);
484 }
485
486 hulls.Add(hull);
487 }
488
489 mConvexHulls = hulls;
490 if (debugDetail) m_log.DebugFormat("{0} prim='{1}': parsed hulls. nHulls={2}", LogHeader, primName, mConvexHulls.Count);
491 }
492 else
493 {
494 if (debugDetail) m_log.DebugFormat("{0} prim='{1}' has physics_convex but no HullList", LogHeader, primName);
495 }
496 }
497 }
498 catch (Exception e)
499 {
500 m_log.WarnFormat("{0} exception decoding convex block: {1}", LogHeader, e);
501 }
502 }
361 503
362 if (physicsParms == null) 504 if (physicsParms == null)
363 { 505 {
@@ -374,34 +516,14 @@ namespace OpenSim.Region.Physics.Meshing
374 OSD decodedMeshOsd = new OSD(); 516 OSD decodedMeshOsd = new OSD();
375 byte[] meshBytes = new byte[physSize]; 517 byte[] meshBytes = new byte[physSize];
376 System.Buffer.BlockCopy(primShape.SculptData, physOffset, meshBytes, 0, physSize); 518 System.Buffer.BlockCopy(primShape.SculptData, physOffset, meshBytes, 0, physSize);
377// byte[] decompressed = new byte[physSize * 5]; 519 // byte[] decompressed = new byte[physSize * 5];
378 try 520 try
379 { 521 {
380 using (MemoryStream inMs = new MemoryStream(meshBytes)) 522 decodedMeshOsd = DecompressOsd(meshBytes);
381 {
382 using (MemoryStream outMs = new MemoryStream())
383 {
384 using (ZOutputStream zOut = new ZOutputStream(outMs))
385 {
386 byte[] readBuffer = new byte[2048];
387 int readLen = 0;
388 while ((readLen = inMs.Read(readBuffer, 0, readBuffer.Length)) > 0)
389 {
390 zOut.Write(readBuffer, 0, readLen);
391 }
392 zOut.Flush();
393 outMs.Seek(0, SeekOrigin.Begin);
394
395 byte[] decompressedBuf = outMs.GetBuffer();
396
397 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
398 }
399 }
400 }
401 } 523 }
402 catch (Exception e) 524 catch (Exception e)
403 { 525 {
404 m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString()); 526 m_log.ErrorFormat("{0} prim='{1}': exception decoding physical mesh: {2}", LogHeader, primName, e);
405 return false; 527 return false;
406 } 528 }
407 529
@@ -410,7 +532,7 @@ namespace OpenSim.Region.Physics.Meshing
410 // physics_shape is an array of OSDMaps, one for each submesh 532 // physics_shape is an array of OSDMaps, one for each submesh
411 if (decodedMeshOsd is OSDArray) 533 if (decodedMeshOsd is OSDArray)
412 { 534 {
413// Console.WriteLine("decodedMeshOsd for {0} - {1}", primName, Util.GetFormattedXml(decodedMeshOsd)); 535 // Console.WriteLine("decodedMeshOsd for {0} - {1}", primName, Util.GetFormattedXml(decodedMeshOsd));
414 536
415 decodedMeshOsdArray = (OSDArray)decodedMeshOsd; 537 decodedMeshOsdArray = (OSDArray)decodedMeshOsd;
416 foreach (OSD subMeshOsd in decodedMeshOsdArray) 538 foreach (OSD subMeshOsd in decodedMeshOsdArray)
@@ -418,12 +540,50 @@ namespace OpenSim.Region.Physics.Meshing
418 if (subMeshOsd is OSDMap) 540 if (subMeshOsd is OSDMap)
419 AddSubMesh(subMeshOsd as OSDMap, size, coords, faces); 541 AddSubMesh(subMeshOsd as OSDMap, size, coords, faces);
420 } 542 }
543 if (debugDetail)
544 m_log.DebugFormat("{0} {1}: mesh decoded. offset={2}, size={3}, nCoords={4}, nFaces={5}",
545 LogHeader, primName, physOffset, physSize, coords.Count, faces.Count);
421 } 546 }
422 } 547 }
423 548
424 return true; 549 return true;
425 } 550 }
426 551
552
553 /// <summary>
554 /// decompresses a gzipped OSD object
555 /// </summary>
556 /// <param name="decodedOsd"></param> the OSD object
557 /// <param name="meshBytes"></param>
558 /// <returns></returns>
559 private static OSD DecompressOsd(byte[] meshBytes)
560 {
561 OSD decodedOsd = null;
562
563 using (MemoryStream inMs = new MemoryStream(meshBytes))
564 {
565 using (MemoryStream outMs = new MemoryStream())
566 {
567 using (ZOutputStream zOut = new ZOutputStream(outMs))
568 {
569 byte[] readBuffer = new byte[2048];
570 int readLen = 0;
571 while ((readLen = inMs.Read(readBuffer, 0, readBuffer.Length)) > 0)
572 {
573 zOut.Write(readBuffer, 0, readLen);
574 }
575 zOut.Flush();
576 outMs.Seek(0, SeekOrigin.Begin);
577
578 byte[] decompressedBuf = outMs.GetBuffer();
579
580 decodedOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
581 }
582 }
583 }
584 return decodedOsd;
585 }
586
427 /// <summary> 587 /// <summary>
428 /// Generate the co-ords and faces necessary to construct a mesh from the sculpt data the accompanies a prim. 588 /// Generate the co-ords and faces necessary to construct a mesh from the sculpt data the accompanies a prim.
429 /// </summary> 589 /// </summary>
@@ -700,6 +860,45 @@ namespace OpenSim.Region.Physics.Meshing
700 return true; 860 return true;
701 } 861 }
702 862
863 /// <summary>
864 /// temporary prototype code - please do not use until the interface has been finalized!
865 /// </summary>
866 /// <param name="size">value to scale the hull points by</param>
867 /// <returns>a list of vertices in the bounding hull if it exists and has been successfully decoded, otherwise null</returns>
868 public List<Vector3> GetBoundingHull(Vector3 size)
869 {
870 if (mBoundingHull == null)
871 return null;
872
873 List<Vector3> verts = new List<Vector3>();
874 foreach (var vert in mBoundingHull)
875 verts.Add(vert * size);
876
877 return verts;
878 }
879
880 /// <summary>
881 /// temporary prototype code - please do not use until the interface has been finalized!
882 /// </summary>
883 /// <param name="size">value to scale the hull points by</param>
884 /// <returns>a list of hulls if they exist and have been successfully decoded, otherwise null</returns>
885 public List<List<Vector3>> GetConvexHulls(Vector3 size)
886 {
887 if (mConvexHulls == null)
888 return null;
889
890 List<List<Vector3>> hulls = new List<List<Vector3>>();
891 foreach (var hull in mConvexHulls)
892 {
893 List<Vector3> verts = new List<Vector3>();
894 foreach (var vert in hull)
895 verts.Add(vert * size);
896 hulls.Add(verts);
897 }
898
899 return hulls;
900 }
901
703 public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) 902 public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
704 { 903 {
705 return CreateMesh(primName, primShape, size, lod, false, true); 904 return CreateMesh(primName, primShape, size, lod, false, true);
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
index b4abc1d..4bf2a82 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
@@ -27,6 +27,8 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Reflection;
31using log4net;
30using OpenMetaverse; 32using OpenMetaverse;
31using OpenSim.Framework; 33using OpenSim.Framework;
32using OpenSim.Region.Framework.Interfaces; 34using OpenSim.Region.Framework.Interfaces;
@@ -34,10 +36,10 @@ using OpenSim.Region.CoreModules.World.Land;
34 36
35namespace OpenSim.Region.RegionCombinerModule 37namespace OpenSim.Region.RegionCombinerModule
36{ 38{
37public class RegionCombinerLargeLandChannel : ILandChannel 39 public class RegionCombinerLargeLandChannel : ILandChannel
38 { 40 {
39 // private static readonly ILog m_log = 41// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
40 // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 42
41 private RegionData RegData; 43 private RegionData RegData;
42 private ILandChannel RootRegionLandChannel; 44 private ILandChannel RootRegionLandChannel;
43 private readonly List<RegionData> RegionConnections; 45 private readonly List<RegionData> RegionConnections;
@@ -75,40 +77,51 @@ public class RegionCombinerLargeLandChannel : ILandChannel
75 77
76 public ILandObject GetLandObject(int x, int y) 78 public ILandObject GetLandObject(int x, int y)
77 { 79 {
78 //m_log.DebugFormat("[BIGLANDTESTINT]: <{0},{1}>", x, y); 80 return GetLandObject((float)x, (float)y);
79 81
80 if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize) 82// m_log.DebugFormat("[BIGLANDTESTINT]: <{0},{1}>", x, y);
81 { 83//
82 return RootRegionLandChannel.GetLandObject(x, y); 84// if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize)
83 } 85// {
84 else 86// return RootRegionLandChannel.GetLandObject(x, y);
85 { 87// }
86 int offsetX = (x / (int)Constants.RegionSize); 88// else
87 int offsetY = (y / (int)Constants.RegionSize); 89// {
88 offsetX *= (int)Constants.RegionSize; 90// int offsetX = (x / (int)Constants.RegionSize);
89 offsetY *= (int)Constants.RegionSize; 91// int offsetY = (y / (int)Constants.RegionSize);
90 92// offsetX *= (int)Constants.RegionSize;
91 foreach (RegionData regionData in RegionConnections) 93// offsetY *= (int)Constants.RegionSize;
92 { 94//
93 if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY) 95// foreach (RegionData regionData in RegionConnections)
94 { 96// {
95 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY); 97// if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY)
96 } 98// {
97 } 99// m_log.DebugFormat(
98 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); 100// "[REGION COMBINER LARGE LAND CHANNEL]: Found region {0} at offset {1},{2}",
99 obj.LandData.Name = "NO LAND"; 101// regionData.RegionScene.Name, offsetX, offsetY);
100 return obj; 102//
101 } 103// return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY);
104// }
105// }
106// //ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene);
107// //obj.LandData.Name = "NO LAND";
108// //return obj;
109// }
110//
111// m_log.DebugFormat("[REGION COMBINER LARGE LAND CHANNEL]: No region found at {0},{1}, returning null", x, y);
112//
113// return null;
102 } 114 }
103 115
104 public ILandObject GetLandObject(int localID) 116 public ILandObject GetLandObject(int localID)
105 { 117 {
118 // XXX: Possibly should be looking in every land channel, not just the root.
106 return RootRegionLandChannel.GetLandObject(localID); 119 return RootRegionLandChannel.GetLandObject(localID);
107 } 120 }
108 121
109 public ILandObject GetLandObject(float x, float y) 122 public ILandObject GetLandObject(float x, float y)
110 { 123 {
111 //m_log.DebugFormat("[BIGLANDTESTFLOAT]: <{0},{1}>", x, y); 124// m_log.DebugFormat("[BIGLANDTESTFLOAT]: <{0},{1}>", x, y);
112 125
113 if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize) 126 if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize)
114 { 127 {
@@ -125,14 +138,22 @@ public class RegionCombinerLargeLandChannel : ILandChannel
125 { 138 {
126 if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY) 139 if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY)
127 { 140 {
141// m_log.DebugFormat(
142// "[REGION COMBINER LARGE LAND CHANNEL]: Found region {0} at offset {1},{2}",
143// regionData.RegionScene.Name, offsetX, offsetY);
144
128 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY); 145 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY);
129 } 146 }
130 } 147 }
131 148
132 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); 149// ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene);
133 obj.LandData.Name = "NO LAND"; 150// obj.LandData.Name = "NO LAND";
134 return obj; 151// return obj;
135 } 152 }
153
154// m_log.DebugFormat("[REGION COMBINER LARGE LAND CHANNEL]: No region found at {0},{1}, returning null", x, y);
155
156 return null;
136 } 157 }
137 158
138 public bool IsForcefulBansAllowed() 159 public bool IsForcefulBansAllowed()
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 35ae44c..b9a217b 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -51,7 +51,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
51 public interface IScriptWorkItem 51 public interface IScriptWorkItem
52 { 52 {
53 bool Cancel(); 53 bool Cancel();
54 void Abort(); 54 bool Abort();
55 55
56 /// <summary> 56 /// <summary>
57 /// Wait for the work item to complete. 57 /// Wait for the work item to complete.
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
index 6879ebb..1e19032 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
@@ -37,6 +37,8 @@ using OpenSim.Region.ScriptEngine.Interfaces;
37using OpenSim.Region.ScriptEngine.Shared; 37using OpenSim.Region.ScriptEngine.Shared;
38using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; 38using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
39using Timer=OpenSim.Region.ScriptEngine.Shared.Api.Plugins.Timer; 39using Timer=OpenSim.Region.ScriptEngine.Shared.Api.Plugins.Timer;
40using System.Reflection;
41using log4net;
40 42
41namespace OpenSim.Region.ScriptEngine.Shared.Api 43namespace OpenSim.Region.ScriptEngine.Shared.Api
42{ 44{
@@ -45,15 +47,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
45 /// </summary> 47 /// </summary>
46 public class AsyncCommandManager 48 public class AsyncCommandManager
47 { 49 {
50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
51
48 private static Thread cmdHandlerThread; 52 private static Thread cmdHandlerThread;
49 private static int cmdHandlerThreadCycleSleepms; 53 private static int cmdHandlerThreadCycleSleepms;
50 54
51 private static List<IScene> m_Scenes = new List<IScene>(); 55 /// <summary>
56 /// Lock for reading/writing static components of AsyncCommandManager.
57 /// </summary>
58 /// <remarks>
59 /// This lock exists so that multiple threads from different engines and/or different copies of the same engine
60 /// are prevented from running non-thread safe code (e.g. read/write of lists) concurrently.
61 /// </remarks>
62 private static object staticLock = new object();
63
52 private static List<IScriptEngine> m_ScriptEngines = 64 private static List<IScriptEngine> m_ScriptEngines =
53 new List<IScriptEngine>(); 65 new List<IScriptEngine>();
54 66
55 public IScriptEngine m_ScriptEngine; 67 public IScriptEngine m_ScriptEngine;
56 private IScene m_Scene;
57 68
58 private static Dictionary<IScriptEngine, Dataserver> m_Dataserver = 69 private static Dictionary<IScriptEngine, Dataserver> m_Dataserver =
59 new Dictionary<IScriptEngine, Dataserver>(); 70 new Dictionary<IScriptEngine, Dataserver>();
@@ -70,67 +81,99 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
70 81
71 public Dataserver DataserverPlugin 82 public Dataserver DataserverPlugin
72 { 83 {
73 get { return m_Dataserver[m_ScriptEngine]; } 84 get
85 {
86 lock (staticLock)
87 return m_Dataserver[m_ScriptEngine];
88 }
74 } 89 }
75 90
76 public Timer TimerPlugin 91 public Timer TimerPlugin
77 { 92 {
78 get { return m_Timer[m_ScriptEngine]; } 93 get
94 {
95 lock (staticLock)
96 return m_Timer[m_ScriptEngine];
97 }
79 } 98 }
80 99
81 public HttpRequest HttpRequestPlugin 100 public HttpRequest HttpRequestPlugin
82 { 101 {
83 get { return m_HttpRequest[m_ScriptEngine]; } 102 get
103 {
104 lock (staticLock)
105 return m_HttpRequest[m_ScriptEngine];
106 }
84 } 107 }
85 108
86 public Listener ListenerPlugin 109 public Listener ListenerPlugin
87 { 110 {
88 get { return m_Listener[m_ScriptEngine]; } 111 get
112 {
113 lock (staticLock)
114 return m_Listener[m_ScriptEngine];
115 }
89 } 116 }
90 117
91 public SensorRepeat SensorRepeatPlugin 118 public SensorRepeat SensorRepeatPlugin
92 { 119 {
93 get { return m_SensorRepeat[m_ScriptEngine]; } 120 get
121 {
122 lock (staticLock)
123 return m_SensorRepeat[m_ScriptEngine];
124 }
94 } 125 }
95 126
96 public XmlRequest XmlRequestPlugin 127 public XmlRequest XmlRequestPlugin
97 { 128 {
98 get { return m_XmlRequest[m_ScriptEngine]; } 129 get
130 {
131 lock (staticLock)
132 return m_XmlRequest[m_ScriptEngine];
133 }
99 } 134 }
100 135
101 public IScriptEngine[] ScriptEngines 136 public IScriptEngine[] ScriptEngines
102 { 137 {
103 get { return m_ScriptEngines.ToArray(); } 138 get
139 {
140 lock (staticLock)
141 return m_ScriptEngines.ToArray();
142 }
104 } 143 }
105 144
106 public AsyncCommandManager(IScriptEngine _ScriptEngine) 145 public AsyncCommandManager(IScriptEngine _ScriptEngine)
107 { 146 {
108 m_ScriptEngine = _ScriptEngine; 147 m_ScriptEngine = _ScriptEngine;
109 m_Scene = m_ScriptEngine.World; 148
110 149 // If there is more than one scene in the simulator or multiple script engines are used on the same region
111 if (m_Scenes.Count == 0) 150 // then more than one thread could arrive at this block of code simultaneously. However, it cannot be
112 ReadConfig(); 151 // executed concurrently both because concurrent list operations are not thread-safe and because of other
113 152 // race conditions such as the later check of cmdHandlerThread == null.
114 if (!m_Scenes.Contains(m_Scene)) 153 lock (staticLock)
115 m_Scenes.Add(m_Scene); 154 {
116 if (!m_ScriptEngines.Contains(m_ScriptEngine)) 155 if (m_ScriptEngines.Count == 0)
117 m_ScriptEngines.Add(m_ScriptEngine); 156 ReadConfig();
118 157
119 // Create instances of all plugins 158 if (!m_ScriptEngines.Contains(m_ScriptEngine))
120 if (!m_Dataserver.ContainsKey(m_ScriptEngine)) 159 m_ScriptEngines.Add(m_ScriptEngine);
121 m_Dataserver[m_ScriptEngine] = new Dataserver(this); 160
122 if (!m_Timer.ContainsKey(m_ScriptEngine)) 161 // Create instances of all plugins
123 m_Timer[m_ScriptEngine] = new Timer(this); 162 if (!m_Dataserver.ContainsKey(m_ScriptEngine))
124 if (!m_HttpRequest.ContainsKey(m_ScriptEngine)) 163 m_Dataserver[m_ScriptEngine] = new Dataserver(this);
125 m_HttpRequest[m_ScriptEngine] = new HttpRequest(this); 164 if (!m_Timer.ContainsKey(m_ScriptEngine))
126 if (!m_Listener.ContainsKey(m_ScriptEngine)) 165 m_Timer[m_ScriptEngine] = new Timer(this);
127 m_Listener[m_ScriptEngine] = new Listener(this); 166 if (!m_HttpRequest.ContainsKey(m_ScriptEngine))
128 if (!m_SensorRepeat.ContainsKey(m_ScriptEngine)) 167 m_HttpRequest[m_ScriptEngine] = new HttpRequest(this);
129 m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this); 168 if (!m_Listener.ContainsKey(m_ScriptEngine))
130 if (!m_XmlRequest.ContainsKey(m_ScriptEngine)) 169 m_Listener[m_ScriptEngine] = new Listener(this);
131 m_XmlRequest[m_ScriptEngine] = new XmlRequest(this); 170 if (!m_SensorRepeat.ContainsKey(m_ScriptEngine))
132 171 m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this);
133 StartThread(); 172 if (!m_XmlRequest.ContainsKey(m_ScriptEngine))
173 m_XmlRequest[m_ScriptEngine] = new XmlRequest(this);
174
175 StartThread();
176 }
134 } 177 }
135 178
136 private static void StartThread() 179 private static void StartThread()
@@ -179,42 +222,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
179 { 222 {
180 try 223 try
181 { 224 {
182 while (true) 225 Thread.Sleep(cmdHandlerThreadCycleSleepms);
183 {
184 Thread.Sleep(cmdHandlerThreadCycleSleepms);
185 226
186 DoOneCmdHandlerPass(); 227 DoOneCmdHandlerPass();
187 228
188 Watchdog.UpdateThread(); 229 Watchdog.UpdateThread();
189 }
190 } 230 }
191 catch 231 catch (Exception e)
192 { 232 {
233 m_log.Error("[ASYNC COMMAND MANAGER]: Exception in command handler pass: ", e);
193 } 234 }
194 } 235 }
195 } 236 }
196 237
197 private static void DoOneCmdHandlerPass() 238 private static void DoOneCmdHandlerPass()
198 { 239 {
199 // Check HttpRequests 240 lock (staticLock)
200 m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests(); 241 {
242 // Check HttpRequests
243 m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests();
201 244
202 // Check XMLRPCRequests 245 // Check XMLRPCRequests
203 m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests(); 246 m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests();
204 247
205 foreach (IScriptEngine s in m_ScriptEngines) 248 foreach (IScriptEngine s in m_ScriptEngines)
206 { 249 {
207 // Check Listeners 250 // Check Listeners
208 m_Listener[s].CheckListeners(); 251 m_Listener[s].CheckListeners();
209 252
210 // Check timers 253 // Check timers
211 m_Timer[s].CheckTimerEvents(); 254 m_Timer[s].CheckTimerEvents();
212 255
213 // Check Sensors 256 // Check Sensors
214 m_SensorRepeat[s].CheckSenseRepeaterEvents(); 257 m_SensorRepeat[s].CheckSenseRepeaterEvents();
215 258
216 // Check dataserver 259 // Check dataserver
217 m_Dataserver[s].ExpireRequests(); 260 m_Dataserver[s].ExpireRequests();
261 }
218 } 262 }
219 } 263 }
220 264
@@ -226,31 +270,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
226 public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID) 270 public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID)
227 { 271 {
228 // Remove a specific script 272 // Remove a specific script
273// m_log.DebugFormat("[ASYNC COMMAND MANAGER]: Removing facilities for script {0}", itemID);
229 274
230 // Remove dataserver events 275 lock (staticLock)
231 m_Dataserver[engine].RemoveEvents(localID, itemID); 276 {
277 // Remove dataserver events
278 m_Dataserver[engine].RemoveEvents(localID, itemID);
232 279
233 // Remove from: Timers 280 // Remove from: Timers
234 m_Timer[engine].UnSetTimerEvents(localID, itemID); 281 m_Timer[engine].UnSetTimerEvents(localID, itemID);
235 282
236 // Remove from: HttpRequest 283 // Remove from: HttpRequest
237 IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface<IHttpRequestModule>(); 284 IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface<IHttpRequestModule>();
238 if (iHttpReq != null) 285 if (iHttpReq != null)
239 iHttpReq.StopHttpRequest(localID, itemID); 286 iHttpReq.StopHttpRequest(localID, itemID);
240 287
241 IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>(); 288 IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>();
242 if (comms != null) 289 if (comms != null)
243 comms.DeleteListener(itemID); 290 comms.DeleteListener(itemID);
244 291
245 IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>(); 292 IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>();
246 if (xmlrpc != null) 293 if (xmlrpc != null)
247 { 294 {
248 xmlrpc.DeleteChannels(itemID); 295 xmlrpc.DeleteChannels(itemID);
249 xmlrpc.CancelSRDRequests(itemID); 296 xmlrpc.CancelSRDRequests(itemID);
250 } 297 }
251 298
252 // Remove Sensors 299 // Remove Sensors
253 m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID); 300 m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
301 }
254 } 302 }
255 303
256 /// <summary> 304 /// <summary>
@@ -260,10 +308,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
260 /// <returns></returns> 308 /// <returns></returns>
261 public static SensorRepeat GetSensorRepeatPlugin(IScriptEngine engine) 309 public static SensorRepeat GetSensorRepeatPlugin(IScriptEngine engine)
262 { 310 {
263 if (m_SensorRepeat.ContainsKey(engine)) 311 lock (staticLock)
264 return m_SensorRepeat[engine]; 312 {
265 else 313 if (m_SensorRepeat.ContainsKey(engine))
266 return null; 314 return m_SensorRepeat[engine];
315 else
316 return null;
317 }
267 } 318 }
268 319
269 /// <summary> 320 /// <summary>
@@ -273,10 +324,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
273 /// <returns></returns> 324 /// <returns></returns>
274 public static Dataserver GetDataserverPlugin(IScriptEngine engine) 325 public static Dataserver GetDataserverPlugin(IScriptEngine engine)
275 { 326 {
276 if (m_Dataserver.ContainsKey(engine)) 327 lock (staticLock)
277 return m_Dataserver[engine]; 328 {
278 else 329 if (m_Dataserver.ContainsKey(engine))
279 return null; 330 return m_Dataserver[engine];
331 else
332 return null;
333 }
280 } 334 }
281 335
282 /// <summary> 336 /// <summary>
@@ -286,10 +340,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
286 /// <returns></returns> 340 /// <returns></returns>
287 public static Timer GetTimerPlugin(IScriptEngine engine) 341 public static Timer GetTimerPlugin(IScriptEngine engine)
288 { 342 {
289 if (m_Timer.ContainsKey(engine)) 343 lock (staticLock)
290 return m_Timer[engine]; 344 {
291 else 345 if (m_Timer.ContainsKey(engine))
292 return null; 346 return m_Timer[engine];
347 else
348 return null;
349 }
293 } 350 }
294 351
295 /// <summary> 352 /// <summary>
@@ -299,10 +356,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
299 /// <returns></returns> 356 /// <returns></returns>
300 public static Listener GetListenerPlugin(IScriptEngine engine) 357 public static Listener GetListenerPlugin(IScriptEngine engine)
301 { 358 {
302 if (m_Listener.ContainsKey(engine)) 359 lock (staticLock)
303 return m_Listener[engine]; 360 {
304 else 361 if (m_Listener.ContainsKey(engine))
305 return null; 362 return m_Listener[engine];
363 else
364 return null;
365 }
306 } 366 }
307 367
308 public static void StateChange(IScriptEngine engine, uint localID, UUID itemID) 368 public static void StateChange(IScriptEngine engine, uint localID, UUID itemID)
@@ -332,28 +392,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
332 { 392 {
333 List<Object> data = new List<Object>(); 393 List<Object> data = new List<Object>();
334 394
335 Object[] listeners = m_Listener[engine].GetSerializationData(itemID); 395 lock (staticLock)
336 if (listeners.Length > 0)
337 { 396 {
338 data.Add("listener"); 397 Object[] listeners = m_Listener[engine].GetSerializationData(itemID);
339 data.Add(listeners.Length); 398 if (listeners.Length > 0)
340 data.AddRange(listeners); 399 {
341 } 400 data.Add("listener");
401 data.Add(listeners.Length);
402 data.AddRange(listeners);
403 }
342 404
343 Object[] timers=m_Timer[engine].GetSerializationData(itemID); 405 Object[] timers=m_Timer[engine].GetSerializationData(itemID);
344 if (timers.Length > 0) 406 if (timers.Length > 0)
345 { 407 {
346 data.Add("timer"); 408 data.Add("timer");
347 data.Add(timers.Length); 409 data.Add(timers.Length);
348 data.AddRange(timers); 410 data.AddRange(timers);
349 } 411 }
350 412
351 Object[] sensors = m_SensorRepeat[engine].GetSerializationData(itemID); 413 Object[] sensors = m_SensorRepeat[engine].GetSerializationData(itemID);
352 if (sensors.Length > 0) 414 if (sensors.Length > 0)
353 { 415 {
354 data.Add("sensor"); 416 data.Add("sensor");
355 data.Add(sensors.Length); 417 data.Add(sensors.Length);
356 data.AddRange(sensors); 418 data.AddRange(sensors);
419 }
357 } 420 }
358 421
359 return data.ToArray(); 422 return data.ToArray();
@@ -378,41 +441,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
378 441
379 idx+=len; 442 idx+=len;
380 443
444 lock (staticLock)
445 {
381 switch (type) 446 switch (type)
382 { 447 {
383 case "listener": 448 case "listener":
384 m_Listener[engine].CreateFromData(localID, itemID, 449 m_Listener[engine].CreateFromData(localID, itemID,
385 hostID, item); 450 hostID, item);
386 break; 451 break;
387 case "timer": 452 case "timer":
388 m_Timer[engine].CreateFromData(localID, itemID, 453 m_Timer[engine].CreateFromData(localID, itemID,
389 hostID, item); 454 hostID, item);
390 break; 455 break;
391 case "sensor": 456 case "sensor":
392 m_SensorRepeat[engine].CreateFromData(localID, 457 m_SensorRepeat[engine].CreateFromData(localID,
393 itemID, hostID, item); 458 itemID, hostID, item);
394 break; 459 break;
460 }
395 } 461 }
396 } 462 }
397 } 463 }
398 } 464 }
399
400 #region Check llRemoteData channels
401
402 #endregion
403
404 #region Check llListeners
405
406 #endregion
407
408 /// <summary>
409 /// If set to true then threads and stuff should try to make a graceful exit
410 /// </summary>
411 public bool PleaseShutdown
412 {
413 get { return _PleaseShutdown; }
414 set { _PleaseShutdown = value; }
415 }
416 private bool _PleaseShutdown = false;
417 } 465 }
418} 466}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 5ea14c7..7c375e6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2772,9 +2772,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2772 // send the sound, once, to all clients in range 2772 // send the sound, once, to all clients in range
2773 if (m_SoundModule != null) 2773 if (m_SoundModule != null)
2774 { 2774 {
2775 m_SoundModule.SendSound(m_host.UUID, 2775 m_SoundModule.SendSound(
2776 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, false, 0, 2776 m_host.UUID,
2777 0, false, false); 2777 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound),
2778 volume, false, m_host.SoundQueueing ? (byte)SoundFlags.Queue : (byte)SoundFlags.None,
2779 0, false, false);
2778 } 2780 }
2779 } 2781 }
2780 2782
@@ -12672,6 +12674,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12672 public void llSetSoundQueueing(int queue) 12674 public void llSetSoundQueueing(int queue)
12673 { 12675 {
12674 m_host.AddScriptLPS(1); 12676 m_host.AddScriptLPS(1);
12677
12678 if (m_SoundModule != null)
12679 m_SoundModule.SetSoundQueueing(m_host.UUID, queue == ScriptBaseClass.TRUE.value);
12675 } 12680 }
12676 12681
12677 public void llCollisionSprite(string impact_sprite) 12682 public void llCollisionSprite(string impact_sprite)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 26850c4..8da06d1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -528,8 +528,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
528 { 528 {
529 File.Delete(savedState); 529 File.Delete(savedState);
530 } 530 }
531 catch(Exception) 531 catch (Exception e)
532 { 532 {
533 m_log.Warn(
534 string.Format(
535 "[SCRIPT INSTANCE]: Could not delete script state {0} for script {1} (id {2}) in part {3} (id {4}) in object {5} in {6}. Exception ",
536 ScriptTask.Name, ScriptTask.ItemID, Part.Name, Part.UUID, Part.ParentGroup.Name, Engine.World.Name),
537 e);
533 } 538 }
534 } 539 }
535 540
@@ -567,9 +572,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
567 572
568 public bool Stop(int timeout) 573 public bool Stop(int timeout)
569 { 574 {
570// m_log.DebugFormat( 575 if (DebugLevel >= 1)
571// "[SCRIPT INSTANCE]: Stopping script {0} {1} in {2} {3} with timeout {4} {5} {6}", 576 m_log.DebugFormat(
572// ScriptName, ItemID, PrimName, ObjectID, timeout, m_InSelfDelete, DateTime.Now.Ticks); 577 "[SCRIPT INSTANCE]: Stopping script {0} {1} in {2} {3} with timeout {4} {5} {6}",
578 ScriptName, ItemID, PrimName, ObjectID, timeout, m_InSelfDelete, DateTime.Now.Ticks);
573 579
574 IScriptWorkItem workItem; 580 IScriptWorkItem workItem;
575 581
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index b524a18..3e69ab9 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -546,21 +546,33 @@ namespace OpenSim.Region.ScriptEngine.Shared
546 546
547 set {m_data = value; } 547 set {m_data = value; }
548 } 548 }
549 // Function to obtain LSL type from an index. This is needed 549
550 // because LSL lists allow for multiple types, and safely 550 /// <summary>
551 // iterating in them requires a type check. 551 /// Obtain LSL type from an index.
552 /// </summary>
553 /// <remarks>
554 /// This is needed because LSL lists allow for multiple types, and safely
555 /// iterating in them requires a type check.
556 /// </remarks>
557 /// <returns></returns>
558 /// <param name='itemIndex'></param>
552 public Type GetLSLListItemType(int itemIndex) 559 public Type GetLSLListItemType(int itemIndex)
553 { 560 {
554 return m_data[itemIndex].GetType(); 561 return m_data[itemIndex].GetType();
555 } 562 }
556 563
557 // Member functions to obtain item as specific types. 564 /// <summary>
558 // For cases where implicit conversions would apply if items 565 /// Obtain float from an index.
559 // were not in a list (e.g. integer to float, but not float 566 /// </summary>
560 // to integer) functions check for alternate types so as to 567 /// <remarks>
561 // down-cast from Object to the correct type. 568 /// For cases where implicit conversions would apply if items
562 // Note: no checks for item index being valid are performed 569 /// were not in a list (e.g. integer to float, but not float
563 570 /// to integer) functions check for alternate types so as to
571 /// down-cast from Object to the correct type.
572 /// Note: no checks for item index being valid are performed
573 /// </remarks>
574 /// <returns></returns>
575 /// <param name='itemIndex'></param>
564 public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex) 576 public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex)
565 { 577 {
566 if (m_data[itemIndex] is LSL_Types.LSLInteger) 578 if (m_data[itemIndex] is LSL_Types.LSLInteger)
@@ -591,26 +603,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
591 603
592 public LSL_Types.LSLString GetLSLStringItem(int itemIndex) 604 public LSL_Types.LSLString GetLSLStringItem(int itemIndex)
593 { 605 {
594 if (m_data[itemIndex] is LSL_Types.key) 606 if (m_data[itemIndex] is LSL_Types.key)
595 { 607 {
596 return (LSL_Types.key)m_data[itemIndex]; 608 return (LSL_Types.key)m_data[itemIndex];
597 } 609 }
598 else if (m_data[itemIndex] is String) 610 else
599 { 611 {
600 return new LSL_Types.LSLString((string)m_data[itemIndex]); 612 return new LSL_Types.LSLString(m_data[itemIndex].ToString());
601 } 613 }
602 else if (m_data[itemIndex] is LSL_Types.LSLFloat)
603 {
604 return new LSL_Types.LSLString((LSLFloat)m_data[itemIndex]);
605 }
606 else if (m_data[itemIndex] is LSL_Types.LSLInteger)
607 {
608 return new LSL_Types.LSLString((LSLInteger)m_data[itemIndex]);
609 }
610 else
611 {
612 return (LSL_Types.LSLString)m_data[itemIndex];
613 }
614 } 614 }
615 615
616 public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) 616 public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex)
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 17243ab..9d1e143 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -551,7 +551,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
551 /// <param name="instance"></param> 551 /// <param name="instance"></param>
552 /// <param name="keySelector">Basis on which to sort output. Can be null if no sort needs to take place</param> 552 /// <param name="keySelector">Basis on which to sort output. Can be null if no sort needs to take place</param>
553 private void HandleScriptsAction<TKey>( 553 private void HandleScriptsAction<TKey>(
554 string[] cmdparams, Action<IScriptInstance> action, Func<IScriptInstance, TKey> keySelector) 554 string[] cmdparams, Action<IScriptInstance> action, System.Func<IScriptInstance, TKey> keySelector)
555 { 555 {
556 if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_Scene)) 556 if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_Scene))
557 return; 557 return;
@@ -609,7 +609,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
609 if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_Scene)) 609 if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_Scene))
610 return; 610 return;
611 611
612 MainConsole.Instance.OutputFormat(GetStatusReport()); 612 MainConsole.Instance.Output(GetStatusReport());
613 } 613 }
614 614
615 public string GetStatusReport() 615 public string GetStatusReport()
@@ -708,7 +708,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
708 sb.AppendFormat("Containing part UUID: {0}\n", instance.ObjectID); 708 sb.AppendFormat("Containing part UUID: {0}\n", instance.ObjectID);
709 sb.AppendFormat("Position : {0}\n", sop.AbsolutePosition); 709 sb.AppendFormat("Position : {0}\n", sop.AbsolutePosition);
710 710
711 MainConsole.Instance.OutputFormat(sb.ToString()); 711 MainConsole.Instance.Output(sb.ToString());
712 } 712 }
713 713
714 private void HandleSuspendScript(IScriptInstance instance) 714 private void HandleSuspendScript(IScriptInstance instance)
@@ -1599,7 +1599,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1599 startInfo.MaxWorkerThreads = maxThreads; 1599 startInfo.MaxWorkerThreads = maxThreads;
1600 startInfo.MinWorkerThreads = minThreads; 1600 startInfo.MinWorkerThreads = minThreads;
1601 startInfo.ThreadPriority = threadPriority;; 1601 startInfo.ThreadPriority = threadPriority;;
1602 startInfo.StackSize = stackSize; 1602 startInfo.MaxStackSize = stackSize;
1603 startInfo.StartSuspended = true; 1603 startInfo.StartSuspended = true;
1604 1604
1605 m_ThreadPool = new SmartThreadPool(startInfo); 1605 m_ThreadPool = new SmartThreadPool(startInfo);
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs b/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs
index 8dd7677..9d9dee1 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs
@@ -52,16 +52,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
52 return wr.Cancel(); 52 return wr.Cancel();
53 } 53 }
54 54
55 public void Abort() 55 public bool Abort()
56 { 56 {
57 wr.Abort(); 57 return wr.Cancel(true);
58 } 58 }
59 59
60 public bool Wait(int t) 60 public bool Wait(int t)
61 { 61 {
62 // We use the integer version of WaitAll because the current version of SmartThreadPool has a bug with the 62 // We use the integer version of WaitAll because the current version of SmartThreadPool has a bug with the
63 // TimeSpan version. The number of milliseconds in TimeSpan is an int64 so when STP casts it down to an 63 // TimeSpan version. The number of milliseconds in TimeSpan is an int64 so when STP casts it down to an
64 // int (32-bit) we can end up with bad values. This occurs on Windows though curious not on Mono 2.10.8 64 // int (32-bit) we can end up with bad values. This occurs on Windows though curiously not on Mono 2.10.8
65 // (or very likely other versions of Mono at least up until 3.0.3). 65 // (or very likely other versions of Mono at least up until 3.0.3).
66 return SmartThreadPool.WaitAll(new IWorkItemResult[] {wr}, t, false); 66 return SmartThreadPool.WaitAll(new IWorkItemResult[] {wr}, t, false);
67 } 67 }
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs
index 210a314..08ba50d 100644
--- a/OpenSim/Server/Base/ServerUtils.cs
+++ b/OpenSim/Server/Base/ServerUtils.cs
@@ -286,6 +286,7 @@ namespace OpenSim.Server.Base
286 e.InnerException == null ? e.Message : e.InnerException.Message, 286 e.InnerException == null ? e.Message : e.InnerException.Message,
287 e.StackTrace); 287 e.StackTrace);
288 } 288 }
289 m_log.ErrorFormat("[SERVER UTILS]: Error loading plugin {0}: {1} args.Length {2}", dllName, e.Message, args.Length);
289 return null; 290 return null;
290 } 291 }
291 292
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index 7c8e6b7..b13c87d 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -171,11 +171,6 @@ namespace OpenSim.Server.Base
171 171
172 m_console = MainConsole.Instance; 172 m_console = MainConsole.Instance;
173 173
174 // Configure the appenders for log4net
175 //
176 OpenSimAppender consoleAppender = null;
177 FileAppender fileAppender = null;
178
179 if (logConfig != null) 174 if (logConfig != null)
180 { 175 {
181 FileInfo cfg = new FileInfo(logConfig); 176 FileInfo cfg = new FileInfo(logConfig);
diff --git a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
index 0d4990a..ffe2f36 100644
--- a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
@@ -76,10 +76,14 @@ namespace OpenSim.Server.Handlers.Hypergrid
76 server.AddStreamHandler(new GatekeeperAgentHandler(m_GatekeeperService, m_Proxy)); 76 server.AddStreamHandler(new GatekeeperAgentHandler(m_GatekeeperService, m_Proxy));
77 } 77 }
78 78
79 public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server) 79 public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, string configName)
80 : this(config, server, null) 80 : this(config, server, (ISimulationService)null)
81 { 81 {
82 } 82 }
83 83
84 public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server)
85 : this(config, server, String.Empty)
86 {
87 }
84 } 88 }
85} 89}
diff --git a/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs
index 80eb5d2..8145a21 100644
--- a/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs
@@ -54,10 +54,15 @@ namespace OpenSim.Server.Handlers.Hypergrid
54 private IInstantMessage m_IMService; 54 private IInstantMessage m_IMService;
55 55
56 public InstantMessageServerConnector(IConfigSource config, IHttpServer server) : 56 public InstantMessageServerConnector(IConfigSource config, IHttpServer server) :
57 this(config, server, null) 57 this(config, server, (IInstantMessageSimConnector)null)
58 { 58 {
59 } 59 }
60 60
61 public InstantMessageServerConnector(IConfigSource config, IHttpServer server, string configName) :
62 this(config, server)
63 {
64 }
65
61 public InstantMessageServerConnector(IConfigSource config, IHttpServer server, IInstantMessageSimConnector simConnector) : 66 public InstantMessageServerConnector(IConfigSource config, IHttpServer server, IInstantMessageSimConnector simConnector) :
62 base(config, server, String.Empty) 67 base(config, server, String.Empty)
63 { 68 {
diff --git a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
index db62aaa..b20f467 100644
--- a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
@@ -62,10 +62,15 @@ namespace OpenSim.Server.Handlers.Hypergrid
62 private bool m_VerifyCallers = false; 62 private bool m_VerifyCallers = false;
63 63
64 public UserAgentServerConnector(IConfigSource config, IHttpServer server) : 64 public UserAgentServerConnector(IConfigSource config, IHttpServer server) :
65 this(config, server, null) 65 this(config, server, (IFriendsSimConnector)null)
66 { 66 {
67 } 67 }
68 68
69 public UserAgentServerConnector(IConfigSource config, IHttpServer server, string configName) :
70 this(config, server)
71 {
72 }
73
69 public UserAgentServerConnector(IConfigSource config, IHttpServer server, IFriendsSimConnector friendsConnector) : 74 public UserAgentServerConnector(IConfigSource config, IHttpServer server, IFriendsSimConnector friendsConnector) :
70 base(config, server, String.Empty) 75 base(config, server, String.Empty)
71 { 76 {
diff --git a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
index 9a7ad34..1fb0dbc 100644
--- a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
+++ b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
@@ -60,8 +60,8 @@ namespace OpenSim.Server.Handlers.Login
60 InitializeHandlers(server); 60 InitializeHandlers(server);
61 } 61 }
62 62
63 public LLLoginServiceInConnector(IConfigSource config, IHttpServer server) : 63 public LLLoginServiceInConnector(IConfigSource config, IHttpServer server, string configName) :
64 base(config, server, String.Empty) 64 base(config, server, configName)
65 { 65 {
66 string loginService = ReadLocalServiceFromConfig(config); 66 string loginService = ReadLocalServiceFromConfig(config);
67 67
@@ -72,6 +72,11 @@ namespace OpenSim.Server.Handlers.Login
72 InitializeHandlers(server); 72 InitializeHandlers(server);
73 } 73 }
74 74
75 public LLLoginServiceInConnector(IConfigSource config, IHttpServer server) :
76 this(config, server, String.Empty)
77 {
78 }
79
75 private string ReadLocalServiceFromConfig(IConfigSource config) 80 private string ReadLocalServiceFromConfig(IConfigSource config)
76 { 81 {
77 IConfig serverConfig = config.Configs["LoginService"]; 82 IConfig serverConfig = config.Configs["LoginService"];
diff --git a/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs b/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs
new file mode 100644
index 0000000..f9a520a
--- /dev/null
+++ b/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs
@@ -0,0 +1,114 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Reflection;
30using Nini.Config;
31using OpenSim.Server.Base;
32using OpenSim.Services.Interfaces;
33using OpenSim.Framework.Servers.HttpServer;
34using OpenSim.Framework;
35using OpenSim.Server.Handlers.Base;
36using log4net;
37
38namespace OpenSim.Server.Handlers.Profiles
39{
40 public class UserProfilesConnector: ServiceConnector
41 {
42 static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43
44
45 // Our Local Module
46 public IUserProfilesService ServiceModule
47 {
48 get; private set;
49 }
50
51 // The HTTP server.
52 public IHttpServer Server
53 {
54 get; private set;
55 }
56
57 public string ConfigName
58 {
59 get; private set;
60 }
61
62 public bool Enabled
63 {
64 get; private set;
65 }
66
67 public UserProfilesConnector(IConfigSource config, IHttpServer server, string configName) :
68 base(config, server, configName)
69 {
70 ConfigName = "UserProfilesService";
71 if(!string.IsNullOrEmpty(configName))
72 ConfigName = configName;
73
74 IConfig serverConfig = config.Configs[ConfigName];
75 if (serverConfig == null)
76 throw new Exception(String.Format("No section {0} in config file", ConfigName));
77
78 if(!serverConfig.GetBoolean("Enabled",false))
79 {
80 Enabled = false;
81 return;
82 }
83
84 Enabled = true;
85
86 Server = server;
87
88 string service = serverConfig.GetString("LocalServiceModule", String.Empty);
89
90 Object[] args = new Object[] { config, ConfigName };
91 ServiceModule = ServerUtils.LoadPlugin<IUserProfilesService>(service, args);
92
93 JsonRpcProfileHandlers handler = new JsonRpcProfileHandlers(ServiceModule);
94
95 Server.AddJsonRPCHandler("avatarclassifiedsrequest", handler.AvatarClassifiedsRequest);
96 Server.AddJsonRPCHandler("classified_update", handler.ClassifiedUpdate);
97 Server.AddJsonRPCHandler("classifieds_info_query", handler.ClassifiedInfoRequest);
98 Server.AddJsonRPCHandler("classified_delete", handler.ClassifiedDelete);
99 Server.AddJsonRPCHandler("avatarpicksrequest", handler.AvatarPicksRequest);
100 Server.AddJsonRPCHandler("pickinforequest", handler.PickInfoRequest);
101 Server.AddJsonRPCHandler("picks_update", handler.PicksUpdate);
102 Server.AddJsonRPCHandler("picks_delete", handler.PicksDelete);
103 Server.AddJsonRPCHandler("avatarnotesrequest", handler.AvatarNotesRequest);
104 Server.AddJsonRPCHandler("avatar_notes_update", handler.NotesUpdate);
105 Server.AddJsonRPCHandler("avatar_properties_request", handler.AvatarPropertiesRequest);
106 Server.AddJsonRPCHandler("avatar_properties_update", handler.AvatarPropertiesUpdate);
107 Server.AddJsonRPCHandler("avatar_interests_update", handler.AvatarInterestsUpdate);
108 Server.AddJsonRPCHandler("image_assets_request", handler.AvatarImageAssetsRequest);
109 Server.AddJsonRPCHandler("user_data_request", handler.RequestUserAppData);
110 Server.AddJsonRPCHandler("user_data_update", handler.UpdateUserAppData);
111 }
112 }
113}
114
diff --git a/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs
new file mode 100644
index 0000000..f5f0794
--- /dev/null
+++ b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs
@@ -0,0 +1,461 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Reflection;
30using OpenMetaverse;
31using OpenMetaverse.StructuredData;
32using log4net;
33using OpenSim.Services.Interfaces;
34using OpenSim.Framework.Servers.HttpServer;
35using OpenSim.Framework;
36
37namespace OpenSim.Server.Handlers
38{
39 public class UserProfilesHandlers
40 {
41 public UserProfilesHandlers ()
42 {
43 }
44 }
45
46 public class JsonRpcProfileHandlers
47 {
48 static readonly ILog m_log =
49 LogManager.GetLogger(
50 MethodBase.GetCurrentMethod().DeclaringType);
51
52 public IUserProfilesService Service
53 {
54 get; private set;
55 }
56
57 public JsonRpcProfileHandlers(IUserProfilesService service)
58 {
59 Service = service;
60 }
61
62 #region Classifieds
63 /// <summary>
64 /// Request avatar's classified ads.
65 /// </summary>
66 /// <returns>
67 /// An array containing all the calassified uuid and it's name created by the creator id
68 /// </returns>
69 /// <param name='json'>
70 /// Our parameters are in the OSDMap json["params"]
71 /// </param>
72 /// <param name='response'>
73 /// If set to <c>true</c> response.
74 /// </param>
75 public bool AvatarClassifiedsRequest(OSDMap json, ref JsonRpcResponse response)
76 {
77 if(!json.ContainsKey("params"))
78 {
79 response.Error.Code = ErrorCode.ParseError;
80 m_log.DebugFormat ("Classified Request");
81 return false;
82 }
83
84 OSDMap request = (OSDMap)json["params"];
85 UUID creatorId = new UUID(request["creatorId"].AsString());
86
87
88 OSDArray data = (OSDArray) Service.AvatarClassifiedsRequest(creatorId);
89 response.Result = data;
90
91 return true;
92 }
93
94 public bool ClassifiedUpdate(OSDMap json, ref JsonRpcResponse response)
95 {
96 if(!json.ContainsKey("params"))
97 {
98 response.Error.Code = ErrorCode.ParseError;
99 response.Error.Message = "Error parsing classified update request";
100 m_log.DebugFormat ("Classified Update Request");
101 return false;
102 }
103
104 string result = string.Empty;
105 UserClassifiedAdd ad = new UserClassifiedAdd();
106 object Ad = (object)ad;
107 OSD.DeserializeMembers(ref Ad, (OSDMap)json["params"]);
108 if(Service.ClassifiedUpdate(ad, ref result))
109 {
110 response.Result = OSD.SerializeMembers(ad);
111 return true;
112 }
113
114 response.Error.Code = ErrorCode.InternalError;
115 response.Error.Message = string.Format("{0}", result);
116 return false;
117 }
118
119 public bool ClassifiedDelete(OSDMap json, ref JsonRpcResponse response)
120 {
121 if(!json.ContainsKey("params"))
122 {
123 response.Error.Code = ErrorCode.ParseError;
124 m_log.DebugFormat ("Classified Delete Request");
125 return false;
126 }
127
128 OSDMap request = (OSDMap)json["params"];
129 UUID classifiedId = new UUID(request["classifiedID"].AsString());
130
131 OSDMap res = new OSDMap();
132 res["result"] = OSD.FromString("success");
133 response.Result = res;
134
135 return true;
136
137 }
138
139 public bool ClassifiedInfoRequest(OSDMap json, ref JsonRpcResponse response)
140 {
141 if(!json.ContainsKey("params"))
142 {
143 response.Error.Code = ErrorCode.ParseError;
144 response.Error.Message = "no parameters supplied";
145 m_log.DebugFormat ("Classified Info Request");
146 return false;
147 }
148
149 string result = string.Empty;
150 UserClassifiedAdd ad = new UserClassifiedAdd();
151 object Ad = (object)ad;
152 OSD.DeserializeMembers(ref Ad, (OSDMap)json["params"]);
153 if(Service.ClassifiedInfoRequest(ref ad, ref result))
154 {
155 response.Result = OSD.SerializeMembers(ad);
156 return true;
157 }
158
159 response.Error.Code = ErrorCode.InternalError;
160 response.Error.Message = string.Format("{0}", result);
161 return false;
162 }
163 #endregion Classifieds
164
165 #region Picks
166 public bool AvatarPicksRequest(OSDMap json, ref JsonRpcResponse response)
167 {
168 if(!json.ContainsKey("params"))
169 {
170 response.Error.Code = ErrorCode.ParseError;
171 m_log.DebugFormat ("Avatar Picks Request");
172 return false;
173 }
174
175 OSDMap request = (OSDMap)json["params"];
176 UUID creatorId = new UUID(request["creatorId"].AsString());
177
178
179 OSDArray data = (OSDArray) Service.AvatarPicksRequest(creatorId);
180 response.Result = data;
181
182 return true;
183 }
184
185 public bool PickInfoRequest(OSDMap json, ref JsonRpcResponse response)
186 {
187 if(!json.ContainsKey("params"))
188 {
189 response.Error.Code = ErrorCode.ParseError;
190 response.Error.Message = "no parameters supplied";
191 m_log.DebugFormat ("Avatar Picks Info Request");
192 return false;
193 }
194
195 string result = string.Empty;
196 UserProfilePick pick = new UserProfilePick();
197 object Pick = (object)pick;
198 OSD.DeserializeMembers(ref Pick, (OSDMap)json["params"]);
199 if(Service.PickInfoRequest(ref pick, ref result))
200 {
201 response.Result = OSD.SerializeMembers(pick);
202 return true;
203 }
204
205 response.Error.Code = ErrorCode.InternalError;
206 response.Error.Message = string.Format("{0}", result);
207 return false;
208 }
209
210 public bool PicksUpdate(OSDMap json, ref JsonRpcResponse response)
211 {
212 if(!json.ContainsKey("params"))
213 {
214 response.Error.Code = ErrorCode.ParseError;
215 response.Error.Message = "no parameters supplied";
216 m_log.DebugFormat ("Avatar Picks Update Request");
217 return false;
218 }
219
220 string result = string.Empty;
221 UserProfilePick pick = new UserProfilePick();
222 object Pick = (object)pick;
223 OSD.DeserializeMembers(ref Pick, (OSDMap)json["params"]);
224 if(Service.PicksUpdate(ref pick, ref result))
225 {
226 response.Result = OSD.SerializeMembers(pick);
227 return true;
228 }
229
230 response.Error.Code = ErrorCode.InternalError;
231 response.Error.Message = "unable to update pick";
232
233 return false;
234 }
235
236 public bool PicksDelete(OSDMap json, ref JsonRpcResponse response)
237 {
238 if(!json.ContainsKey("params"))
239 {
240 response.Error.Code = ErrorCode.ParseError;
241 m_log.DebugFormat ("Avatar Picks Delete Request");
242 return false;
243 }
244
245 OSDMap request = (OSDMap)json["params"];
246 UUID pickId = new UUID(request["pickId"].AsString());
247 if(Service.PicksDelete(pickId))
248 return true;
249
250 response.Error.Code = ErrorCode.InternalError;
251 response.Error.Message = "data error removing record";
252 return false;
253 }
254 #endregion Picks
255
256 #region Notes
257 public bool AvatarNotesRequest(OSDMap json, ref JsonRpcResponse response)
258 {
259 if(!json.ContainsKey("params"))
260 {
261 response.Error.Code = ErrorCode.ParseError;
262 response.Error.Message = "Params missing";
263 m_log.DebugFormat ("Avatar Notes Request");
264 return false;
265 }
266
267 string result = string.Empty;
268 UserProfileNotes note = new UserProfileNotes();
269 object Note = (object)note;
270 OSD.DeserializeMembers(ref Note, (OSDMap)json["params"]);
271 if(Service.AvatarNotesRequest(ref note))
272 {
273 response.Result = OSD.SerializeMembers(note);
274 return true;
275 }
276
277 object Notes = (object) note;
278 OSD.DeserializeMembers(ref Notes, (OSDMap)json["params"]);
279 return true;
280 }
281
282 public bool NotesUpdate(OSDMap json, ref JsonRpcResponse response)
283 {
284 if(!json.ContainsKey("params"))
285 {
286 response.Error.Code = ErrorCode.ParseError;
287 response.Error.Message = "No parameters";
288 m_log.DebugFormat ("Avatar Notes Update Request");
289 return false;
290 }
291
292 string result = string.Empty;
293 UserProfileNotes note = new UserProfileNotes();
294 object Notes = (object) note;
295 OSD.DeserializeMembers(ref Notes, (OSDMap)json["params"]);
296 if(Service.NotesUpdate(ref note, ref result))
297 {
298 response.Result = OSD.SerializeMembers(note);
299 return true;
300 }
301 return true;
302 }
303 #endregion Notes
304
305 #region Profile Properties
306 public bool AvatarPropertiesRequest(OSDMap json, ref JsonRpcResponse response)
307 {
308 if(!json.ContainsKey("params"))
309 {
310 response.Error.Code = ErrorCode.ParseError;
311 response.Error.Message = "no parameters supplied";
312 m_log.DebugFormat ("Avatar Properties Request");
313 return false;
314 }
315
316 string result = string.Empty;
317 UserProfileProperties props = new UserProfileProperties();
318 object Props = (object)props;
319 OSD.DeserializeMembers(ref Props, (OSDMap)json["params"]);
320 if(Service.AvatarPropertiesRequest(ref props, ref result))
321 {
322 response.Result = OSD.SerializeMembers(props);
323 return true;
324 }
325
326 response.Error.Code = ErrorCode.InternalError;
327 response.Error.Message = string.Format("{0}", result);
328 return false;
329 }
330
331 public bool AvatarPropertiesUpdate(OSDMap json, ref JsonRpcResponse response)
332 {
333 if(!json.ContainsKey("params"))
334 {
335 response.Error.Code = ErrorCode.ParseError;
336 response.Error.Message = "no parameters supplied";
337 m_log.DebugFormat ("Avatar Properties Update Request");
338 return false;
339 }
340
341 string result = string.Empty;
342 UserProfileProperties props = new UserProfileProperties();
343 object Props = (object)props;
344 OSD.DeserializeMembers(ref Props, (OSDMap)json["params"]);
345 if(Service.AvatarPropertiesUpdate(ref props, ref result))
346 {
347 response.Result = OSD.SerializeMembers(props);
348 return true;
349 }
350
351 response.Error.Code = ErrorCode.InternalError;
352 response.Error.Message = string.Format("{0}", result);
353 return false;
354 }
355 #endregion Profile Properties
356
357 #region Interests
358 public bool AvatarInterestsUpdate(OSDMap json, ref JsonRpcResponse response)
359 {
360 if(!json.ContainsKey("params"))
361 {
362 response.Error.Code = ErrorCode.ParseError;
363 response.Error.Message = "no parameters supplied";
364 m_log.DebugFormat ("Avatar Interests Update Request");
365 return false;
366 }
367
368 string result = string.Empty;
369 UserProfileProperties props = new UserProfileProperties();
370 object Props = (object)props;
371 OSD.DeserializeMembers(ref Props, (OSDMap)json["params"]);
372 if(Service.AvatarInterestsUpdate(props, ref result))
373 {
374 response.Result = OSD.SerializeMembers(props);
375 return true;
376 }
377
378 response.Error.Code = ErrorCode.InternalError;
379 response.Error.Message = string.Format("{0}", result);
380 return false;
381 }
382 #endregion Interests
383
384 #region Utility
385 public bool AvatarImageAssetsRequest(OSDMap json, ref JsonRpcResponse response)
386 {
387 if(!json.ContainsKey("params"))
388 {
389 response.Error.Code = ErrorCode.ParseError;
390 m_log.DebugFormat ("Avatar Image Assets Request");
391 return false;
392 }
393
394 OSDMap request = (OSDMap)json["params"];
395 UUID avatarId = new UUID(request["avatarId"].AsString());
396
397 OSDArray data = (OSDArray) Service.AvatarImageAssetsRequest(avatarId);
398 response.Result = data;
399
400 return true;
401 }
402 #endregion Utiltiy
403
404 #region UserData
405 public bool RequestUserAppData(OSDMap json, ref JsonRpcResponse response)
406 {
407 if(!json.ContainsKey("params"))
408 {
409 response.Error.Code = ErrorCode.ParseError;
410 response.Error.Message = "no parameters supplied";
411 m_log.DebugFormat ("User Application Service URL Request: No Parameters!");
412 return false;
413 }
414
415 string result = string.Empty;
416 UserAppData props = new UserAppData();
417 object Props = (object)props;
418 OSD.DeserializeMembers(ref Props, (OSDMap)json["params"]);
419 if(Service.RequestUserAppData(ref props, ref result))
420 {
421 OSDMap res = new OSDMap();
422 res["result"] = OSD.FromString("success");
423 res["token"] = OSD.FromString (result);
424 response.Result = res;
425
426 return true;
427 }
428
429 response.Error.Code = ErrorCode.InternalError;
430 response.Error.Message = string.Format("{0}", result);
431 return false;
432 }
433
434 public bool UpdateUserAppData(OSDMap json, ref JsonRpcResponse response)
435 {
436 if(!json.ContainsKey("params"))
437 {
438 response.Error.Code = ErrorCode.ParseError;
439 response.Error.Message = "no parameters supplied";
440 m_log.DebugFormat ("User App Data Update Request");
441 return false;
442 }
443
444 string result = string.Empty;
445 UserAppData props = new UserAppData();
446 object Props = (object)props;
447 OSD.DeserializeMembers(ref Props, (OSDMap)json["params"]);
448 if(Service.SetUserAppData(props, ref result))
449 {
450 response.Result = OSD.SerializeMembers(props);
451 return true;
452 }
453
454 response.Error.Code = ErrorCode.InternalError;
455 response.Error.Message = string.Format("{0}", result);
456 return false;
457 }
458 #endregion UserData
459 }
460}
461
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
index 0bd8269..9b34298 100644
--- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
@@ -241,7 +241,7 @@ namespace OpenSim.Server.Handlers.Simulation
241 if (action.Equals("release")) 241 if (action.Equals("release"))
242 ReleaseAgent(regionID, id); 242 ReleaseAgent(regionID, id);
243 else 243 else
244 m_SimulationService.CloseAgent(destination, id); 244 Util.FireAndForget(delegate { m_SimulationService.CloseAgent(destination, id); });
245 245
246 responsedata["int_response_code"] = HttpStatusCode.OK; 246 responsedata["int_response_code"] = HttpStatusCode.OK;
247 responsedata["str_response_string"] = "OpenSim agent " + id.ToString(); 247 responsedata["str_response_string"] = "OpenSim agent " + id.ToString();
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index 854bea4..7bb06fb 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -137,10 +137,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
137 userID, sessionID, secureSessionID); 137 userID, sessionID, secureSessionID);
138 138
139 NameValueCollection requestArgs = new NameValueCollection 139 NameValueCollection requestArgs = new NameValueCollection
140 { 140 {
141 { "RequestMethod", "AddSession" }, 141 { "RequestMethod", "AddSession" },
142 { "UserID", userID.ToString() } 142 { "UserID", userID.ToString() }
143 }; 143 };
144
144 if (sessionID != UUID.Zero) 145 if (sessionID != UUID.Zero)
145 { 146 {
146 requestArgs["SessionID"] = sessionID.ToString(); 147 requestArgs["SessionID"] = sessionID.ToString();
@@ -158,13 +159,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
158 159
159 public bool LogoutAgent(UUID sessionID) 160 public bool LogoutAgent(UUID sessionID)
160 { 161 {
161// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID); 162 // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID);
162 163
163 NameValueCollection requestArgs = new NameValueCollection 164 NameValueCollection requestArgs = new NameValueCollection
164 { 165 {
165 { "RequestMethod", "RemoveSession" }, 166 { "RequestMethod", "RemoveSession" },
166 { "SessionID", sessionID.ToString() } 167 { "SessionID", sessionID.ToString() }
167 }; 168 };
168 169
169 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 170 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
170 bool success = response["Success"].AsBoolean(); 171 bool success = response["Success"].AsBoolean();
@@ -177,13 +178,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
177 178
178 public bool LogoutRegionAgents(UUID regionID) 179 public bool LogoutRegionAgents(UUID regionID)
179 { 180 {
180// m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID); 181 // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID);
181 182
182 NameValueCollection requestArgs = new NameValueCollection 183 NameValueCollection requestArgs = new NameValueCollection
183 { 184 {
184 { "RequestMethod", "RemoveSessions" }, 185 { "RequestMethod", "RemoveSessions" },
185 { "SceneID", regionID.ToString() } 186 { "SceneID", regionID.ToString() }
186 }; 187 };
187 188
188 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 189 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
189 bool success = response["Success"].AsBoolean(); 190 bool success = response["Success"].AsBoolean();
@@ -202,49 +203,46 @@ namespace OpenSim.Services.Connectors.SimianGrid
202 203
203 public PresenceInfo GetAgent(UUID sessionID) 204 public PresenceInfo GetAgent(UUID sessionID)
204 { 205 {
205// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent with sessionID " + sessionID); 206 OSDMap sessionResponse = GetSessionDataFromSessionID(sessionID);
206 207 if (sessionResponse == null)
207 NameValueCollection requestArgs = new NameValueCollection
208 {
209 { "RequestMethod", "GetSession" },
210 { "SessionID", sessionID.ToString() }
211 };
212
213 OSDMap sessionResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
214 if (sessionResponse["Success"].AsBoolean())
215 { 208 {
216 UUID userID = sessionResponse["UserID"].AsUUID(); 209 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session {0}: {1}",sessionID.ToString(),sessionResponse["Message"].AsString());
217 m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); 210 return null;
218
219 requestArgs = new NameValueCollection
220 {
221 { "RequestMethod", "GetUser" },
222 { "UserID", userID.ToString() }
223 };
224
225 OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
226 if (userResponse["Success"].AsBoolean())
227 return ResponseToPresenceInfo(sessionResponse, userResponse);
228 else
229 m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString());
230 } 211 }
231 else 212
213 UUID userID = sessionResponse["UserID"].AsUUID();
214 OSDMap userResponse = GetUserData(userID);
215 if (userResponse == null)
232 { 216 {
233 m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session " + sessionID + ": " + sessionResponse["Message"].AsString()); 217 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}: {1}",userID.ToString(),userResponse["Message"].AsString());
218 return null;
234 } 219 }
235 220
236 return null; 221 return ResponseToPresenceInfo(sessionResponse);
237 } 222 }
238 223
239 public PresenceInfo[] GetAgents(string[] userIDs) 224 public PresenceInfo[] GetAgents(string[] userIDs)
240 { 225 {
241 List<PresenceInfo> presences = new List<PresenceInfo>(userIDs.Length); 226 List<PresenceInfo> presences = new List<PresenceInfo>();
242 227
243 for (int i = 0; i < userIDs.Length; i++) 228 NameValueCollection requestArgs = new NameValueCollection
229 {
230 { "RequestMethod", "GetSessions" },
231 { "UserIDList", String.Join(",",userIDs) }
232 };
233
234 OSDMap sessionListResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
235 if (! sessionListResponse["Success"].AsBoolean())
244 { 236 {
245 UUID userID; 237 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions: {0}",sessionListResponse["Message"].AsString());
246 if (UUID.TryParse(userIDs[i], out userID) && userID != UUID.Zero) 238 return null;
247 presences.AddRange(GetSessions(userID)); 239 }
240
241 OSDArray sessionList = sessionListResponse["Sessions"] as OSDArray;
242 for (int i = 0; i < sessionList.Count; i++)
243 {
244 OSDMap sessionInfo = sessionList[i] as OSDMap;
245 presences.Add(ResponseToPresenceInfo(sessionInfo));
248 } 246 }
249 247
250 return presences.ToArray(); 248 return presences.ToArray();
@@ -262,7 +260,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
262 260
263 public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) 261 public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
264 { 262 {
265// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID); 263 // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);
266 264
267 // Remove the session to mark this user offline 265 // Remove the session to mark this user offline
268 if (!LogoutAgent(sessionID)) 266 if (!LogoutAgent(sessionID))
@@ -270,11 +268,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
270 268
271 // Save our last position as user data 269 // Save our last position as user data
272 NameValueCollection requestArgs = new NameValueCollection 270 NameValueCollection requestArgs = new NameValueCollection
273 { 271 {
274 { "RequestMethod", "AddUserData" }, 272 { "RequestMethod", "AddUserData" },
275 { "UserID", userID.ToString() }, 273 { "UserID", userID.ToString() },
276 { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) } 274 { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) }
277 }; 275 };
278 276
279 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 277 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
280 bool success = response["Success"].AsBoolean(); 278 bool success = response["Success"].AsBoolean();
@@ -287,14 +285,14 @@ namespace OpenSim.Services.Connectors.SimianGrid
287 285
288 public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) 286 public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
289 { 287 {
290// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID); 288 // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID);
291 289
292 NameValueCollection requestArgs = new NameValueCollection 290 NameValueCollection requestArgs = new NameValueCollection
293 { 291 {
294 { "RequestMethod", "AddUserData" }, 292 { "RequestMethod", "AddUserData" },
295 { "UserID", userID.ToString() }, 293 { "UserID", userID.ToString() },
296 { "HomeLocation", SerializeLocation(regionID, position, lookAt) } 294 { "HomeLocation", SerializeLocation(regionID, position, lookAt) }
297 }; 295 };
298 296
299 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 297 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
300 bool success = response["Success"].AsBoolean(); 298 bool success = response["Success"].AsBoolean();
@@ -312,23 +310,14 @@ namespace OpenSim.Services.Connectors.SimianGrid
312 310
313 public GridUserInfo GetGridUserInfo(string user) 311 public GridUserInfo GetGridUserInfo(string user)
314 { 312 {
315// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user); 313 // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user);
316 314
317 UUID userID = new UUID(user); 315 UUID userID = new UUID(user);
318// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); 316 OSDMap userResponse = GetUserData(userID);
319 317 if (userResponse != null)
320 NameValueCollection requestArgs = new NameValueCollection
321 {
322 { "RequestMethod", "GetUser" },
323 { "UserID", userID.ToString() }
324 };
325
326 OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs);
327 if (userResponse["Success"].AsBoolean())
328 return ResponseToGridUserInfo(userResponse); 318 return ResponseToGridUserInfo(userResponse);
329 else
330 m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString());
331 319
320 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}: {1}",userID,userResponse["Message"].AsString());
332 return null; 321 return null;
333 } 322 }
334 323
@@ -338,65 +327,49 @@ namespace OpenSim.Services.Connectors.SimianGrid
338 327
339 private OSDMap GetUserData(UUID userID) 328 private OSDMap GetUserData(UUID userID)
340 { 329 {
341// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); 330 // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID);
342 331
343 NameValueCollection requestArgs = new NameValueCollection 332 NameValueCollection requestArgs = new NameValueCollection
344 { 333 {
345 { "RequestMethod", "GetUser" }, 334 { "RequestMethod", "GetUser" },
346 { "UserID", userID.ToString() } 335 { "UserID", userID.ToString() }
347 }; 336 };
348 337
349 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 338 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
350 if (response["Success"].AsBoolean() && response["User"] is OSDMap) 339 if (response["Success"].AsBoolean() && response["User"] is OSDMap)
351 return response; 340 return response;
352 else
353 m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + response["Message"].AsString());
354 341
342 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}; {1}",userID.ToString(),response["Message"].AsString());
355 return null; 343 return null;
356 } 344 }
357 345
358 private List<PresenceInfo> GetSessions(UUID userID) 346 private OSDMap GetSessionDataFromSessionID(UUID sessionID)
359 { 347 {
360 List<PresenceInfo> presences = new List<PresenceInfo>(1); 348 NameValueCollection requestArgs = new NameValueCollection
361
362 OSDMap userResponse = GetUserData(userID);
363 if (userResponse != null)
364 {
365// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting sessions for " + userID);
366
367 NameValueCollection requestArgs = new NameValueCollection
368 { 349 {
369 { "RequestMethod", "GetSession" }, 350 { "RequestMethod", "GetSession" },
370 { "UserID", userID.ToString() } 351 { "SessionID", sessionID.ToString() }
371 }; 352 };
372 353
373 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 354 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
374 if (response["Success"].AsBoolean()) 355 if (response["Success"].AsBoolean())
375 { 356 return response;
376 PresenceInfo presence = ResponseToPresenceInfo(response, userResponse);
377 if (presence != null)
378 presences.Add(presence);
379 }
380// else
381// {
382// m_log.Debug("[SIMIAN PRESENCE CONNECTOR]: No session returned for " + userID + ": " + response["Message"].AsString());
383// }
384 }
385 357
386 return presences; 358 m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for {0}; {1}",sessionID.ToString(),response["Message"].AsString());
359 return null;
387 } 360 }
388 361
389 private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) 362 private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
390 { 363 {
391 // Save our current location as session data 364 // Save our current location as session data
392 NameValueCollection requestArgs = new NameValueCollection 365 NameValueCollection requestArgs = new NameValueCollection
393 { 366 {
394 { "RequestMethod", "UpdateSession" }, 367 { "RequestMethod", "UpdateSession" },
395 { "SessionID", sessionID.ToString() }, 368 { "SessionID", sessionID.ToString() },
396 { "SceneID", regionID.ToString() }, 369 { "SceneID", regionID.ToString() },
397 { "ScenePosition", lastPosition.ToString() }, 370 { "ScenePosition", lastPosition.ToString() },
398 { "SceneLookAt", lastLookAt.ToString() } 371 { "SceneLookAt", lastLookAt.ToString() }
399 }; 372 };
400 373
401 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 374 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
402 bool success = response["Success"].AsBoolean(); 375 bool success = response["Success"].AsBoolean();
@@ -407,7 +380,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
407 return success; 380 return success;
408 } 381 }
409 382
410 private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse, OSDMap userResponse) 383 private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse)
411 { 384 {
412 if (sessionResponse == null) 385 if (sessionResponse == null)
413 return null; 386 return null;
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 97a0afc..0cf1c14 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -58,6 +58,7 @@ namespace OpenSim.Services.HypergridService
58 private static IUserAgentService m_UserAgentService; 58 private static IUserAgentService m_UserAgentService;
59 private static ISimulationService m_SimulationService; 59 private static ISimulationService m_SimulationService;
60 private static IGridUserService m_GridUserService; 60 private static IGridUserService m_GridUserService;
61 private static IBansService m_BansService;
61 62
62 private static string m_AllowedClients = string.Empty; 63 private static string m_AllowedClients = string.Empty;
63 private static string m_DeniedClients = string.Empty; 64 private static string m_DeniedClients = string.Empty;
@@ -87,6 +88,7 @@ namespace OpenSim.Services.HypergridService
87 string presenceService = serverConfig.GetString("PresenceService", String.Empty); 88 string presenceService = serverConfig.GetString("PresenceService", String.Empty);
88 string simulationService = serverConfig.GetString("SimulationService", String.Empty); 89 string simulationService = serverConfig.GetString("SimulationService", String.Empty);
89 string gridUserService = serverConfig.GetString("GridUserService", String.Empty); 90 string gridUserService = serverConfig.GetString("GridUserService", String.Empty);
91 string bansService = serverConfig.GetString("BansService", String.Empty);
90 92
91 // These are mandatory, the others aren't 93 // These are mandatory, the others aren't
92 if (gridService == string.Empty || presenceService == string.Empty) 94 if (gridService == string.Empty || presenceService == string.Empty)
@@ -121,6 +123,8 @@ namespace OpenSim.Services.HypergridService
121 m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(homeUsersService, args); 123 m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(homeUsersService, args);
122 if (gridUserService != string.Empty) 124 if (gridUserService != string.Empty)
123 m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(gridUserService, args); 125 m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(gridUserService, args);
126 if (bansService != string.Empty)
127 m_BansService = ServerUtils.LoadPlugin<IBansService>(bansService, args);
124 128
125 if (simService != null) 129 if (simService != null)
126 m_SimulationService = simService; 130 m_SimulationService = simService;
@@ -223,7 +227,7 @@ namespace OpenSim.Services.HypergridService
223 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9} Teleport Flags {10}", 227 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9} Teleport Flags {10}",
224 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName, 228 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName,
225 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString()); 229 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString());
226 230
227 // 231 //
228 // Check client 232 // Check client
229 // 233 //
@@ -287,17 +291,16 @@ namespace OpenSim.Services.HypergridService
287 } 291 }
288 } 292 }
289 } 293 }
290 m_log.DebugFormat("[GATEKEEPER SERVICE]: User is ok");
291 294
292 // 295 //
293 // Foreign agents allowed? Exceptions? 296 // Foreign agents allowed? Exceptions?
294 // 297 //
295 if (account == null) 298 if (account == null)
296 { 299 {
297 bool allowed = m_ForeignAgentsAllowed; 300 bool allowed = m_ForeignAgentsAllowed;
298 301
299 if (m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsAllowedExceptions)) 302 if (m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsAllowedExceptions))
300 allowed = false; 303 allowed = false;
301 304
302 if (!m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsDisallowedExceptions)) 305 if (!m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsDisallowedExceptions))
303 allowed = true; 306 allowed = true;
@@ -311,6 +314,20 @@ namespace OpenSim.Services.HypergridService
311 } 314 }
312 } 315 }
313 316
317 //
318 // Is the user banned?
319 // This uses a Ban service that's more powerful than the configs
320 //
321 string uui = (account != null ? aCircuit.AgentID.ToString() : Util.ProduceUserUniversalIdentifier(aCircuit));
322 if (m_BansService != null && m_BansService.IsBanned(uui, aCircuit.IPAddress, aCircuit.Id0, authURL))
323 {
324 reason = "You are banned from this world";
325 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: user {0} is banned", uui);
326 return false;
327 }
328
329 m_log.DebugFormat("[GATEKEEPER SERVICE]: User is OK");
330
314 bool isFirstLogin = false; 331 bool isFirstLogin = false;
315 // 332 //
316 // Login the presence, if it's not there yet (by the login service) 333 // Login the presence, if it's not there yet (by the login service)
diff --git a/OpenSim/Services/Interfaces/IBansService.cs b/OpenSim/Services/Interfaces/IBansService.cs
new file mode 100644
index 0000000..8fd3521
--- /dev/null
+++ b/OpenSim/Services/Interfaces/IBansService.cs
@@ -0,0 +1,48 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29
30using OpenSim.Framework;
31using OpenMetaverse;
32
33namespace OpenSim.Services.Interfaces
34{
35 public interface IBansService
36 {
37 /// <summary>
38 /// Are any of the given arguments banned from the grid?
39 /// </summary>
40 /// <param name="userID"></param>
41 /// <param name="ip"></param>
42 /// <param name="id0"></param>
43 /// <param name="origin"></param>
44 /// <returns></returns>
45 bool IsBanned(string userID, string ip, string id0, string origin);
46 }
47
48}
diff --git a/OpenSim/Services/Interfaces/IUserProfilesService.cs b/OpenSim/Services/Interfaces/IUserProfilesService.cs
new file mode 100644
index 0000000..319d307
--- /dev/null
+++ b/OpenSim/Services/Interfaces/IUserProfilesService.cs
@@ -0,0 +1,75 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenSim.Framework;
30using OpenMetaverse;
31using OpenMetaverse.StructuredData;
32
33namespace OpenSim.Services.Interfaces
34{
35 public interface IUserProfilesService
36 {
37 #region Classifieds
38 OSD AvatarClassifiedsRequest(UUID creatorId);
39 bool ClassifiedUpdate(UserClassifiedAdd ad, ref string result);
40 bool ClassifiedInfoRequest(ref UserClassifiedAdd ad, ref string result);
41 bool ClassifiedDelete(UUID recordId);
42 #endregion Classifieds
43
44 #region Picks
45 OSD AvatarPicksRequest(UUID creatorId);
46 bool PickInfoRequest(ref UserProfilePick pick, ref string result);
47 bool PicksUpdate(ref UserProfilePick pick, ref string result);
48 bool PicksDelete(UUID pickId);
49 #endregion Picks
50
51 #region Notes
52 bool AvatarNotesRequest(ref UserProfileNotes note);
53 bool NotesUpdate(ref UserProfileNotes note, ref string result);
54 #endregion Notes
55
56 #region Profile Properties
57 bool AvatarPropertiesRequest(ref UserProfileProperties prop, ref string result);
58 bool AvatarPropertiesUpdate(ref UserProfileProperties prop, ref string result);
59 #endregion Profile Properties
60
61 #region Interests
62 bool AvatarInterestsUpdate(UserProfileProperties prop, ref string result);
63 #endregion Interests
64
65 #region Utility
66 OSD AvatarImageAssetsRequest(UUID avatarId);
67 #endregion Utility
68
69 #region UserData
70 bool RequestUserAppData(ref UserAppData prop, ref string result);
71 bool SetUserAppData(UserAppData prop, ref string result);
72 #endregion UserData
73 }
74}
75
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
index e2f947c..da6c016 100644
--- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
@@ -233,7 +233,7 @@ namespace OpenSim.Services.LLLoginService
233 GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, 233 GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService,
234 string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, 234 string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message,
235 GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency, 235 GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency,
236 string DSTZone, UUID realID) 236 string DSTZone, string destinationsURL, string avatarsURL, UUID realID)
237 : this() 237 : this()
238 { 238 {
239 FillOutInventoryData(invSkel, libService); 239 FillOutInventoryData(invSkel, libService);
@@ -253,6 +253,8 @@ namespace OpenSim.Services.LLLoginService
253 MapTileURL = mapTileURL; 253 MapTileURL = mapTileURL;
254 ProfileURL = profileURL; 254 ProfileURL = profileURL;
255 OpenIDURL = openIDURL; 255 OpenIDURL = openIDURL;
256 DestinationsURL = destinationsURL;
257 AvatarsURL = avatarsURL;
256 258
257 SearchURL = searchURL; 259 SearchURL = searchURL;
258 Currency = currency; 260 Currency = currency;
@@ -543,6 +545,12 @@ namespace OpenSim.Services.LLLoginService
543 if (profileURL != String.Empty) 545 if (profileURL != String.Empty)
544 responseData["profile-server-url"] = profileURL; 546 responseData["profile-server-url"] = profileURL;
545 547
548 if (DestinationsURL != String.Empty)
549 responseData["destination_guide_url"] = DestinationsURL;
550
551 if (AvatarsURL != String.Empty)
552 responseData["avatar_picker_url"] = AvatarsURL;
553
546 // We need to send an openid_token back in the response too 554 // We need to send an openid_token back in the response too
547 if (openIDURL != String.Empty) 555 if (openIDURL != String.Empty)
548 responseData["openid_url"] = openIDURL; 556 responseData["openid_url"] = openIDURL;
@@ -1073,6 +1081,16 @@ namespace OpenSim.Services.LLLoginService
1073 set { currency = value; } 1081 set { currency = value; }
1074 } 1082 }
1075 1083
1084 public string DestinationsURL
1085 {
1086 get; set;
1087 }
1088
1089 public string AvatarsURL
1090 {
1091 get; set;
1092 }
1093
1076 #endregion 1094 #endregion
1077 1095
1078 public class UserInfo 1096 public class UserInfo
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index ede2353..351c1ac 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -78,6 +78,8 @@ namespace OpenSim.Services.LLLoginService
78 protected string m_OpenIDURL; 78 protected string m_OpenIDURL;
79 protected string m_SearchURL; 79 protected string m_SearchURL;
80 protected string m_Currency; 80 protected string m_Currency;
81 protected string m_DestinationGuide;
82 protected string m_AvatarPicker;
81 83
82 protected string m_AllowedClients; 84 protected string m_AllowedClients;
83 protected string m_DeniedClients; 85 protected string m_DeniedClients;
@@ -117,6 +119,8 @@ namespace OpenSim.Services.LLLoginService
117 m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); 119 m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty);
118 m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); 120 m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty);
119 m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); 121 m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty);
122 m_DestinationGuide = m_LoginServerConfig.GetString ("DestinationGuide", string.Empty);
123 m_AvatarPicker = m_LoginServerConfig.GetString ("AvatarPicker", string.Empty);
120 124
121 m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty); 125 m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty);
122 m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty); 126 m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty);
@@ -461,7 +465,8 @@ namespace OpenSim.Services.LLLoginService
461 = new LLLoginResponse( 465 = new LLLoginResponse(
462 account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, 466 account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService,
463 where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, 467 where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP,
464 m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone, realID); 468 m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone,
469 m_DestinationGuide, m_AvatarPicker, realID);
465 470
466 m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName); 471 m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName);
467 472
diff --git a/OpenSim/Services/UserAccountService/GridUserService.cs b/OpenSim/Services/UserAccountService/GridUserService.cs
index 43fa04b..8388180 100644
--- a/OpenSim/Services/UserAccountService/GridUserService.cs
+++ b/OpenSim/Services/UserAccountService/GridUserService.cs
@@ -73,7 +73,7 @@ namespace OpenSim.Services.UserAccountService
73 return info; 73 return info;
74 } 74 }
75 75
76 public GridUserInfo[] GetGridUserInfo(string[] userIDs) 76 public virtual GridUserInfo[] GetGridUserInfo(string[] userIDs)
77 { 77 {
78 List<GridUserInfo> ret = new List<GridUserInfo>(); 78 List<GridUserInfo> ret = new List<GridUserInfo>();
79 79
diff --git a/OpenSim/Services/UserProfilesService/UserProfilesService.cs b/OpenSim/Services/UserProfilesService/UserProfilesService.cs
new file mode 100644
index 0000000..d00f34d
--- /dev/null
+++ b/OpenSim/Services/UserProfilesService/UserProfilesService.cs
@@ -0,0 +1,187 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Reflection;
30using System.Text;
31using Nini.Config;
32using log4net;
33using OpenSim.Server.Base;
34using OpenSim.Services.Interfaces;
35using OpenSim.Services.UserAccountService;
36using OpenSim.Data;
37using OpenMetaverse;
38using OpenMetaverse.StructuredData;
39using OpenSim.Framework;
40
41namespace OpenSim.Services.ProfilesService
42{
43 public class UserProfilesService: UserProfilesServiceBase, IUserProfilesService
44 {
45 static readonly ILog m_log =
46 LogManager.GetLogger(
47 MethodBase.GetCurrentMethod().DeclaringType);
48
49 IUserAccountService userAccounts;
50 IAuthenticationService authService;
51
52 public UserProfilesService(IConfigSource config, string configName):
53 base(config, configName)
54 {
55 IConfig Config = config.Configs[configName];
56 if (Config == null)
57 {
58 m_log.Warn("[PROFILES]: No configuration found!");
59 return;
60 }
61 Object[] args = null;
62
63 args = new Object[] { config };
64 string accountService = Config.GetString("UserAccountService", String.Empty);
65 if (accountService != string.Empty)
66 userAccounts = ServerUtils.LoadPlugin<IUserAccountService>(accountService, args);
67
68 args = new Object[] { config };
69 string authServiceConfig = Config.GetString("AuthenticationServiceModule", String.Empty);
70 if (accountService != string.Empty)
71 authService = ServerUtils.LoadPlugin<IAuthenticationService>(authServiceConfig, args);
72 }
73
74 #region Classifieds
75 public OSD AvatarClassifiedsRequest(UUID creatorId)
76 {
77 OSDArray records = ProfilesData.GetClassifiedRecords(creatorId);
78
79 return records;
80 }
81
82 public bool ClassifiedUpdate(UserClassifiedAdd ad, ref string result)
83 {
84 if(!ProfilesData.UpdateClassifiedRecord(ad, ref result))
85 {
86 return false;
87 }
88 result = "success";
89 return true;
90 }
91
92 public bool ClassifiedDelete(UUID recordId)
93 {
94 if(ProfilesData.DeleteClassifiedRecord(recordId))
95 return true;
96
97 return false;
98 }
99
100 public bool ClassifiedInfoRequest(ref UserClassifiedAdd ad, ref string result)
101 {
102 if(ProfilesData.GetClassifiedInfo(ref ad, ref result))
103 return true;
104
105 return false;
106 }
107 #endregion Classifieds
108
109 #region Picks
110 public OSD AvatarPicksRequest(UUID creatorId)
111 {
112 OSDArray records = ProfilesData.GetAvatarPicks(creatorId);
113
114 return records;
115 }
116
117 public bool PickInfoRequest(ref UserProfilePick pick, ref string result)
118 {
119 pick = ProfilesData.GetPickInfo(pick.CreatorId, pick.PickId);
120 result = "OK";
121 return true;
122 }
123
124 public bool PicksUpdate(ref UserProfilePick pick, ref string result)
125 {
126 return ProfilesData.UpdatePicksRecord(pick);
127 }
128
129 public bool PicksDelete(UUID pickId)
130 {
131 return ProfilesData.DeletePicksRecord(pickId);
132 }
133 #endregion Picks
134
135 #region Notes
136 public bool AvatarNotesRequest(ref UserProfileNotes note)
137 {
138 return ProfilesData.GetAvatarNotes(ref note);
139 }
140
141 public bool NotesUpdate(ref UserProfileNotes note, ref string result)
142 {
143 return ProfilesData.UpdateAvatarNotes(ref note, ref result);
144 }
145 #endregion Notes
146
147 #region Profile Properties
148 public bool AvatarPropertiesRequest(ref UserProfileProperties prop, ref string result)
149 {
150 return ProfilesData.GetAvatarProperties(ref prop, ref result);
151 }
152
153 public bool AvatarPropertiesUpdate(ref UserProfileProperties prop, ref string result)
154 {
155 return ProfilesData.UpdateAvatarProperties(ref prop, ref result);
156 }
157 #endregion Profile Properties
158
159 #region Interests
160 public bool AvatarInterestsUpdate(UserProfileProperties prop, ref string result)
161 {
162 return ProfilesData.UpdateAvatarInterests(prop, ref result);
163 }
164 #endregion Interests
165
166 #region Utility
167 public OSD AvatarImageAssetsRequest(UUID avatarId)
168 {
169 OSDArray records = ProfilesData.GetUserImageAssets(avatarId);
170 return records;
171 }
172 #endregion Utility
173
174 #region UserData
175 public bool RequestUserAppData(ref UserAppData prop, ref string result)
176 {
177 return ProfilesData.GetUserAppData(ref prop, ref result);
178 }
179
180 public bool SetUserAppData(UserAppData prop, ref string result)
181 {
182 return true;
183 }
184 #endregion UserData
185 }
186}
187
diff --git a/OpenSim/Services/UserProfilesService/UserProfilesServiceBase.cs b/OpenSim/Services/UserProfilesService/UserProfilesServiceBase.cs
new file mode 100644
index 0000000..927f7c9
--- /dev/null
+++ b/OpenSim/Services/UserProfilesService/UserProfilesServiceBase.cs
@@ -0,0 +1,86 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Reflection;
30using Nini.Config;
31using log4net;
32using OpenSim.Services.Base;
33using OpenSim.Data;
34
35namespace OpenSim.Services.ProfilesService
36{
37 public class UserProfilesServiceBase: ServiceBase
38 {
39 static readonly ILog m_log =
40 LogManager.GetLogger(
41 MethodBase.GetCurrentMethod().DeclaringType);
42
43 public IProfilesData ProfilesData;
44
45 public string ConfigName
46 {
47 get; private set;
48 }
49
50 public UserProfilesServiceBase(IConfigSource config, string configName):
51 base(config)
52 {
53 if(string.IsNullOrEmpty(configName))
54 {
55 m_log.WarnFormat("[PROFILES]: Configuration section not given!");
56 return;
57 }
58
59 string dllName = String.Empty;
60 string connString = null;
61 string realm = String.Empty;
62
63 IConfig dbConfig = config.Configs["DatabaseService"];
64 if (dbConfig != null)
65 {
66 if (dllName == String.Empty)
67 dllName = dbConfig.GetString("StorageProvider", String.Empty);
68 if (string.IsNullOrEmpty(connString))
69 connString = dbConfig.GetString("ConnectionString", String.Empty);
70 }
71
72 IConfig ProfilesConfig = config.Configs[configName];
73 if (ProfilesConfig != null)
74 {
75 connString = ProfilesConfig.GetString("ConnectionString", connString);
76 realm = ProfilesConfig.GetString("Realm", realm);
77 }
78
79 ProfilesData = LoadPlugin<IProfilesData>(dllName, new Object[] { connString });
80 if (ProfilesData == null)
81 throw new Exception("Could not find a storage interface in the given module");
82
83 }
84 }
85}
86
diff --git a/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs b/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs
index 6cc7ff2..1b960b1 100644
--- a/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs
@@ -82,7 +82,7 @@ namespace OpenSim.Tests.Common
82 Scene neighbourScene; 82 Scene neighbourScene;
83 SceneManager.Instance.TryGetScene(x, y, out neighbourScene); 83 SceneManager.Instance.TryGetScene(x, y, out neighbourScene);
84 84
85 TestClient neighbourTc = new TestClient(newAgent, neighbourScene, SceneManager.Instance); 85 TestClient neighbourTc = new TestClient(newAgent, neighbourScene);
86 neighbourTcs.Add(neighbourTc); 86 neighbourTcs.Add(neighbourTc);
87 neighbourScene.AddNewClient(neighbourTc, PresenceType.User); 87 neighbourScene.AddNewClient(neighbourTc, PresenceType.User);
88 }; 88 };
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
index bdd9093..d9bb85e 100644
--- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
@@ -447,9 +447,6 @@ namespace OpenSim.Tests.Common
447 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test 447 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
448 /// </summary> 448 /// </summary>
449 /// <remarks> 449 /// <remarks>
450 /// This can be used for tests where there is only one region or where there are multiple non-neighbour regions
451 /// and teleport doesn't take place.
452 ///
453 /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will 450 /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will
454 /// make the agent circuit data (e.g. first, lastname) consistent with the user account data. 451 /// make the agent circuit data (e.g. first, lastname) consistent with the user account data.
455 /// </remarks> 452 /// </remarks>
@@ -462,22 +459,6 @@ namespace OpenSim.Tests.Common
462 } 459 }
463 460
464 /// <summary> 461 /// <summary>
465 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
466 /// </summary>
467 /// <remarks>
468 /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will
469 /// make the agent circuit data (e.g. first, lastname) consistent with the user account data.
470 /// </remarks>
471 /// <param name="scene"></param>
472 /// <param name="agentId"></param>
473 /// <param name="sceneManager"></param>
474 /// <returns></returns>
475 public static ScenePresence AddScenePresence(Scene scene, UUID agentId, SceneManager sceneManager)
476 {
477 return AddScenePresence(scene, GenerateAgentData(agentId), sceneManager);
478 }
479
480 /// <summary>
481 /// Add a root agent. 462 /// Add a root agent.
482 /// </summary> 463 /// </summary>
483 /// <param name="scene"></param> 464 /// <param name="scene"></param>
@@ -508,31 +489,7 @@ namespace OpenSim.Tests.Common
508 /// <returns></returns> 489 /// <returns></returns>
509 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData) 490 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData)
510 { 491 {
511 return AddScenePresence(scene, agentData, null); 492 return AddScenePresence(scene, new TestClient(agentData, scene), agentData);
512 }
513
514 /// <summary>
515 /// Add a root agent.
516 /// </summary>
517 /// <remarks>
518 /// This function
519 ///
520 /// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the
521 /// userserver if grid) would give initial login data back to the client and separately tell the scene that the
522 /// agent was coming.
523 ///
524 /// 2) Connects the agent with the scene
525 ///
526 /// This function performs actions equivalent with notifying the scene that an agent is
527 /// coming and then actually connecting the agent to the scene. The one step missed out is the very first
528 /// </remarks>
529 /// <param name="scene"></param>
530 /// <param name="agentData"></param>
531 /// <param name="sceneManager"></param>
532 /// <returns></returns>
533 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData, SceneManager sceneManager)
534 {
535 return AddScenePresence(scene, new TestClient(agentData, scene, sceneManager), agentData, sceneManager);
536 } 493 }
537 494
538 /// <summary> 495 /// <summary>
@@ -552,10 +509,9 @@ namespace OpenSim.Tests.Common
552 /// </remarks> 509 /// </remarks>
553 /// <param name="scene"></param> 510 /// <param name="scene"></param>
554 /// <param name="agentData"></param> 511 /// <param name="agentData"></param>
555 /// <param name="sceneManager"></param>
556 /// <returns></returns> 512 /// <returns></returns>
557 public static ScenePresence AddScenePresence( 513 public static ScenePresence AddScenePresence(
558 Scene scene, IClientAPI client, AgentCircuitData agentData, SceneManager sceneManager) 514 Scene scene, IClientAPI client, AgentCircuitData agentData)
559 { 515 {
560 // We emulate the proper login sequence here by doing things in four stages 516 // We emulate the proper login sequence here by doing things in four stages
561 517
@@ -578,10 +534,6 @@ namespace OpenSim.Tests.Common
578 /// Introduce an agent into the scene by adding a new client. 534 /// Introduce an agent into the scene by adding a new client.
579 /// </summary> 535 /// </summary>
580 /// <returns>The scene presence added</returns> 536 /// <returns>The scene presence added</returns>
581 /// <param name='sceneManager'>
582 /// Scene manager. Can be null if there is only one region in the test or multiple regions that are not
583 /// neighbours and where no teleporting takes place.
584 /// </param>
585 /// <param name='scene'></param> 537 /// <param name='scene'></param>
586 /// <param name='testClient'></param> 538 /// <param name='testClient'></param>
587 /// <param name='agentData'></param> 539 /// <param name='agentData'></param>
@@ -607,7 +559,7 @@ namespace OpenSim.Tests.Common
607 acd.child = true; 559 acd.child = true;
608 560
609 // XXX: ViaLogin may not be correct for child agents 561 // XXX: ViaLogin may not be correct for child agents
610 TestClient client = new TestClient(acd, scene, null); 562 TestClient client = new TestClient(acd, scene);
611 return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin); 563 return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin);
612 } 564 }
613 565
diff --git a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
index a1794c9..b3b75af 100644
--- a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
@@ -218,12 +218,37 @@ namespace OpenSim.Tests.Common
218 public static InventoryFolderBase CreateInventoryFolder( 218 public static InventoryFolderBase CreateInventoryFolder(
219 IInventoryService inventoryService, UUID userId, string path, bool useExistingFolders) 219 IInventoryService inventoryService, UUID userId, string path, bool useExistingFolders)
220 { 220 {
221 return CreateInventoryFolder(inventoryService, userId, UUID.Random(), path, useExistingFolders);
222 }
223
224 /// <summary>
225 /// Create inventory folders starting from the user's root folder.
226 /// </summary>
227 /// <param name="inventoryService"></param>
228 /// <param name="userId"></param>
229 /// <param name="folderId"></param>
230 /// <param name="path">
231 /// The folders to create. Multiple folders can be specified on a path delimited by the PATH_DELIMITER
232 /// </param>
233 /// <param name="useExistingFolders">
234 /// If true, then folders in the path which already the same name are
235 /// used. This applies to the terminal folder as well.
236 /// If false, then all folders in the path are created, even if there is already a folder at a particular
237 /// level with the same name.
238 /// </param>
239 /// <returns>
240 /// The folder created. If the path contains multiple folders then the last one created is returned.
241 /// Will return null if the root folder could not be found.
242 /// </returns>
243 public static InventoryFolderBase CreateInventoryFolder(
244 IInventoryService inventoryService, UUID userId, UUID folderId, string path, bool useExistingFolders)
245 {
221 InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); 246 InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId);
222 247
223 if (null == rootFolder) 248 if (null == rootFolder)
224 return null; 249 return null;
225 250
226 return CreateInventoryFolder(inventoryService, rootFolder, path, useExistingFolders); 251 return CreateInventoryFolder(inventoryService, folderId, rootFolder, path, useExistingFolders);
227 } 252 }
228 253
229 /// <summary> 254 /// <summary>
@@ -235,6 +260,7 @@ namespace OpenSim.Tests.Common
235 /// TODO: May need to make it an option to create duplicate folders. 260 /// TODO: May need to make it an option to create duplicate folders.
236 /// </remarks> 261 /// </remarks>
237 /// <param name="inventoryService"></param> 262 /// <param name="inventoryService"></param>
263 /// <param name="folderId">ID of the folder to create</param>
238 /// <param name="parentFolder"></param> 264 /// <param name="parentFolder"></param>
239 /// <param name="path"> 265 /// <param name="path">
240 /// The folder to create. 266 /// The folder to create.
@@ -249,7 +275,7 @@ namespace OpenSim.Tests.Common
249 /// The folder created. If the path contains multiple folders then the last one created is returned. 275 /// The folder created. If the path contains multiple folders then the last one created is returned.
250 /// </returns> 276 /// </returns>
251 public static InventoryFolderBase CreateInventoryFolder( 277 public static InventoryFolderBase CreateInventoryFolder(
252 IInventoryService inventoryService, InventoryFolderBase parentFolder, string path, bool useExistingFolders) 278 IInventoryService inventoryService, UUID folderId, InventoryFolderBase parentFolder, string path, bool useExistingFolders)
253 { 279 {
254 string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None); 280 string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None);
255 281
@@ -262,9 +288,16 @@ namespace OpenSim.Tests.Common
262 { 288 {
263// Console.WriteLine("Creating folder {0} at {1}", components[0], parentFolder.Name); 289// Console.WriteLine("Creating folder {0} at {1}", components[0], parentFolder.Name);
264 290
291 UUID folderIdForCreate;
292
293 if (components.Length > 1)
294 folderIdForCreate = UUID.Random();
295 else
296 folderIdForCreate = folderId;
297
265 folder 298 folder
266 = new InventoryFolderBase( 299 = new InventoryFolderBase(
267 UUID.Random(), components[0], parentFolder.Owner, (short)AssetType.Unknown, parentFolder.ID, 0); 300 folderIdForCreate, components[0], parentFolder.Owner, (short)AssetType.Unknown, parentFolder.ID, 0);
268 301
269 inventoryService.AddFolder(folder); 302 inventoryService.AddFolder(folder);
270 } 303 }
@@ -274,7 +307,7 @@ namespace OpenSim.Tests.Common
274// } 307// }
275 308
276 if (components.Length > 1) 309 if (components.Length > 1)
277 return CreateInventoryFolder(inventoryService, folder, components[1], useExistingFolders); 310 return CreateInventoryFolder(inventoryService, folderId, folder, components[1], useExistingFolders);
278 else 311 else
279 return folder; 312 return folder;
280 } 313 }
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index dce2fd7..179a91f 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -47,9 +47,9 @@ namespace OpenSim.Tests.Common.Mock
47 EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); 47 EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing");
48 48
49 private Scene m_scene; 49 private Scene m_scene;
50 private SceneManager m_sceneManager;
51 50
52 // Properties so that we can get at received data for test purposes 51 // Properties so that we can get at received data for test purposes
52 public List<uint> ReceivedKills { get; private set; }
53 public List<UUID> ReceivedOfflineNotifications { get; private set; } 53 public List<UUID> ReceivedOfflineNotifications { get; private set; }
54 public List<UUID> ReceivedOnlineNotifications { get; private set; } 54 public List<UUID> ReceivedOnlineNotifications { get; private set; }
55 public List<UUID> ReceivedFriendshipTerminations { get; private set; } 55 public List<UUID> ReceivedFriendshipTerminations { get; private set; }
@@ -61,6 +61,7 @@ namespace OpenSim.Tests.Common.Mock
61 // Test client specific events - for use by tests to implement some IClientAPI behaviour. 61 // Test client specific events - for use by tests to implement some IClientAPI behaviour.
62 public event Action<RegionInfo, Vector3, Vector3> OnReceivedMoveAgentIntoRegion; 62 public event Action<RegionInfo, Vector3, Vector3> OnReceivedMoveAgentIntoRegion;
63 public event Action<ulong, IPEndPoint> OnTestClientInformClientOfNeighbour; 63 public event Action<ulong, IPEndPoint> OnTestClientInformClientOfNeighbour;
64 public event Action<GridInstantMessage> OnReceivedInstantMessage;
64 65
65// disable warning: public events, part of the public API 66// disable warning: public events, part of the public API
66#pragma warning disable 67 67#pragma warning disable 67
@@ -197,6 +198,7 @@ namespace OpenSim.Tests.Common.Mock
197 public event EstateCovenantRequest OnEstateCovenantRequest; 198 public event EstateCovenantRequest OnEstateCovenantRequest;
198 public event EstateChangeInfo OnEstateChangeInfo; 199 public event EstateChangeInfo OnEstateChangeInfo;
199 public event EstateManageTelehub OnEstateManageTelehub; 200 public event EstateManageTelehub OnEstateManageTelehub;
201 public event CachedTextureRequest OnCachedTextureRequest;
200 202
201 public event ObjectDuplicateOnRay OnObjectDuplicateOnRay; 203 public event ObjectDuplicateOnRay OnObjectDuplicateOnRay;
202 204
@@ -435,33 +437,21 @@ namespace OpenSim.Tests.Common.Mock
435 /// <summary> 437 /// <summary>
436 /// Constructor 438 /// Constructor
437 /// </summary> 439 /// </summary>
438 /// <remarks>
439 /// Can be used for a test where there is only one region or where there are multiple regions that are not
440 /// neighbours and where no teleporting takes place. In other situations, the constructor that takes in a
441 /// scene manager should be used.
442 /// </remarks>
443 /// <param name="agentData"></param>
444 /// <param name="scene"></param>
445 public TestClient(AgentCircuitData agentData, Scene scene) : this(agentData, scene, null) {}
446
447 /// <summary>
448 /// Constructor
449 /// </summary>
450 /// <param name="agentData"></param> 440 /// <param name="agentData"></param>
451 /// <param name="scene"></param> 441 /// <param name="scene"></param>
452 /// <param name="sceneManager"></param> 442 /// <param name="sceneManager"></param>
453 public TestClient(AgentCircuitData agentData, Scene scene, SceneManager sceneManager) 443 public TestClient(AgentCircuitData agentData, Scene scene)
454 { 444 {
455 m_agentId = agentData.AgentID; 445 m_agentId = agentData.AgentID;
456 m_firstName = agentData.firstname; 446 m_firstName = agentData.firstname;
457 m_lastName = agentData.lastname; 447 m_lastName = agentData.lastname;
458 m_circuitCode = agentData.circuitcode; 448 m_circuitCode = agentData.circuitcode;
459 m_scene = scene; 449 m_scene = scene;
460 m_sceneManager = sceneManager;
461 SessionId = agentData.SessionID; 450 SessionId = agentData.SessionID;
462 SecureSessionId = agentData.SecureSessionID; 451 SecureSessionId = agentData.SecureSessionID;
463 CapsSeedUrl = agentData.CapsPath; 452 CapsSeedUrl = agentData.CapsPath;
464 453
454 ReceivedKills = new List<uint>();
465 ReceivedOfflineNotifications = new List<UUID>(); 455 ReceivedOfflineNotifications = new List<UUID>();
466 ReceivedOnlineNotifications = new List<UUID>(); 456 ReceivedOnlineNotifications = new List<UUID>();
467 ReceivedFriendshipTerminations = new List<UUID>(); 457 ReceivedFriendshipTerminations = new List<UUID>();
@@ -487,6 +477,18 @@ namespace OpenSim.Tests.Common.Mock
487 OnCompleteMovementToRegion(this, true); 477 OnCompleteMovementToRegion(this, true);
488 } 478 }
489 479
480 /// <summary>
481 /// Emulate sending an IM from the viewer to the simulator.
482 /// </summary>
483 /// <param name='im'></param>
484 public void HandleImprovedInstantMessage(GridInstantMessage im)
485 {
486 ImprovedInstantMessage handlerInstantMessage = OnInstantMessage;
487
488 if (handlerInstantMessage != null)
489 handlerInstantMessage(this, im);
490 }
491
490 public virtual void ActivateGesture(UUID assetId, UUID gestureId) 492 public virtual void ActivateGesture(UUID assetId, UUID gestureId)
491 { 493 {
492 } 494 }
@@ -499,6 +501,11 @@ namespace OpenSim.Tests.Common.Mock
499 { 501 {
500 } 502 }
501 503
504 public void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures)
505 {
506
507 }
508
502 public virtual void Kick(string message) 509 public virtual void Kick(string message)
503 { 510 {
504 } 511 }
@@ -513,11 +520,11 @@ namespace OpenSim.Tests.Common.Mock
513 520
514 public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) 521 public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle)
515 { 522 {
516
517 } 523 }
518 524
519 public virtual void SendKillObject(ulong regionHandle, List<uint> localID) 525 public virtual void SendKillObject(List<uint> localID)
520 { 526 {
527 ReceivedKills.AddRange(localID);
521 } 528 }
522 529
523 public virtual void SetChildAgentThrottle(byte[] throttle) 530 public virtual void SetChildAgentThrottle(byte[] throttle)
@@ -526,15 +533,13 @@ namespace OpenSim.Tests.Common.Mock
526 533
527 public void SetAgentThrottleSilent(int throttle, int setting) 534 public void SetAgentThrottleSilent(int throttle, int setting)
528 { 535 {
529
530
531 } 536 }
537
532 public byte[] GetThrottlesPacked(float multiplier) 538 public byte[] GetThrottlesPacked(float multiplier)
533 { 539 {
534 return new byte[0]; 540 return new byte[0];
535 } 541 }
536 542
537
538 public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) 543 public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
539 { 544 {
540 } 545 }
@@ -547,7 +552,8 @@ namespace OpenSim.Tests.Common.Mock
547 552
548 public void SendInstantMessage(GridInstantMessage im) 553 public void SendInstantMessage(GridInstantMessage im)
549 { 554 {
550 555 if (OnReceivedInstantMessage != null)
556 OnReceivedInstantMessage(im);
551 } 557 }
552 558
553 public void SendGenericMessage(string method, UUID invoice, List<string> message) 559 public void SendGenericMessage(string method, UUID invoice, List<string> message)
diff --git a/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs b/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs
index ccbdf81..2be5524 100644
--- a/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs
+++ b/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs
@@ -53,6 +53,9 @@ namespace OpenSim.Tests.Common.Mock
53 53
54 public XInventoryFolder[] GetFolders(string[] fields, string[] vals) 54 public XInventoryFolder[] GetFolders(string[] fields, string[] vals)
55 { 55 {
56// Console.WriteLine(
57// "Requesting folders, fields {0}, vals {1}", string.Join(",", fields), string.Join(",", vals));
58
56 List<XInventoryFolder> origFolders 59 List<XInventoryFolder> origFolders
57 = Get<XInventoryFolder>(fields, vals, m_allFolders.Values.ToList()); 60 = Get<XInventoryFolder>(fields, vals, m_allFolders.Values.ToList());
58 61
@@ -104,7 +107,30 @@ namespace OpenSim.Tests.Common.Mock
104 } 107 }
105 108
106 public bool MoveItem(string id, string newParent) { throw new NotImplementedException(); } 109 public bool MoveItem(string id, string newParent) { throw new NotImplementedException(); }
107 public bool MoveFolder(string id, string newParent) { throw new NotImplementedException(); } 110
111 public bool MoveFolder(string id, string newParent)
112 {
113 // Don't use GetFolders() here - it takes a clone!
114 XInventoryFolder folder = m_allFolders[new UUID(id)];
115
116 if (folder == null)
117 return false;
118
119 folder.parentFolderID = new UUID(newParent);
120
121// XInventoryFolder[] newParentFolders
122// = GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() });
123
124// Console.WriteLine(
125// "Moved folder {0} {1}, to {2} {3}",
126// folder.folderName, folder.folderID, newParentFolders[0].folderName, folder.parentFolderID);
127
128 // TODO: Really need to implement folder version incrementing, though this should be common code anyway,
129 // not reimplemented in each db plugin.
130
131 return true;
132 }
133
108 public XInventoryItem[] GetActiveGestures(UUID principalID) { throw new NotImplementedException(); } 134 public XInventoryItem[] GetActiveGestures(UUID principalID) { throw new NotImplementedException(); }
109 public int GetAssetPermissions(UUID principalID, UUID assetID) { throw new NotImplementedException(); } 135 public int GetAssetPermissions(UUID principalID, UUID assetID) { throw new NotImplementedException(); }
110 } 136 }
diff --git a/README.md b/README.md
index 552cdef..118fe71 100644
--- a/README.md
+++ b/README.md
@@ -111,3 +111,4 @@ project can always be found at http://opensimulator.org.
111 111
112Thanks for trying OpenSim, we hope it is a pleasant experience. 112Thanks for trying OpenSim, we hope it is a pleasant experience.
113 113
114
diff --git a/ThirdParty/SmartThreadPool/AssemblyInfo.cs b/ThirdParty/SmartThreadPool/AssemblyInfo.cs
deleted file mode 100644
index e2465b0..0000000
--- a/ThirdParty/SmartThreadPool/AssemblyInfo.cs
+++ /dev/null
@@ -1,61 +0,0 @@
1using System;
2using System.Reflection;
3using System.Runtime.InteropServices;
4
5//
6// General Information about an assembly is controlled through the following
7// set of attributes. Change these attribute values to modify the information
8// associated with an assembly.
9//
10[assembly: AssemblyTitle("")]
11[assembly: AssemblyDescription("")]
12[assembly: AssemblyConfiguration("")]
13[assembly: AssemblyCompany("")]
14[assembly: AssemblyProduct("")]
15[assembly: AssemblyCopyright("")]
16[assembly: AssemblyTrademark("")]
17[assembly: AssemblyCulture("")]
18[assembly: ComVisible(false)]
19[assembly: CLSCompliant(true)]
20
21//
22// Version information for an assembly consists of the following four values:
23//
24// Major Version
25// Minor Version
26// Build Number
27// Revision
28//
29// You can specify all the values or you can default the Revision and Build Numbers
30// by using the '*' as shown below:
31
32[assembly: AssemblyVersion("0.7.6.*")]
33
34//
35// In order to sign your assembly you must specify a key to use. Refer to the
36// Microsoft .NET Framework documentation for more information on assembly signing.
37//
38// Use the attributes below to control which key is used for signing.
39//
40// Notes:
41// (*) If no key is specified, the assembly is not signed.
42// (*) KeyName refers to a key that has been installed in the Crypto Service
43// Provider (CSP) on your machine. KeyFile refers to a file which contains
44// a key.
45// (*) If the KeyFile and the KeyName values are both specified, the
46// following processing occurs:
47// (1) If the KeyName can be found in the CSP, that key is used.
48// (2) If the KeyName does not exist and the KeyFile does exist, the key
49// in the KeyFile is installed into the CSP and used.
50// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
51// When specifying the KeyFile, the location of the KeyFile should be
52// relative to the project output directory which is
53// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
54// located in the project directory, you would specify the AssemblyKeyFile
55// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
56// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
57// documentation for more information on this.
58//
59[assembly: AssemblyDelaySign(false)]
60[assembly: AssemblyKeyFile("")]
61[assembly: AssemblyKeyName("")]
diff --git a/ThirdParty/SmartThreadPool/CallerThreadContext.cs b/ThirdParty/SmartThreadPool/CallerThreadContext.cs
index 6ea53f6..e63add5 100644
--- a/ThirdParty/SmartThreadPool/CallerThreadContext.cs
+++ b/ThirdParty/SmartThreadPool/CallerThreadContext.cs
@@ -1,3 +1,6 @@
1
2#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
3
1using System; 4using System;
2using System.Diagnostics; 5using System.Diagnostics;
3using System.Threading; 6using System.Threading;
@@ -6,218 +9,130 @@ using System.Web;
6using System.Runtime.Remoting.Messaging; 9using System.Runtime.Remoting.Messaging;
7 10
8 11
9namespace Amib.Threading 12namespace Amib.Threading.Internal
10{ 13{
11 #region CallerThreadContext class 14#region CallerThreadContext class
12
13 /// <summary>
14 /// This class stores the caller call context in order to restore
15 /// it when the work item is executed in the thread pool environment.
16 /// </summary>
17 internal class CallerThreadContext
18 {
19 #region Prepare reflection information
20
21 // Cached type information.
22 private static MethodInfo getLogicalCallContextMethodInfo =
23 typeof(Thread).GetMethod("GetLogicalCallContext", BindingFlags.Instance | BindingFlags.NonPublic);
24
25 private static MethodInfo setLogicalCallContextMethodInfo =
26 typeof(Thread).GetMethod("SetLogicalCallContext", BindingFlags.Instance | BindingFlags.NonPublic);
27 15
28 private static string HttpContextSlotName = GetHttpContextSlotName(); 16 /// <summary>
17 /// This class stores the caller call context in order to restore
18 /// it when the work item is executed in the thread pool environment.
19 /// </summary>
20 internal class CallerThreadContext
21 {
22#region Prepare reflection information
29 23
30 private static string GetHttpContextSlotName() 24 // Cached type information.
31 { 25 private static readonly MethodInfo getLogicalCallContextMethodInfo =
32 FieldInfo fi = typeof(HttpContext).GetField("CallContextSlotName", BindingFlags.Static | BindingFlags.NonPublic); 26 typeof(Thread).GetMethod("GetLogicalCallContext", BindingFlags.Instance | BindingFlags.NonPublic);
33 27
34 if( fi != null ) 28 private static readonly MethodInfo setLogicalCallContextMethodInfo =
35 return (string)fi.GetValue(null); 29 typeof(Thread).GetMethod("SetLogicalCallContext", BindingFlags.Instance | BindingFlags.NonPublic);
36 else // Use the default "HttpContext" slot name
37 return "HttpContext";
38 }
39 30
40 #endregion 31 private static string HttpContextSlotName = GetHttpContextSlotName();
41
42 #region Private fields
43
44 private HttpContext _httpContext = null;
45 private LogicalCallContext _callContext = null;
46
47 #endregion
48 32
49 /// <summary> 33 private static string GetHttpContextSlotName()
50 /// Constructor 34 {
51 /// </summary> 35 FieldInfo fi = typeof(HttpContext).GetField("CallContextSlotName", BindingFlags.Static | BindingFlags.NonPublic);
52 private CallerThreadContext()
53 {
54 }
55 36
56 public bool CapturedCallContext 37 if (fi != null)
57 {
58 get
59 { 38 {
60 return (null != _callContext); 39 return (string) fi.GetValue(null);
61 } 40 }
62 }
63 41
64 public bool CapturedHttpContext 42 return "HttpContext";
65 { 43 }
66 get
67 {
68 return (null != _httpContext);
69 }
70 }
71
72 /// <summary>
73 /// Captures the current thread context
74 /// </summary>
75 /// <returns></returns>
76 public static CallerThreadContext Capture(
77 bool captureCallContext,
78 bool captureHttpContext)
79 {
80 Debug.Assert(captureCallContext || captureHttpContext);
81
82 CallerThreadContext callerThreadContext = new CallerThreadContext();
83
84 // TODO: In NET 2.0, redo using the new feature of ExecutionContext class - Capture()
85 // Capture Call Context
86 if(captureCallContext && (getLogicalCallContextMethodInfo != null))
87 {
88 callerThreadContext._callContext = (LogicalCallContext)getLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, null);
89 if (callerThreadContext._callContext != null)
90 {
91 callerThreadContext._callContext = (LogicalCallContext)callerThreadContext._callContext.Clone();
92 }
93 }
94
95 // Capture httpContext
96 if (captureHttpContext && (null != HttpContext.Current))
97 {
98 callerThreadContext._httpContext = HttpContext.Current;
99 }
100
101 return callerThreadContext;
102 }
103 44
104 /// <summary> 45 #endregion
105 /// Applies the thread context stored earlier
106 /// </summary>
107 /// <param name="callerThreadContext"></param>
108 public static void Apply(CallerThreadContext callerThreadContext)
109 {
110 if (null == callerThreadContext)
111 {
112 throw new ArgumentNullException("callerThreadContext");
113 }
114
115 // Todo: In NET 2.0, redo using the new feature of ExecutionContext class - Run()
116 // Restore call context
117 if ((callerThreadContext._callContext != null) && (setLogicalCallContextMethodInfo != null))
118 {
119 setLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, new object[] { callerThreadContext._callContext });
120 }
121
122 // Restore HttpContext
123 if (callerThreadContext._httpContext != null)
124 {
125 CallContext.SetData(HttpContextSlotName, callerThreadContext._httpContext);
126 }
127 }
128 }
129
130 #endregion
131
132}
133 46
47#region Private fields
134 48
135/* 49 private HttpContext _httpContext;
136// Ami Bar 50 private LogicalCallContext _callContext;
137// amibar@gmail.com
138 51
139using System; 52 #endregion
140using System.Threading;
141using System.Globalization;
142using System.Security.Principal;
143using System.Reflection;
144using System.Runtime.Remoting.Contexts;
145 53
146namespace Amib.Threading.Internal 54 /// <summary>
147{ 55 /// Constructor
148 #region CallerThreadContext class 56 /// </summary>
149 57 private CallerThreadContext()
150 /// <summary> 58 {
151 /// This class stores the caller thread context in order to restore 59 }
152 /// it when the work item is executed in the context of the thread 60
153 /// from the pool. 61 public bool CapturedCallContext
154 /// Note that we can't store the thread's CompressedStack, because 62 {
155 /// it throws a security exception 63 get
156 /// </summary> 64 {
157 public class CallerThreadContext 65 return (null != _callContext);
158 { 66 }
159 private CultureInfo _culture = null; 67 }
160 private CultureInfo _cultureUI = null; 68
161 private IPrincipal _principal; 69 public bool CapturedHttpContext
162 private System.Runtime.Remoting.Contexts.Context _context; 70 {
163 71 get
164 private static FieldInfo _fieldInfo = GetFieldInfo(); 72 {
165 73 return (null != _httpContext);
166 private static FieldInfo GetFieldInfo() 74 }
167 { 75 }
168 Type threadType = typeof(Thread); 76
169 return threadType.GetField( 77 /// <summary>
170 "m_Context", 78 /// Captures the current thread context
171 BindingFlags.Instance | BindingFlags.NonPublic); 79 /// </summary>
172 } 80 /// <returns></returns>
173 81 public static CallerThreadContext Capture(
174 /// <summary> 82 bool captureCallContext,
175 /// Constructor 83 bool captureHttpContext)
176 /// </summary> 84 {
177 private CallerThreadContext() 85 Debug.Assert(captureCallContext || captureHttpContext);
178 { 86
179 } 87 CallerThreadContext callerThreadContext = new CallerThreadContext();
180 88
181 /// <summary> 89 // TODO: In NET 2.0, redo using the new feature of ExecutionContext class - Capture()
182 /// Captures the current thread context 90 // Capture Call Context
183 /// </summary> 91 if(captureCallContext && (getLogicalCallContextMethodInfo != null))
184 /// <returns></returns> 92 {
185 public static CallerThreadContext Capture() 93 callerThreadContext._callContext = (LogicalCallContext)getLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, null);
186 { 94 if (callerThreadContext._callContext != null)
187 CallerThreadContext callerThreadContext = new CallerThreadContext(); 95 {
188 96 callerThreadContext._callContext = (LogicalCallContext)callerThreadContext._callContext.Clone();
189 Thread thread = Thread.CurrentThread; 97 }
190 callerThreadContext._culture = thread.CurrentCulture; 98 }
191 callerThreadContext._cultureUI = thread.CurrentUICulture; 99
192 callerThreadContext._principal = Thread.CurrentPrincipal; 100 // Capture httpContext
193 callerThreadContext._context = Thread.CurrentContext; 101 if (captureHttpContext && (null != HttpContext.Current))
194 return callerThreadContext; 102 {
195 } 103 callerThreadContext._httpContext = HttpContext.Current;
196 104 }
197 /// <summary> 105
198 /// Applies the thread context stored earlier 106 return callerThreadContext;
199 /// </summary> 107 }
200 /// <param name="callerThreadContext"></param> 108
201 public static void Apply(CallerThreadContext callerThreadContext) 109 /// <summary>
202 { 110 /// Applies the thread context stored earlier
203 Thread thread = Thread.CurrentThread; 111 /// </summary>
204 thread.CurrentCulture = callerThreadContext._culture; 112 /// <param name="callerThreadContext"></param>
205 thread.CurrentUICulture = callerThreadContext._cultureUI; 113 public static void Apply(CallerThreadContext callerThreadContext)
206 Thread.CurrentPrincipal = callerThreadContext._principal; 114 {
207 115 if (null == callerThreadContext)
208 // Uncomment the following block to enable the Thread.CurrentThread 116 {
209/* 117 throw new ArgumentNullException("callerThreadContext");
210 if (null != _fieldInfo) 118 }
211 { 119
212 _fieldInfo.SetValue( 120 // Todo: In NET 2.0, redo using the new feature of ExecutionContext class - Run()
213 Thread.CurrentThread, 121 // Restore call context
214 callerThreadContext._context); 122 if ((callerThreadContext._callContext != null) && (setLogicalCallContextMethodInfo != null))
215 } 123 {
216* / 124 setLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, new object[] { callerThreadContext._callContext });
217 } 125 }
218 } 126
127 // Restore HttpContext
128 if (callerThreadContext._httpContext != null)
129 {
130 HttpContext.Current = callerThreadContext._httpContext;
131 //CallContext.SetData(HttpContextSlotName, callerThreadContext._httpContext);
132 }
133 }
134 }
219 135
220 #endregion 136 #endregion
221} 137}
222*/ 138#endif
223
diff --git a/ThirdParty/SmartThreadPool/CanceledWorkItemsGroup.cs b/ThirdParty/SmartThreadPool/CanceledWorkItemsGroup.cs
new file mode 100644
index 0000000..5752957
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/CanceledWorkItemsGroup.cs
@@ -0,0 +1,14 @@
1namespace Amib.Threading.Internal
2{
3 internal class CanceledWorkItemsGroup
4 {
5 public readonly static CanceledWorkItemsGroup NotCanceledWorkItemsGroup = new CanceledWorkItemsGroup();
6
7 public CanceledWorkItemsGroup()
8 {
9 IsCanceled = false;
10 }
11
12 public bool IsCanceled { get; set; }
13 }
14} \ No newline at end of file
diff --git a/ThirdParty/SmartThreadPool/EventWaitHandle.cs b/ThirdParty/SmartThreadPool/EventWaitHandle.cs
new file mode 100644
index 0000000..25be07a
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/EventWaitHandle.cs
@@ -0,0 +1,104 @@
1#if (_WINDOWS_CE)
2
3using System;
4using System.Runtime.InteropServices;
5using System.Threading;
6
7namespace Amib.Threading.Internal
8{
9 /// <summary>
10 /// EventWaitHandle class
11 /// In WindowsCE this class doesn't exist and I needed the WaitAll and WaitAny implementation.
12 /// So I wrote this class to implement these two methods with some of their overloads.
13 /// It uses the WaitForMultipleObjects API to do the WaitAll and WaitAny.
14 /// Note that this class doesn't even inherit from WaitHandle!
15 /// </summary>
16 public class STPEventWaitHandle
17 {
18 #region Public Constants
19
20 public const int WaitTimeout = Timeout.Infinite;
21
22 #endregion
23
24 #region Private External Constants
25
26 private const Int32 WAIT_FAILED = -1;
27 private const Int32 WAIT_TIMEOUT = 0x102;
28 private const UInt32 INFINITE = 0xFFFFFFFF;
29
30 #endregion
31
32 #region WaitAll and WaitAny
33
34 internal static bool WaitOne(WaitHandle waitHandle, int millisecondsTimeout, bool exitContext)
35 {
36 return waitHandle.WaitOne(millisecondsTimeout, exitContext);
37 }
38
39 private static IntPtr[] PrepareNativeHandles(WaitHandle[] waitHandles)
40 {
41 IntPtr[] nativeHandles = new IntPtr[waitHandles.Length];
42 for (int i = 0; i < waitHandles.Length; i++)
43 {
44 nativeHandles[i] = waitHandles[i].Handle;
45 }
46 return nativeHandles;
47 }
48
49 public static bool WaitAll(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
50 {
51 uint timeout = millisecondsTimeout < 0 ? INFINITE : (uint)millisecondsTimeout;
52
53 IntPtr[] nativeHandles = PrepareNativeHandles(waitHandles);
54
55 int result = WaitForMultipleObjects((uint)waitHandles.Length, nativeHandles, true, timeout);
56
57 if (result == WAIT_TIMEOUT || result == WAIT_FAILED)
58 {
59 return false;
60 }
61
62 return true;
63 }
64
65
66 public static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
67 {
68 uint timeout = millisecondsTimeout < 0 ? INFINITE : (uint)millisecondsTimeout;
69
70 IntPtr[] nativeHandles = PrepareNativeHandles(waitHandles);
71
72 int result = WaitForMultipleObjects((uint)waitHandles.Length, nativeHandles, false, timeout);
73
74 if (result >= 0 && result < waitHandles.Length)
75 {
76 return result;
77 }
78
79 return -1;
80 }
81
82 public static int WaitAny(WaitHandle[] waitHandles)
83 {
84 return WaitAny(waitHandles, Timeout.Infinite, false);
85 }
86
87 public static int WaitAny(WaitHandle[] waitHandles, TimeSpan timeout, bool exitContext)
88 {
89 int millisecondsTimeout = (int)timeout.TotalMilliseconds;
90
91 return WaitAny(waitHandles, millisecondsTimeout, false);
92 }
93
94 #endregion
95
96 #region External methods
97
98 [DllImport("coredll.dll", SetLastError = true)]
99 public static extern int WaitForMultipleObjects(uint nCount, IntPtr[] lpHandles, bool fWaitAll, uint dwMilliseconds);
100
101 #endregion
102 }
103}
104#endif \ No newline at end of file
diff --git a/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs b/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
new file mode 100644
index 0000000..3c9c849
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
@@ -0,0 +1,82 @@
1using System.Threading;
2
3#if (_WINDOWS_CE)
4using System;
5using System.Runtime.InteropServices;
6#endif
7
8namespace Amib.Threading.Internal
9{
10 /// <summary>
11 /// EventWaitHandleFactory class.
12 /// This is a static class that creates AutoResetEvent and ManualResetEvent objects.
13 /// In WindowCE the WaitForMultipleObjects API fails to use the Handle property
14 /// of XxxResetEvent. It can use only handles that were created by the CreateEvent API.
15 /// Consequently this class creates the needed XxxResetEvent and replaces the handle if
16 /// it's a WindowsCE OS.
17 /// </summary>
18 public static class EventWaitHandleFactory
19 {
20 /// <summary>
21 /// Create a new AutoResetEvent object
22 /// </summary>
23 /// <returns>Return a new AutoResetEvent object</returns>
24 public static AutoResetEvent CreateAutoResetEvent()
25 {
26 AutoResetEvent waitHandle = new AutoResetEvent(false);
27
28#if (_WINDOWS_CE)
29 ReplaceEventHandle(waitHandle, false, false);
30#endif
31
32 return waitHandle;
33 }
34
35 /// <summary>
36 /// Create a new ManualResetEvent object
37 /// </summary>
38 /// <returns>Return a new ManualResetEvent object</returns>
39 public static ManualResetEvent CreateManualResetEvent(bool initialState)
40 {
41 ManualResetEvent waitHandle = new ManualResetEvent(initialState);
42
43#if (_WINDOWS_CE)
44 ReplaceEventHandle(waitHandle, true, initialState);
45#endif
46
47 return waitHandle;
48 }
49
50#if (_WINDOWS_CE)
51
52 /// <summary>
53 /// Replace the event handle
54 /// </summary>
55 /// <param name="waitHandle">The WaitHandle object which its handle needs to be replaced.</param>
56 /// <param name="manualReset">Indicates if the event is a ManualResetEvent (true) or an AutoResetEvent (false)</param>
57 /// <param name="initialState">The initial state of the event</param>
58 private static void ReplaceEventHandle(WaitHandle waitHandle, bool manualReset, bool initialState)
59 {
60 // Store the old handle
61 IntPtr oldHandle = waitHandle.Handle;
62
63 // Create a new event
64 IntPtr newHandle = CreateEvent(IntPtr.Zero, manualReset, initialState, null);
65
66 // Replace the old event with the new event
67 waitHandle.Handle = newHandle;
68
69 // Close the old event
70 CloseHandle (oldHandle);
71 }
72
73 [DllImport("coredll.dll", SetLastError = true)]
74 public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
75
76 //Handle
77 [DllImport("coredll.dll", SetLastError = true)]
78 public static extern bool CloseHandle(IntPtr hObject);
79#endif
80
81 }
82}
diff --git a/ThirdParty/SmartThreadPool/Exceptions.cs b/ThirdParty/SmartThreadPool/Exceptions.cs
index c454709..6c6a88b 100644
--- a/ThirdParty/SmartThreadPool/Exceptions.cs
+++ b/ThirdParty/SmartThreadPool/Exceptions.cs
@@ -1,8 +1,7 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
2#if !(_WINDOWS_CE)
5using System.Runtime.Serialization; 3using System.Runtime.Serialization;
4#endif
6 5
7namespace Amib.Threading 6namespace Amib.Threading
8{ 7{
@@ -11,22 +10,39 @@ namespace Amib.Threading
11 /// <summary> 10 /// <summary>
12 /// Represents an exception in case IWorkItemResult.GetResult has been canceled 11 /// Represents an exception in case IWorkItemResult.GetResult has been canceled
13 /// </summary> 12 /// </summary>
14 [Serializable] 13 public sealed partial class WorkItemCancelException : Exception
15 public sealed class WorkItemCancelException : ApplicationException
16 { 14 {
17 public WorkItemCancelException() : base() 15 public WorkItemCancelException()
18 { 16 {
19 } 17 }
20 18
21 public WorkItemCancelException(string message) : base(message) 19 public WorkItemCancelException(string message)
20 : base(message)
22 { 21 {
23 } 22 }
24 23
25 public WorkItemCancelException(string message, Exception e) : base(message, e) 24 public WorkItemCancelException(string message, Exception e)
25 : base(message, e)
26 { 26 {
27 } 27 }
28 }
28 29
29 public WorkItemCancelException(SerializationInfo si, StreamingContext sc) : base(si, sc) 30 /// <summary>
31 /// Represents an exception in case IWorkItemResult.GetResult has been timed out
32 /// </summary>
33 public sealed partial class WorkItemTimeoutException : Exception
34 {
35 public WorkItemTimeoutException()
36 {
37 }
38
39 public WorkItemTimeoutException(string message)
40 : base(message)
41 {
42 }
43
44 public WorkItemTimeoutException(string message, Exception e)
45 : base(message, e)
30 { 46 {
31 } 47 }
32 } 48 }
@@ -34,22 +50,33 @@ namespace Amib.Threading
34 /// <summary> 50 /// <summary>
35 /// Represents an exception in case IWorkItemResult.GetResult has been timed out 51 /// Represents an exception in case IWorkItemResult.GetResult has been timed out
36 /// </summary> 52 /// </summary>
37 [Serializable] 53 public sealed partial class WorkItemResultException : Exception
38 public sealed class WorkItemTimeoutException : ApplicationException
39 { 54 {
40 public WorkItemTimeoutException() : base() 55 public WorkItemResultException()
41 { 56 {
42 } 57 }
43 58
44 public WorkItemTimeoutException(string message) : base(message) 59 public WorkItemResultException(string message)
60 : base(message)
45 { 61 {
46 } 62 }
47 63
48 public WorkItemTimeoutException(string message, Exception e) : base(message, e) 64 public WorkItemResultException(string message, Exception e)
65 : base(message, e)
49 { 66 {
50 } 67 }
68 }
51 69
52 public WorkItemTimeoutException(SerializationInfo si, StreamingContext sc) : base(si, sc) 70
71#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
72 /// <summary>
73 /// Represents an exception in case IWorkItemResult.GetResult has been canceled
74 /// </summary>
75 [Serializable]
76 public sealed partial class WorkItemCancelException
77 {
78 public WorkItemCancelException(SerializationInfo si, StreamingContext sc)
79 : base(si, sc)
53 { 80 {
54 } 81 }
55 } 82 }
@@ -58,24 +85,27 @@ namespace Amib.Threading
58 /// Represents an exception in case IWorkItemResult.GetResult has been timed out 85 /// Represents an exception in case IWorkItemResult.GetResult has been timed out
59 /// </summary> 86 /// </summary>
60 [Serializable] 87 [Serializable]
61 public sealed class WorkItemResultException : ApplicationException 88 public sealed partial class WorkItemTimeoutException
62 { 89 {
63 public WorkItemResultException() : base() 90 public WorkItemTimeoutException(SerializationInfo si, StreamingContext sc)
64 { 91 : base(si, sc)
65 }
66
67 public WorkItemResultException(string message) : base(message)
68 {
69 }
70
71 public WorkItemResultException(string message, Exception e) : base(message, e)
72 { 92 {
73 } 93 }
94 }
74 95
75 public WorkItemResultException(SerializationInfo si, StreamingContext sc) : base(si, sc) 96 /// <summary>
97 /// Represents an exception in case IWorkItemResult.GetResult has been timed out
98 /// </summary>
99 [Serializable]
100 public sealed partial class WorkItemResultException
101 {
102 public WorkItemResultException(SerializationInfo si, StreamingContext sc)
103 : base(si, sc)
76 { 104 {
77 } 105 }
78 } 106 }
79 107
108#endif
109
80 #endregion 110 #endregion
81} 111}
diff --git a/ThirdParty/SmartThreadPool/Interfaces.cs b/ThirdParty/SmartThreadPool/Interfaces.cs
index f1c1fcf..513422f 100644
--- a/ThirdParty/SmartThreadPool/Interfaces.cs
+++ b/ThirdParty/SmartThreadPool/Interfaces.cs
@@ -1,271 +1,628 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
5using System.Threading; 2using System.Threading;
6 3
7namespace Amib.Threading 4namespace Amib.Threading
8{ 5{
9 #region Delegates 6 #region Delegates
7
8 /// <summary>
9 /// A delegate that represents the method to run as the work item
10 /// </summary>
11 /// <param name="state">A state object for the method to run</param>
12 public delegate object WorkItemCallback(object state);
13
14 /// <summary>
15 /// A delegate to call after the WorkItemCallback completed
16 /// </summary>
17 /// <param name="wir">The work item result object</param>
18 public delegate void PostExecuteWorkItemCallback(IWorkItemResult wir);
10 19
11 /// <summary> 20 /// <summary>
12 /// A delegate that represents the method to run as the work item 21 /// A delegate to call after the WorkItemCallback completed
13 /// </summary> 22 /// </summary>
14 /// <param name="state">A state object for the method to run</param> 23 /// <param name="wir">The work item result object</param>
15 public delegate object WorkItemCallback(object state); 24 public delegate void PostExecuteWorkItemCallback<TResult>(IWorkItemResult<TResult> wir);
25
26 /// <summary>
27 /// A delegate to call when a WorkItemsGroup becomes idle
28 /// </summary>
29 /// <param name="workItemsGroup">A reference to the WorkItemsGroup that became idle</param>
30 public delegate void WorkItemsGroupIdleHandler(IWorkItemsGroup workItemsGroup);
16 31
17 /// <summary> 32 /// <summary>
18 /// A delegate to call after the WorkItemCallback completed 33 /// A delegate to call after a thread is created, but before
34 /// it's first use.
19 /// </summary> 35 /// </summary>
20 /// <param name="wir">The work item result object</param> 36 public delegate void ThreadInitializationHandler();
21 public delegate void PostExecuteWorkItemCallback(IWorkItemResult wir);
22 37
23 /// <summary> 38 /// <summary>
24 /// A delegate to call when a WorkItemsGroup becomes idle 39 /// A delegate to call when a thread is about to exit, after
40 /// it is no longer belong to the pool.
25 /// </summary> 41 /// </summary>
26 /// <param name="workItemsGroup">A reference to the WorkItemsGroup that became idle</param> 42 public delegate void ThreadTerminationHandler();
27 public delegate void WorkItemsGroupIdleHandler(IWorkItemsGroup workItemsGroup);
28 43
29 #endregion 44 #endregion
30 45
31 #region WorkItem Priority 46 #region WorkItem Priority
32 47
33 public enum WorkItemPriority 48 /// <summary>
34 { 49 /// Defines the availeable priorities of a work item.
35 Lowest, 50 /// The higher the priority a work item has, the sooner
36 BelowNormal, 51 /// it will be executed.
37 Normal, 52 /// </summary>
38 AboveNormal, 53 public enum WorkItemPriority
39 Highest, 54 {
40 } 55 Lowest,
56 BelowNormal,
57 Normal,
58 AboveNormal,
59 Highest,
60 }
61
62 #endregion
63
64 #region IWorkItemsGroup interface
65
66 /// <summary>
67 /// IWorkItemsGroup interface
68 /// Created by SmartThreadPool.CreateWorkItemsGroup()
69 /// </summary>
70 public interface IWorkItemsGroup
71 {
72 /// <summary>
73 /// Get/Set the name of the WorkItemsGroup
74 /// </summary>
75 string Name { get; set; }
41 76
42 #endregion 77 /// <summary>
78 /// Get/Set the maximum number of workitem that execute cocurrency on the thread pool
79 /// </summary>
80 int Concurrency { get; set; }
81
82 /// <summary>
83 /// Get the number of work items waiting in the queue.
84 /// </summary>
85 int WaitingCallbacks { get; }
43 86
44 #region IHasWorkItemPriority interface 87 /// <summary>
88 /// Get an array with all the state objects of the currently running items.
89 /// The array represents a snap shot and impact performance.
90 /// </summary>
91 object[] GetStates();
45 92
46 public interface IHasWorkItemPriority 93 /// <summary>
47 { 94 /// Get the WorkItemsGroup start information
48 WorkItemPriority WorkItemPriority { get; } 95 /// </summary>
49 } 96 WIGStartInfo WIGStartInfo { get; }
50 97
51 #endregion 98 /// <summary>
99 /// Starts to execute work items
100 /// </summary>
101 void Start();
52 102
53 #region IWorkItemsGroup interface 103 /// <summary>
104 /// Cancel all the work items.
105 /// Same as Cancel(false)
106 /// </summary>
107 void Cancel();
54 108
55 /// <summary>
56 /// IWorkItemsGroup interface
57 /// </summary>
58 public interface IWorkItemsGroup
59 {
60 /// <summary> 109 /// <summary>
61 /// Get/Set the name of the WorkItemsGroup 110 /// Cancel all work items using thread abortion
62 /// </summary> 111 /// </summary>
63 string Name { get; set; } 112 /// <param name="abortExecution">True to stop work items by raising ThreadAbortException</param>
113 void Cancel(bool abortExecution);
64 114
115 /// <summary>
116 /// Wait for all work item to complete.
117 /// </summary>
118 void WaitForIdle();
119
120 /// <summary>
121 /// Wait for all work item to complete, until timeout expired
122 /// </summary>
123 /// <param name="timeout">How long to wait for the work items to complete</param>
124 /// <returns>Returns true if work items completed within the timeout, otherwise false.</returns>
125 bool WaitForIdle(TimeSpan timeout);
126
127 /// <summary>
128 /// Wait for all work item to complete, until timeout expired
129 /// </summary>
130 /// <param name="millisecondsTimeout">How long to wait for the work items to complete in milliseconds</param>
131 /// <returns>Returns true if work items completed within the timeout, otherwise false.</returns>
132 bool WaitForIdle(int millisecondsTimeout);
133
134 /// <summary>
135 /// IsIdle is true when there are no work items running or queued.
136 /// </summary>
137 bool IsIdle { get; }
138
139 /// <summary>
140 /// This event is fired when all work items are completed.
141 /// (When IsIdle changes to true)
142 /// This event only work on WorkItemsGroup. On SmartThreadPool
143 /// it throws the NotImplementedException.
144 /// </summary>
145 event WorkItemsGroupIdleHandler OnIdle;
146
147 #region QueueWorkItem
148
149 /// <summary>
150 /// Queue a work item
151 /// </summary>
152 /// <param name="callback">A callback to execute</param>
153 /// <returns>Returns a work item result</returns>
65 IWorkItemResult QueueWorkItem(WorkItemCallback callback); 154 IWorkItemResult QueueWorkItem(WorkItemCallback callback);
155
156 /// <summary>
157 /// Queue a work item
158 /// </summary>
159 /// <param name="callback">A callback to execute</param>
160 /// <param name="workItemPriority">The priority of the work item</param>
161 /// <returns>Returns a work item result</returns>
66 IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority); 162 IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority);
163
164 /// <summary>
165 /// Queue a work item
166 /// </summary>
167 /// <param name="callback">A callback to execute</param>
168 /// <param name="state">
169 /// The context object of the work item. Used for passing arguments to the work item.
170 /// </param>
171 /// <returns>Returns a work item result</returns>
67 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state); 172 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state);
173
174 /// <summary>
175 /// Queue a work item
176 /// </summary>
177 /// <param name="callback">A callback to execute</param>
178 /// <param name="state">
179 /// The context object of the work item. Used for passing arguments to the work item.
180 /// </param>
181 /// <param name="workItemPriority">The work item priority</param>
182 /// <returns>Returns a work item result</returns>
68 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority); 183 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority);
184
185 /// <summary>
186 /// Queue a work item
187 /// </summary>
188 /// <param name="callback">A callback to execute</param>
189 /// <param name="state">
190 /// The context object of the work item. Used for passing arguments to the work item.
191 /// </param>
192 /// <param name="postExecuteWorkItemCallback">
193 /// A delegate to call after the callback completion
194 /// </param>
195 /// <returns>Returns a work item result</returns>
69 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback); 196 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback);
197
198 /// <summary>
199 /// Queue a work item
200 /// </summary>
201 /// <param name="callback">A callback to execute</param>
202 /// <param name="state">
203 /// The context object of the work item. Used for passing arguments to the work item.
204 /// </param>
205 /// <param name="postExecuteWorkItemCallback">
206 /// A delegate to call after the callback completion
207 /// </param>
208 /// <param name="workItemPriority">The work item priority</param>
209 /// <returns>Returns a work item result</returns>
70 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, WorkItemPriority workItemPriority); 210 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, WorkItemPriority workItemPriority);
211
212 /// <summary>
213 /// Queue a work item
214 /// </summary>
215 /// <param name="callback">A callback to execute</param>
216 /// <param name="state">
217 /// The context object of the work item. Used for passing arguments to the work item.
218 /// </param>
219 /// <param name="postExecuteWorkItemCallback">
220 /// A delegate to call after the callback completion
221 /// </param>
222 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
223 /// <returns>Returns a work item result</returns>
71 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute); 224 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute);
225
226 /// <summary>
227 /// Queue a work item
228 /// </summary>
229 /// <param name="callback">A callback to execute</param>
230 /// <param name="state">
231 /// The context object of the work item. Used for passing arguments to the work item.
232 /// </param>
233 /// <param name="postExecuteWorkItemCallback">
234 /// A delegate to call after the callback completion
235 /// </param>
236 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
237 /// <param name="workItemPriority">The work item priority</param>
238 /// <returns>Returns a work item result</returns>
72 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority); 239 IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority);
73 240
241 /// <summary>
242 /// Queue a work item
243 /// </summary>
244 /// <param name="workItemInfo">Work item info</param>
245 /// <param name="callback">A callback to execute</param>
246 /// <returns>Returns a work item result</returns>
74 IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback); 247 IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback);
75 IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state);
76
77 void WaitForIdle();
78 bool WaitForIdle(TimeSpan timeout);
79 bool WaitForIdle(int millisecondsTimeout);
80 248
81 int WaitingCallbacks { get; } 249 /// <summary>
82 event WorkItemsGroupIdleHandler OnIdle; 250 /// Queue a work item
83 251 /// </summary>
84 void Cancel(); 252 /// <param name="workItemInfo">Work item information</param>
85 void Start(); 253 /// <param name="callback">A callback to execute</param>
86 } 254 /// <param name="state">
255 /// The context object of the work item. Used for passing arguments to the work item.
256 /// </param>
257 /// <returns>Returns a work item result</returns>
258 IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state);
87 259
88 #endregion 260 #endregion
89 261
90 #region CallToPostExecute enumerator 262 #region QueueWorkItem(Action<...>)
91 263
92 [Flags] 264 /// <summary>
93 public enum CallToPostExecute 265 /// Queue a work item.
94 { 266 /// </summary>
95 Never = 0x00, 267 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
96 WhenWorkItemCanceled = 0x01, 268 IWorkItemResult QueueWorkItem(Action action);
97 WhenWorkItemNotCanceled = 0x02,
98 Always = WhenWorkItemCanceled | WhenWorkItemNotCanceled,
99 }
100 269
101 #endregion 270 /// <summary>
271 /// Queue a work item.
272 /// </summary>
273 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
274 IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority);
102 275
103 #region IWorkItemResult interface 276 /// <summary>
277 /// Queue a work item.
278 /// </summary>
279 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
280 IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg, WorkItemPriority priority);
104 281
105 /// <summary>
106 /// IWorkItemResult interface
107 /// </summary>
108 public interface IWorkItemResult
109 {
110 /// <summary> 282 /// <summary>
111 /// Get the result of the work item. 283 /// Queue a work item.
112 /// If the work item didn't run yet then the caller waits.
113 /// </summary> 284 /// </summary>
114 /// <returns>The result of the work item</returns> 285 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
115 object GetResult(); 286 IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg);
116 287
117 /// <summary> 288 /// <summary>
118 /// Get the result of the work item. 289 /// Queue a work item.
119 /// If the work item didn't run yet then the caller waits until timeout.
120 /// </summary> 290 /// </summary>
121 /// <returns>The result of the work item</returns> 291 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
122 /// On timeout throws WorkItemTimeoutException 292 IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2);
123 object GetResult(
124 int millisecondsTimeout,
125 bool exitContext);
126 293
127 /// <summary> 294 /// <summary>
128 /// Get the result of the work item. 295 /// Queue a work item.
129 /// If the work item didn't run yet then the caller waits until timeout.
130 /// </summary> 296 /// </summary>
131 /// <returns>The result of the work item</returns> 297 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
132 /// On timeout throws WorkItemTimeoutException 298 IWorkItemResult QueueWorkItem<T1, T2> (Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority);
133 object GetResult(
134 TimeSpan timeout,
135 bool exitContext);
136 299
137 void Abort(); 300 /// <summary>
301 /// Queue a work item.
302 /// </summary>
303 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
304 IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3);
138 305
139 /// <summary> 306 /// <summary>
140 /// Get the result of the work item. 307 /// Queue a work item.
141 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
142 /// </summary> 308 /// </summary>
143 /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param> 309 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
144 /// <param name="exitContext"> 310 IWorkItemResult QueueWorkItem<T1, T2, T3> (Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority);
145 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
146 /// </param>
147 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param>
148 /// <returns>The result of the work item</returns>
149 /// On timeout throws WorkItemTimeoutException
150 /// On cancel throws WorkItemCancelException
151 object GetResult(
152 int millisecondsTimeout,
153 bool exitContext,
154 WaitHandle cancelWaitHandle);
155 311
156 /// <summary> 312 /// <summary>
157 /// Get the result of the work item. 313 /// Queue a work item.
158 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
159 /// </summary> 314 /// </summary>
160 /// <returns>The result of the work item</returns> 315 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
161 /// On timeout throws WorkItemTimeoutException 316 IWorkItemResult QueueWorkItem<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4);
162 /// On cancel throws WorkItemCancelException
163 object GetResult(
164 TimeSpan timeout,
165 bool exitContext,
166 WaitHandle cancelWaitHandle);
167 317
168 /// <summary> 318 /// <summary>
169 /// Get the result of the work item. 319 /// Queue a work item.
170 /// If the work item didn't run yet then the caller waits.
171 /// </summary> 320 /// </summary>
172 /// <param name="e">Filled with the exception if one was thrown</param> 321 /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
173 /// <returns>The result of the work item</returns> 322 IWorkItemResult QueueWorkItem<T1, T2, T3, T4> (Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority);
174 object GetResult(out Exception e); 323
324 #endregion
325
326 #region QueueWorkItem(Func<...>)
175 327
176 /// <summary> 328 /// <summary>
177 /// Get the result of the work item. 329 /// Queue a work item.
178 /// If the work item didn't run yet then the caller waits until timeout.
179 /// </summary> 330 /// </summary>
180 /// <param name="e">Filled with the exception if one was thrown</param> 331 /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
181 /// <returns>The result of the work item</returns> 332 /// its GetResult() returns a TResult object</returns>
182 /// On timeout throws WorkItemTimeoutException 333 IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func);
183 object GetResult(
184 int millisecondsTimeout,
185 bool exitContext,
186 out Exception e);
187 334
188 /// <summary> 335 /// <summary>
189 /// Get the result of the work item. 336 /// Queue a work item.
190 /// If the work item didn't run yet then the caller waits until timeout.
191 /// </summary> 337 /// </summary>
192 /// <param name="e">Filled with the exception if one was thrown</param> 338 /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
193 /// <returns>The result of the work item</returns> 339 /// its GetResult() returns a TResult object</returns>
194 /// On timeout throws WorkItemTimeoutException 340 IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg);
195 object GetResult(
196 TimeSpan timeout,
197 bool exitContext,
198 out Exception e);
199 341
200 /// <summary> 342 /// <summary>
201 /// Get the result of the work item. 343 /// Queue a work item.
202 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
203 /// </summary> 344 /// </summary>
204 /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param> 345 /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
205 /// <param name="exitContext"> 346 /// its GetResult() returns a TResult object</returns>
206 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. 347 IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2);
207 /// </param>
208 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param>
209 /// <param name="e">Filled with the exception if one was thrown</param>
210 /// <returns>The result of the work item</returns>
211 /// On timeout throws WorkItemTimeoutException
212 /// On cancel throws WorkItemCancelException
213 object GetResult(
214 int millisecondsTimeout,
215 bool exitContext,
216 WaitHandle cancelWaitHandle,
217 out Exception e);
218 348
219 /// <summary> 349 /// <summary>
220 /// Get the result of the work item. 350 /// Queue a work item.
221 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
222 /// </summary> 351 /// </summary>
223 /// <returns>The result of the work item</returns> 352 /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
224 /// <param name="e">Filled with the exception if one was thrown</param> 353 /// its GetResult() returns a TResult object</returns>
225 /// On timeout throws WorkItemTimeoutException 354 IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3);
226 /// On cancel throws WorkItemCancelException
227 object GetResult(
228 TimeSpan timeout,
229 bool exitContext,
230 WaitHandle cancelWaitHandle,
231 out Exception e);
232 355
233 /// <summary> 356 /// <summary>
234 /// Gets an indication whether the asynchronous operation has completed. 357 /// Queue a work item.
235 /// </summary> 358 /// </summary>
236 bool IsCompleted { get; } 359 /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
360 /// its GetResult() returns a TResult object</returns>
361 IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4);
362
363 #endregion
364 }
365
366 #endregion
237 367
368 #region CallToPostExecute enumerator
369
370 [Flags]
371 public enum CallToPostExecute
372 {
238 /// <summary> 373 /// <summary>
239 /// Gets an indication whether the asynchronous operation has been canceled. 374 /// Never call to the PostExecute call back
240 /// </summary> 375 /// </summary>
241 bool IsCanceled { get; } 376 Never = 0x00,
242 377
243 /// <summary> 378 /// <summary>
244 /// Gets a user-defined object that qualifies or contains information about an asynchronous operation. 379 /// Call to the PostExecute only when the work item is cancelled
245 /// </summary> 380 /// </summary>
246 object State { get; } 381 WhenWorkItemCanceled = 0x01,
247 382
248 /// <summary> 383 /// <summary>
249 /// Cancel the work item if it didn't start running yet. 384 /// Call to the PostExecute only when the work item is not cancelled
250 /// </summary> 385 /// </summary>
251 /// <returns>Returns true on success or false if the work item is in progress or already completed</returns> 386 WhenWorkItemNotCanceled = 0x02,
252 bool Cancel();
253 387
254 /// <summary> 388 /// <summary>
255 /// Get the work item's priority 389 /// Always call to the PostExecute
256 /// </summary> 390 /// </summary>
257 WorkItemPriority WorkItemPriority { get; } 391 Always = WhenWorkItemCanceled | WhenWorkItemNotCanceled,
392 }
393
394 #endregion
258 395
396 #region IWorkItemResult interface
397
398 /// <summary>
399 /// The common interface of IWorkItemResult and IWorkItemResult&lt;T&gt;
400 /// </summary>
401 public interface IWaitableResult
402 {
259 /// <summary> 403 /// <summary>
260 /// Return the result, same as GetResult() 404 /// This method intent is for internal use.
261 /// </summary> 405 /// </summary>
262 object Result { get; } 406 /// <returns></returns>
407 IWorkItemResult GetWorkItemResult();
263 408
264 /// <summary> 409 /// <summary>
265 /// Returns the exception if occured otherwise returns null. 410 /// This method intent is for internal use.
266 /// </summary> 411 /// </summary>
267 object Exception { get; } 412 /// <returns></returns>
413 IWorkItemResult<TResult> GetWorkItemResultT<TResult>();
268 } 414 }
269 415
416 /// <summary>
417 /// IWorkItemResult interface.
418 /// Created when a WorkItemCallback work item is queued.
419 /// </summary>
420 public interface IWorkItemResult : IWorkItemResult<object>
421 {
422 }
423
424 /// <summary>
425 /// IWorkItemResult&lt;TResult&gt; interface.
426 /// Created when a Func&lt;TResult&gt; work item is queued.
427 /// </summary>
428 public interface IWorkItemResult<TResult> : IWaitableResult
429 {
430 /// <summary>
431 /// Get the result of the work item.
432 /// If the work item didn't run yet then the caller waits.
433 /// </summary>
434 /// <returns>The result of the work item</returns>
435 TResult GetResult();
436
437 /// <summary>
438 /// Get the result of the work item.
439 /// If the work item didn't run yet then the caller waits until timeout.
440 /// </summary>
441 /// <returns>The result of the work item</returns>
442 /// On timeout throws WorkItemTimeoutException
443 TResult GetResult(
444 int millisecondsTimeout,
445 bool exitContext);
446
447 /// <summary>
448 /// Get the result of the work item.
449 /// If the work item didn't run yet then the caller waits until timeout.
450 /// </summary>
451 /// <returns>The result of the work item</returns>
452 /// On timeout throws WorkItemTimeoutException
453 TResult GetResult(
454 TimeSpan timeout,
455 bool exitContext);
456
457 /// <summary>
458 /// Get the result of the work item.
459 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
460 /// </summary>
461 /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param>
462 /// <param name="exitContext">
463 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
464 /// </param>
465 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param>
466 /// <returns>The result of the work item</returns>
467 /// On timeout throws WorkItemTimeoutException
468 /// On cancel throws WorkItemCancelException
469 TResult GetResult(
470 int millisecondsTimeout,
471 bool exitContext,
472 WaitHandle cancelWaitHandle);
473
474 /// <summary>
475 /// Get the result of the work item.
476 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
477 /// </summary>
478 /// <returns>The result of the work item</returns>
479 /// On timeout throws WorkItemTimeoutException
480 /// On cancel throws WorkItemCancelException
481 TResult GetResult(
482 TimeSpan timeout,
483 bool exitContext,
484 WaitHandle cancelWaitHandle);
485
486 /// <summary>
487 /// Get the result of the work item.
488 /// If the work item didn't run yet then the caller waits.
489 /// </summary>
490 /// <param name="e">Filled with the exception if one was thrown</param>
491 /// <returns>The result of the work item</returns>
492 TResult GetResult(out Exception e);
493
494 /// <summary>
495 /// Get the result of the work item.
496 /// If the work item didn't run yet then the caller waits until timeout.
497 /// </summary>
498 /// <param name="millisecondsTimeout"></param>
499 /// <param name="exitContext"></param>
500 /// <param name="e">Filled with the exception if one was thrown</param>
501 /// <returns>The result of the work item</returns>
502 /// On timeout throws WorkItemTimeoutException
503 TResult GetResult(
504 int millisecondsTimeout,
505 bool exitContext,
506 out Exception e);
507
508 /// <summary>
509 /// Get the result of the work item.
510 /// If the work item didn't run yet then the caller waits until timeout.
511 /// </summary>
512 /// <param name="exitContext"></param>
513 /// <param name="e">Filled with the exception if one was thrown</param>
514 /// <param name="timeout"></param>
515 /// <returns>The result of the work item</returns>
516 /// On timeout throws WorkItemTimeoutException
517 TResult GetResult(
518 TimeSpan timeout,
519 bool exitContext,
520 out Exception e);
521
522 /// <summary>
523 /// Get the result of the work item.
524 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
525 /// </summary>
526 /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param>
527 /// <param name="exitContext">
528 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
529 /// </param>
530 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param>
531 /// <param name="e">Filled with the exception if one was thrown</param>
532 /// <returns>The result of the work item</returns>
533 /// On timeout throws WorkItemTimeoutException
534 /// On cancel throws WorkItemCancelException
535 TResult GetResult(
536 int millisecondsTimeout,
537 bool exitContext,
538 WaitHandle cancelWaitHandle,
539 out Exception e);
540
541 /// <summary>
542 /// Get the result of the work item.
543 /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled.
544 /// </summary>
545 /// <returns>The result of the work item</returns>
546 /// <param name="cancelWaitHandle"></param>
547 /// <param name="e">Filled with the exception if one was thrown</param>
548 /// <param name="timeout"></param>
549 /// <param name="exitContext"></param>
550 /// On timeout throws WorkItemTimeoutException
551 /// On cancel throws WorkItemCancelException
552 TResult GetResult(
553 TimeSpan timeout,
554 bool exitContext,
555 WaitHandle cancelWaitHandle,
556 out Exception e);
557
558 /// <summary>
559 /// Gets an indication whether the asynchronous operation has completed.
560 /// </summary>
561 bool IsCompleted { get; }
562
563 /// <summary>
564 /// Gets an indication whether the asynchronous operation has been canceled.
565 /// </summary>
566 bool IsCanceled { get; }
567
568 /// <summary>
569 /// Gets the user-defined object that contains context data
570 /// for the work item method.
571 /// </summary>
572 object State { get; }
573
574 /// <summary>
575 /// Same as Cancel(false).
576 /// </summary>
577 bool Cancel();
578
579 /// <summary>
580 /// Cancel the work item execution.
581 /// If the work item is in the queue then it won't execute
582 /// If the work item is completed, it will remain completed
583 /// If the work item is in progress then the user can check the SmartThreadPool.IsWorkItemCanceled
584 /// property to check if the work item has been cancelled. If the abortExecution is set to true then
585 /// the Smart Thread Pool will send an AbortException to the running thread to stop the execution
586 /// of the work item. When an in progress work item is canceled its GetResult will throw WorkItemCancelException.
587 /// If the work item is already cancelled it will remain cancelled
588 /// </summary>
589 /// <param name="abortExecution">When true send an AbortException to the executing thread.</param>
590 /// <returns>Returns true if the work item was not completed, otherwise false.</returns>
591 bool Cancel(bool abortExecution);
592
593 /// <summary>
594 /// Get the work item's priority
595 /// </summary>
596 WorkItemPriority WorkItemPriority { get; }
597
598 /// <summary>
599 /// Return the result, same as GetResult()
600 /// </summary>
601 TResult Result { get; }
602
603 /// <summary>
604 /// Returns the exception if occured otherwise returns null.
605 /// </summary>
606 object Exception { get; }
607 }
608
609 #endregion
610
611 #region .NET 3.5
612
613 // All these delegate are built-in .NET 3.5
614 // Comment/Remove them when compiling to .NET 3.5 to avoid ambiguity.
615
616 public delegate void Action();
617 public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
618 public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
619 public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
620
621 public delegate TResult Func<TResult>();
622 public delegate TResult Func<T, TResult>(T arg1);
623 public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
624 public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
625 public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
626
270 #endregion 627 #endregion
271} 628}
diff --git a/ThirdParty/SmartThreadPool/InternalInterfaces.cs b/ThirdParty/SmartThreadPool/InternalInterfaces.cs
new file mode 100644
index 0000000..0072e10
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/InternalInterfaces.cs
@@ -0,0 +1,27 @@
1
2namespace Amib.Threading.Internal
3{
4 /// <summary>
5 /// An internal delegate to call when the WorkItem starts or completes
6 /// </summary>
7 internal delegate void WorkItemStateCallback(WorkItem workItem);
8
9 internal interface IInternalWorkItemResult
10 {
11 event WorkItemStateCallback OnWorkItemStarted;
12 event WorkItemStateCallback OnWorkItemCompleted;
13 }
14
15 internal interface IInternalWaitableResult
16 {
17 /// <summary>
18 /// This method is intent for internal use.
19 /// </summary>
20 IWorkItemResult GetWorkItemResult();
21 }
22
23 public interface IHasWorkItemPriority
24 {
25 WorkItemPriority WorkItemPriority { get; }
26 }
27}
diff --git a/ThirdParty/SmartThreadPool/PriorityQueue.cs b/ThirdParty/SmartThreadPool/PriorityQueue.cs
index 63d5e84..409c879 100644
--- a/ThirdParty/SmartThreadPool/PriorityQueue.cs
+++ b/ThirdParty/SmartThreadPool/PriorityQueue.cs
@@ -1,240 +1,239 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
5using System.Collections; 2using System.Collections;
3using System.Collections.Generic;
6using System.Diagnostics; 4using System.Diagnostics;
7 5
8namespace Amib.Threading.Internal 6namespace Amib.Threading.Internal
9{ 7{
10 #region PriorityQueue class 8 #region PriorityQueue class
11 9
12 /// <summary> 10 /// <summary>
13 /// PriorityQueue class 11 /// PriorityQueue class
14 /// This class is not thread safe because we use external lock 12 /// This class is not thread safe because we use external lock
15 /// </summary> 13 /// </summary>
16 public sealed class PriorityQueue : IEnumerable 14 public sealed class PriorityQueue : IEnumerable
17 { 15 {
18 #region Private members 16 #region Private members
19 17
20 /// <summary> 18 /// <summary>
21 /// The number of queues, there is one for each type of priority 19 /// The number of queues, there is one for each type of priority
22 /// </summary> 20 /// </summary>
23 private const int _queuesCount = WorkItemPriority.Highest-WorkItemPriority.Lowest+1; 21 private const int _queuesCount = WorkItemPriority.Highest-WorkItemPriority.Lowest+1;
24 22
25 /// <summary> 23 /// <summary>
26 /// Work items queues. There is one for each type of priority 24 /// Work items queues. There is one for each type of priority
27 /// </summary> 25 /// </summary>
28 private Queue [] _queues = new Queue[_queuesCount]; 26 private readonly LinkedList<IHasWorkItemPriority>[] _queues = new LinkedList<IHasWorkItemPriority>[_queuesCount];
29 27
30 /// <summary> 28 /// <summary>
31 /// The total number of work items within the queues 29 /// The total number of work items within the queues
32 /// </summary> 30 /// </summary>
33 private int _workItemsCount = 0; 31 private int _workItemsCount;
34 32
35 /// <summary> 33 /// <summary>
36 /// Use with IEnumerable interface 34 /// Use with IEnumerable interface
37 /// </summary> 35 /// </summary>
38 private int _version = 0; 36 private int _version;
39 37
40 #endregion 38 #endregion
41 39
42 #region Contructor 40 #region Contructor
43 41
44 public PriorityQueue() 42 public PriorityQueue()
45 { 43 {
46 for(int i = 0; i < _queues.Length; ++i) 44 for(int i = 0; i < _queues.Length; ++i)
47 { 45 {
48 _queues[i] = new Queue(); 46 _queues[i] = new LinkedList<IHasWorkItemPriority>();
49 } 47 }
50 } 48 }
51 49
52 #endregion 50 #endregion
53 51
54 #region Methods 52 #region Methods
55 53
56 /// <summary> 54 /// <summary>
57 /// Enqueue a work item. 55 /// Enqueue a work item.
58 /// </summary> 56 /// </summary>
59 /// <param name="workItem">A work item</param> 57 /// <param name="workItem">A work item</param>
60 public void Enqueue(IHasWorkItemPriority workItem) 58 public void Enqueue(IHasWorkItemPriority workItem)
61 { 59 {
62 Debug.Assert(null != workItem); 60 Debug.Assert(null != workItem);
63 61
64 int queueIndex = _queuesCount-(int)workItem.WorkItemPriority-1; 62 int queueIndex = _queuesCount-(int)workItem.WorkItemPriority-1;
65 Debug.Assert(queueIndex >= 0); 63 Debug.Assert(queueIndex >= 0);
66 Debug.Assert(queueIndex < _queuesCount); 64 Debug.Assert(queueIndex < _queuesCount);
67 65
68 _queues[queueIndex].Enqueue(workItem); 66 _queues[queueIndex].AddLast(workItem);
69 ++_workItemsCount; 67 ++_workItemsCount;
70 ++_version; 68 ++_version;
71 } 69 }
72 70
73 /// <summary> 71 /// <summary>
74 /// Dequeque a work item. 72 /// Dequeque a work item.
75 /// </summary> 73 /// </summary>
76 /// <returns>Returns the next work item</returns> 74 /// <returns>Returns the next work item</returns>
77 public IHasWorkItemPriority Dequeue() 75 public IHasWorkItemPriority Dequeue()
78 { 76 {
79 IHasWorkItemPriority workItem = null; 77 IHasWorkItemPriority workItem = null;
80 78
81 if(_workItemsCount > 0) 79 if(_workItemsCount > 0)
82 { 80 {
83 int queueIndex = GetNextNonEmptyQueue(-1); 81 int queueIndex = GetNextNonEmptyQueue(-1);
84 Debug.Assert(queueIndex >= 0); 82 Debug.Assert(queueIndex >= 0);
85 workItem = _queues[queueIndex].Dequeue() as IHasWorkItemPriority; 83 workItem = _queues[queueIndex].First.Value;
86 Debug.Assert(null != workItem); 84 _queues[queueIndex].RemoveFirst();
87 --_workItemsCount; 85 Debug.Assert(null != workItem);
88 ++_version; 86 --_workItemsCount;
89 } 87 ++_version;
90 88 }
91 return workItem; 89
92 } 90 return workItem;
93 91 }
94 /// <summary> 92
95 /// Find the next non empty queue starting at queue queueIndex+1 93 /// <summary>
96 /// </summary> 94 /// Find the next non empty queue starting at queue queueIndex+1
97 /// <param name="queueIndex">The index-1 to start from</param> 95 /// </summary>
98 /// <returns> 96 /// <param name="queueIndex">The index-1 to start from</param>
99 /// The index of the next non empty queue or -1 if all the queues are empty 97 /// <returns>
100 /// </returns> 98 /// The index of the next non empty queue or -1 if all the queues are empty
101 private int GetNextNonEmptyQueue(int queueIndex) 99 /// </returns>
102 { 100 private int GetNextNonEmptyQueue(int queueIndex)
103 for(int i = queueIndex+1; i < _queuesCount; ++i) 101 {
104 { 102 for(int i = queueIndex+1; i < _queuesCount; ++i)
105 if(_queues[i].Count > 0) 103 {
106 { 104 if(_queues[i].Count > 0)
107 return i; 105 {
108 } 106 return i;
109 } 107 }
110 return -1; 108 }
111 } 109 return -1;
112 110 }
113 /// <summary> 111
114 /// The number of work items 112 /// <summary>
115 /// </summary> 113 /// The number of work items
116 public int Count 114 /// </summary>
117 { 115 public int Count
118 get 116 {
119 { 117 get
120 return _workItemsCount; 118 {
121 } 119 return _workItemsCount;
122 } 120 }
123 121 }
124 /// <summary> 122
125 /// Clear all the work items 123 /// <summary>
126 /// </summary> 124 /// Clear all the work items
127 public void Clear() 125 /// </summary>
128 { 126 public void Clear()
129 if (_workItemsCount > 0) 127 {
130 { 128 if (_workItemsCount > 0)
131 foreach(Queue queue in _queues) 129 {
132 { 130 foreach(LinkedList<IHasWorkItemPriority> queue in _queues)
133 queue.Clear(); 131 {
134 } 132 queue.Clear();
135 _workItemsCount = 0; 133 }
136 ++_version; 134 _workItemsCount = 0;
137 } 135 ++_version;
138 } 136 }
139 137 }
140 #endregion 138
141 139 #endregion
142 #region IEnumerable Members 140
143 141 #region IEnumerable Members
144 /// <summary> 142
145 /// Returns an enumerator to iterate over the work items 143 /// <summary>
146 /// </summary> 144 /// Returns an enumerator to iterate over the work items
147 /// <returns>Returns an enumerator</returns> 145 /// </summary>
148 public IEnumerator GetEnumerator() 146 /// <returns>Returns an enumerator</returns>
149 { 147 public IEnumerator GetEnumerator()
150 return new PriorityQueueEnumerator(this); 148 {
151 } 149 return new PriorityQueueEnumerator(this);
152 150 }
153 #endregion 151
154 152 #endregion
155 #region PriorityQueueEnumerator 153
156 154 #region PriorityQueueEnumerator
157 /// <summary> 155
158 /// The class the implements the enumerator 156 /// <summary>
159 /// </summary> 157 /// The class the implements the enumerator
160 private class PriorityQueueEnumerator : IEnumerator 158 /// </summary>
161 { 159 private class PriorityQueueEnumerator : IEnumerator
162 private PriorityQueue _priorityQueue; 160 {
163 private int _version; 161 private readonly PriorityQueue _priorityQueue;
164 private int _queueIndex; 162 private int _version;
165 private IEnumerator _enumerator; 163 private int _queueIndex;
166 164 private IEnumerator _enumerator;
167 public PriorityQueueEnumerator(PriorityQueue priorityQueue) 165
168 { 166 public PriorityQueueEnumerator(PriorityQueue priorityQueue)
169 _priorityQueue = priorityQueue; 167 {
170 _version = _priorityQueue._version; 168 _priorityQueue = priorityQueue;
171 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(-1); 169 _version = _priorityQueue._version;
172 if (_queueIndex >= 0) 170 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(-1);
173 { 171 if (_queueIndex >= 0)
174 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator(); 172 {
175 } 173 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator();
176 else 174 }
177 { 175 else
178 _enumerator = null; 176 {
179 } 177 _enumerator = null;
180 } 178 }
181 179 }
182 #region IEnumerator Members 180
183 181 #region IEnumerator Members
184 public void Reset() 182
185 { 183 public void Reset()
186 _version = _priorityQueue._version; 184 {
187 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(-1); 185 _version = _priorityQueue._version;
188 if (_queueIndex >= 0) 186 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(-1);
189 { 187 if (_queueIndex >= 0)
190 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator(); 188 {
191 } 189 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator();
192 else 190 }
193 { 191 else
194 _enumerator = null; 192 {
195 } 193 _enumerator = null;
196 } 194 }
197 195 }
198 public object Current 196
199 { 197 public object Current
200 get 198 {
201 { 199 get
202 Debug.Assert(null != _enumerator); 200 {
203 return _enumerator.Current; 201 Debug.Assert(null != _enumerator);
204 } 202 return _enumerator.Current;
205 } 203 }
206 204 }
207 public bool MoveNext() 205
208 { 206 public bool MoveNext()
209 if (null == _enumerator) 207 {
210 { 208 if (null == _enumerator)
211 return false; 209 {
212 } 210 return false;
213 211 }
214 if(_version != _priorityQueue._version) 212
215 { 213 if(_version != _priorityQueue._version)
216 throw new InvalidOperationException("The collection has been modified"); 214 {
217 215 throw new InvalidOperationException("The collection has been modified");
218 } 216
219 if (!_enumerator.MoveNext()) 217 }
220 { 218 if (!_enumerator.MoveNext())
221 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(_queueIndex); 219 {
222 if(-1 == _queueIndex) 220 _queueIndex = _priorityQueue.GetNextNonEmptyQueue(_queueIndex);
223 { 221 if(-1 == _queueIndex)
224 return false; 222 {
225 } 223 return false;
226 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator(); 224 }
227 _enumerator.MoveNext(); 225 _enumerator = _priorityQueue._queues[_queueIndex].GetEnumerator();
228 return true; 226 _enumerator.MoveNext();
229 } 227 return true;
230 return true; 228 }
231 } 229 return true;
232 230 }
233 #endregion 231
234 } 232 #endregion
235 233 }
236 #endregion 234
237 } 235 #endregion
238 236 }
239 #endregion 237
238 #endregion
240} 239}
diff --git a/ThirdParty/SmartThreadPool/Properties/AssemblyInfo.cs b/ThirdParty/SmartThreadPool/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..4728c1f
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/Properties/AssemblyInfo.cs
@@ -0,0 +1,23 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using System.Runtime.InteropServices;
4
5[assembly: AssemblyTitle("Amib.Threading")]
6[assembly: AssemblyDescription("Smart Thread Pool")]
7[assembly: AssemblyConfiguration("")]
8[assembly: AssemblyCompany("")]
9[assembly: AssemblyProduct("Amib.Threading")]
10[assembly: AssemblyCopyright("")]
11[assembly: AssemblyTrademark("")]
12[assembly: AssemblyCulture("")]
13[assembly: ComVisible(false)]
14[assembly: Guid("c764a3de-c4f8-434d-85b5-a09830d1e44f")]
15[assembly: AssemblyVersion("2.2.3.0")]
16
17#if (_PUBLISH)
18[assembly: InternalsVisibleTo("STPTests,PublicKey=00240000048000009400000006020000002400005253413100040000010001004fe3d39add741ba7c8d52cd1eb0d94c7d79060ad956cbaff0e51c1dce94db10356b261778bc1ac3114b3218434da6fcd8416dd5507653809598f7d2afc422099ce4f6b7b0477f18e6c57c727ef2a7ab6ee56e6b4589fe44cb0e25f2875a3c65ab0383ee33c4dd93023f7ce1218bebc8b7a9a1dac878938f5c4f45ea74b6bd8ad")]
19#else
20[assembly: InternalsVisibleTo("STPTests")]
21#endif
22
23
diff --git a/ThirdParty/SmartThreadPool/SLExt.cs b/ThirdParty/SmartThreadPool/SLExt.cs
new file mode 100644
index 0000000..23a60bc
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/SLExt.cs
@@ -0,0 +1,16 @@
1#if _SILVERLIGHT
2
3using System.Threading;
4
5namespace Amib.Threading
6{
7 public enum ThreadPriority
8 {
9 Lowest,
10 BelowNormal,
11 Normal,
12 AboveNormal,
13 Highest,
14 }
15}
16#endif
diff --git a/ThirdParty/SmartThreadPool/STPEventWaitHandle.cs b/ThirdParty/SmartThreadPool/STPEventWaitHandle.cs
new file mode 100644
index 0000000..9b17f69
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/STPEventWaitHandle.cs
@@ -0,0 +1,62 @@
1#if !(_WINDOWS_CE)
2
3using System;
4using System.Threading;
5
6namespace Amib.Threading.Internal
7{
8#if _WINDOWS || WINDOWS_PHONE
9 internal static class STPEventWaitHandle
10 {
11 public const int WaitTimeout = Timeout.Infinite;
12
13 internal static bool WaitAll(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
14 {
15 return WaitHandle.WaitAll(waitHandles, millisecondsTimeout);
16 }
17
18 internal static int WaitAny(WaitHandle[] waitHandles)
19 {
20 return WaitHandle.WaitAny(waitHandles);
21 }
22
23 internal static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
24 {
25 return WaitHandle.WaitAny(waitHandles, millisecondsTimeout);
26 }
27
28 internal static bool WaitOne(WaitHandle waitHandle, int millisecondsTimeout, bool exitContext)
29 {
30 return waitHandle.WaitOne(millisecondsTimeout);
31 }
32 }
33#else
34 internal static class STPEventWaitHandle
35 {
36 public const int WaitTimeout = Timeout.Infinite;
37
38 internal static bool WaitAll(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
39 {
40 return WaitHandle.WaitAll(waitHandles, millisecondsTimeout, exitContext);
41 }
42
43 internal static int WaitAny(WaitHandle[] waitHandles)
44 {
45 return WaitHandle.WaitAny(waitHandles);
46 }
47
48 internal static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext)
49 {
50 return WaitHandle.WaitAny(waitHandles, millisecondsTimeout, exitContext);
51 }
52
53 internal static bool WaitOne(WaitHandle waitHandle, int millisecondsTimeout, bool exitContext)
54 {
55 return waitHandle.WaitOne(millisecondsTimeout, exitContext);
56 }
57 }
58#endif
59
60}
61
62#endif \ No newline at end of file
diff --git a/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs b/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
index 077cf17..0663d1d 100644
--- a/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
+++ b/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
@@ -1,354 +1,448 @@
1using System; 1using System;
2using System.Diagnostics; 2using System.Diagnostics;
3using System.Threading;
4
5namespace Amib.Threading
6{
7 public interface ISTPPerformanceCountersReader
8 {
9 long InUseThreads { get; }
10 long ActiveThreads { get; }
11 long WorkItemsQueued { get; }
12 long WorkItemsProcessed { get; }
13 }
14}
3 15
4namespace Amib.Threading.Internal 16namespace Amib.Threading.Internal
5{ 17{
6 internal enum STPPerformanceCounterType 18 internal interface ISTPInstancePerformanceCounters : IDisposable
7 { 19 {
8 // Fields 20 void Close();
9 ActiveThreads = 0, 21 void SampleThreads(long activeThreads, long inUseThreads);
10 InUseThreads = 1, 22 void SampleWorkItems(long workItemsQueued, long workItemsProcessed);
11 OverheadThreads = 2, 23 void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime);
12 OverheadThreadsPercent = 3, 24 void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime);
13 OverheadThreadsPercentBase = 4, 25 }
26#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
14 27
15 WorkItems = 5, 28 internal enum STPPerformanceCounterType
16 WorkItemsInQueue = 6, 29 {
17 WorkItemsProcessed = 7, 30 // Fields
31 ActiveThreads = 0,
32 InUseThreads = 1,
33 OverheadThreads = 2,
34 OverheadThreadsPercent = 3,
35 OverheadThreadsPercentBase = 4,
18 36
19 WorkItemsQueuedPerSecond = 8, 37 WorkItems = 5,
20 WorkItemsProcessedPerSecond = 9, 38 WorkItemsInQueue = 6,
39 WorkItemsProcessed = 7,
21 40
22 AvgWorkItemWaitTime = 10, 41 WorkItemsQueuedPerSecond = 8,
23 AvgWorkItemWaitTimeBase = 11, 42 WorkItemsProcessedPerSecond = 9,
24 43
25 AvgWorkItemProcessTime = 12, 44 AvgWorkItemWaitTime = 10,
26 AvgWorkItemProcessTimeBase = 13, 45 AvgWorkItemWaitTimeBase = 11,
27 46
28 WorkItemsGroups = 14, 47 AvgWorkItemProcessTime = 12,
48 AvgWorkItemProcessTimeBase = 13,
29 49
30 LastCounter = 14, 50 WorkItemsGroups = 14,
31 }
32
33 51
34 /// <summary> 52 LastCounter = 14,
35 /// Summary description for STPPerformanceCounter. 53 }
36 /// </summary> 54
37 internal class STPPerformanceCounter
38 {
39 // Fields
40 private PerformanceCounterType _pcType;
41 protected string _counterHelp;
42 protected string _counterName;
43
44 // Methods
45 public STPPerformanceCounter(
46 string counterName,
47 string counterHelp,
48 PerformanceCounterType pcType)
49 {
50 this._counterName = counterName;
51 this._counterHelp = counterHelp;
52 this._pcType = pcType;
53 }
54
55 public void AddCounterToCollection(CounterCreationDataCollection counterData)
56 {
57 CounterCreationData counterCreationData = new CounterCreationData(
58 _counterName,
59 _counterHelp,
60 _pcType);
61 55
62 counterData.Add(counterCreationData); 56 /// <summary>
63 } 57 /// Summary description for STPPerformanceCounter.
58 /// </summary>
59 internal class STPPerformanceCounter
60 {
61 // Fields
62 private readonly PerformanceCounterType _pcType;
63 protected string _counterHelp;
64 protected string _counterName;
65
66 // Methods
67 public STPPerformanceCounter(
68 string counterName,
69 string counterHelp,
70 PerformanceCounterType pcType)
71 {
72 _counterName = counterName;
73 _counterHelp = counterHelp;
74 _pcType = pcType;
75 }
76
77 public void AddCounterToCollection(CounterCreationDataCollection counterData)
78 {
79 CounterCreationData counterCreationData = new CounterCreationData(
80 _counterName,
81 _counterHelp,
82 _pcType);
83
84 counterData.Add(counterCreationData);
85 }
86
87 // Properties
88 public string Name
89 {
90 get
91 {
92 return _counterName;
93 }
94 }
95 }
96
97 internal class STPPerformanceCounters
98 {
99 // Fields
100 internal STPPerformanceCounter[] _stpPerformanceCounters;
101 private static readonly STPPerformanceCounters _instance;
102 internal const string _stpCategoryHelp = "SmartThreadPool performance counters";
103 internal const string _stpCategoryName = "SmartThreadPool";
104
105 // Methods
106 static STPPerformanceCounters()
107 {
108 _instance = new STPPerformanceCounters();
109 }
110
111 private STPPerformanceCounters()
112 {
113 STPPerformanceCounter[] stpPerformanceCounters = new STPPerformanceCounter[]
114 {
115 new STPPerformanceCounter("Active threads", "The current number of available in the thread pool.", PerformanceCounterType.NumberOfItems32),
116 new STPPerformanceCounter("In use threads", "The current number of threads that execute a work item.", PerformanceCounterType.NumberOfItems32),
117 new STPPerformanceCounter("Overhead threads", "The current number of threads that are active, but are not in use.", PerformanceCounterType.NumberOfItems32),
118 new STPPerformanceCounter("% overhead threads", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawFraction),
119 new STPPerformanceCounter("% overhead threads base", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawBase),
120
121 new STPPerformanceCounter("Work Items", "The number of work items in the Smart Thread Pool. Both queued and processed.", PerformanceCounterType.NumberOfItems32),
122 new STPPerformanceCounter("Work Items in queue", "The current number of work items in the queue", PerformanceCounterType.NumberOfItems32),
123 new STPPerformanceCounter("Work Items processed", "The number of work items already processed", PerformanceCounterType.NumberOfItems32),
124
125 new STPPerformanceCounter("Work Items queued/sec", "The number of work items queued per second", PerformanceCounterType.RateOfCountsPerSecond32),
126 new STPPerformanceCounter("Work Items processed/sec", "The number of work items processed per second", PerformanceCounterType.RateOfCountsPerSecond32),
127
128 new STPPerformanceCounter("Avg. Work Item wait time/sec", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageCount64),
129 new STPPerformanceCounter("Avg. Work Item wait time base", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageBase),
130
131 new STPPerformanceCounter("Avg. Work Item process time/sec", "The average time it takes to process a work item.", PerformanceCounterType.AverageCount64),
132 new STPPerformanceCounter("Avg. Work Item process time base", "The average time it takes to process a work item.", PerformanceCounterType.AverageBase),
133
134 new STPPerformanceCounter("Work Items Groups", "The current number of work item groups associated with the Smart Thread Pool.", PerformanceCounterType.NumberOfItems32),
135 };
136
137 _stpPerformanceCounters = stpPerformanceCounters;
138 SetupCategory();
139 }
140
141 private void SetupCategory()
142 {
143 if (!PerformanceCounterCategory.Exists(_stpCategoryName))
144 {
145 CounterCreationDataCollection counters = new CounterCreationDataCollection();
146
147 for (int i = 0; i < _stpPerformanceCounters.Length; i++)
148 {
149 _stpPerformanceCounters[i].AddCounterToCollection(counters);
150 }
151
152 PerformanceCounterCategory.Create(
153 _stpCategoryName,
154 _stpCategoryHelp,
155 PerformanceCounterCategoryType.MultiInstance,
156 counters);
157
158 }
159 }
64 160
65 // Properties 161 // Properties
66 public string Name 162 public static STPPerformanceCounters Instance
163 {
164 get
165 {
166 return _instance;
167 }
168 }
169 }
170
171 internal class STPInstancePerformanceCounter : IDisposable
172 {
173 // Fields
174 private bool _isDisposed;
175 private PerformanceCounter _pcs;
176
177 // Methods
178 protected STPInstancePerformanceCounter()
179 {
180 _isDisposed = false;
181 }
182
183 public STPInstancePerformanceCounter(
184 string instance,
185 STPPerformanceCounterType spcType) : this()
186 {
187 STPPerformanceCounters counters = STPPerformanceCounters.Instance;
188 _pcs = new PerformanceCounter(
189 STPPerformanceCounters._stpCategoryName,
190 counters._stpPerformanceCounters[(int) spcType].Name,
191 instance,
192 false);
193 _pcs.RawValue = _pcs.RawValue;
194 }
195
196
197 public void Close()
198 {
199 if (_pcs != null)
200 {
201 _pcs.RemoveInstance();
202 _pcs.Close();
203 _pcs = null;
204 }
205 }
206
207 public void Dispose()
208 {
209 Dispose(true);
210 }
211
212 public virtual void Dispose(bool disposing)
67 { 213 {
68 get 214 if (!_isDisposed)
69 { 215 {
70 return _counterName; 216 if (disposing)
217 {
218 Close();
219 }
71 } 220 }
72 } 221 _isDisposed = true;
73 }
74
75 internal class STPPerformanceCounters
76 {
77 // Fields
78 internal STPPerformanceCounter[] _stpPerformanceCounters;
79 private static STPPerformanceCounters _instance;
80 internal const string _stpCategoryHelp = "SmartThreadPool performance counters";
81 internal const string _stpCategoryName = "SmartThreadPool";
82
83 // Methods
84 static STPPerformanceCounters()
85 {
86 _instance = new STPPerformanceCounters();
87 } 222 }
88 223
89 private STPPerformanceCounters() 224 public virtual void Increment()
90 { 225 {
91 STPPerformanceCounter[] stpPerformanceCounters = new STPPerformanceCounter[] 226 _pcs.Increment();
92 { 227 }
93 new STPPerformanceCounter("Active threads", "The current number of available in the thread pool.", PerformanceCounterType.NumberOfItems32), 228
94 new STPPerformanceCounter("In use threads", "The current number of threads that execute a work item.", PerformanceCounterType.NumberOfItems32), 229 public virtual void IncrementBy(long val)
95 new STPPerformanceCounter("Overhead threads", "The current number of threads that are active, but are not in use.", PerformanceCounterType.NumberOfItems32), 230 {
96 new STPPerformanceCounter("% overhead threads", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawFraction), 231 _pcs.IncrementBy(val);
97 new STPPerformanceCounter("% overhead threads base", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawBase), 232 }
98 233
99 new STPPerformanceCounter("Work Items", "The number of work items in the Smart Thread Pool. Both queued and processed.", PerformanceCounterType.NumberOfItems32), 234 public virtual void Set(long val)
100 new STPPerformanceCounter("Work Items in queue", "The current number of work items in the queue", PerformanceCounterType.NumberOfItems32), 235 {
101 new STPPerformanceCounter("Work Items processed", "The number of work items already processed", PerformanceCounterType.NumberOfItems32), 236 _pcs.RawValue = val;
102 237 }
103 new STPPerformanceCounter("Work Items queued/sec", "The number of work items queued per second", PerformanceCounterType.RateOfCountsPerSecond32), 238 }
104 new STPPerformanceCounter("Work Items processed/sec", "The number of work items processed per second", PerformanceCounterType.RateOfCountsPerSecond32), 239
105 240 internal class STPInstanceNullPerformanceCounter : STPInstancePerformanceCounter
106 new STPPerformanceCounter("Avg. Work Item wait time/sec", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageCount64), 241 {
107 new STPPerformanceCounter("Avg. Work Item wait time base", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageBase), 242 // Methods
243 public override void Increment() {}
244 public override void IncrementBy(long value) {}
245 public override void Set(long val) {}
246 }
247
248
249
250 internal class STPInstancePerformanceCounters : ISTPInstancePerformanceCounters
251 {
252 private bool _isDisposed;
253 // Fields
254 private STPInstancePerformanceCounter[] _pcs;
255 private static readonly STPInstancePerformanceCounter _stpInstanceNullPerformanceCounter;
256
257 // Methods
258 static STPInstancePerformanceCounters()
259 {
260 _stpInstanceNullPerformanceCounter = new STPInstanceNullPerformanceCounter();
261 }
262
263 public STPInstancePerformanceCounters(string instance)
264 {
265 _isDisposed = false;
266 _pcs = new STPInstancePerformanceCounter[(int)STPPerformanceCounterType.LastCounter];
267
268 // Call the STPPerformanceCounters.Instance so the static constructor will
269 // intialize the STPPerformanceCounters singleton.
270 STPPerformanceCounters.Instance.GetHashCode();
271
272 for (int i = 0; i < _pcs.Length; i++)
273 {
274 if (instance != null)
275 {
276 _pcs[i] = new STPInstancePerformanceCounter(
277 instance,
278 (STPPerformanceCounterType) i);
279 }
280 else
281 {
282 _pcs[i] = _stpInstanceNullPerformanceCounter;
283 }
284 }
285 }
286
108 287
109 new STPPerformanceCounter("Avg. Work Item process time/sec", "The average time it takes to process a work item.", PerformanceCounterType.AverageCount64), 288 public void Close()
110 new STPPerformanceCounter("Avg. Work Item process time base", "The average time it takes to process a work item.", PerformanceCounterType.AverageBase), 289 {
290 if (null != _pcs)
291 {
292 for (int i = 0; i < _pcs.Length; i++)
293 {
294 if (null != _pcs[i])
295 {
296 _pcs[i].Dispose();
297 }
298 }
299 _pcs = null;
300 }
301 }
111 302
112 new STPPerformanceCounter("Work Items Groups", "The current number of work item groups associated with the Smart Thread Pool.", PerformanceCounterType.NumberOfItems32), 303 public void Dispose()
113 }; 304 {
305 Dispose(true);
306 }
114 307
115 _stpPerformanceCounters = stpPerformanceCounters; 308 public virtual void Dispose(bool disposing)
116 SetupCategory();
117 }
118
119 private void SetupCategory()
120 { 309 {
121 if (!PerformanceCounterCategory.Exists(_stpCategoryName)) 310 if (!_isDisposed)
122 { 311 {
123 CounterCreationDataCollection counters = new CounterCreationDataCollection(); 312 if (disposing)
124
125 for (int i = 0; i < _stpPerformanceCounters.Length; i++)
126 { 313 {
127 _stpPerformanceCounters[i].AddCounterToCollection(counters); 314 Close();
128 } 315 }
129
130
131 // *********** Remark for .NET 2.0 ***********
132 // If you are here, it means you got the warning that this overload
133 // of the method is deprecated in .NET 2.0. To use the correct
134 // method overload, uncomment the third argument of
135 // the method.
136 #pragma warning disable 0618
137 PerformanceCounterCategory.Create(
138 _stpCategoryName,
139 _stpCategoryHelp,
140 //PerformanceCounterCategoryType.MultiInstance,
141 counters);
142 #pragma warning restore 0618
143 } 316 }
317 _isDisposed = true;
144 } 318 }
145 319
146 // Properties 320 private STPInstancePerformanceCounter GetCounter(STPPerformanceCounterType spcType)
147 public static STPPerformanceCounters Instance 321 {
148 { 322 return _pcs[(int) spcType];
149 get 323 }
150 { 324
151 return _instance; 325 public void SampleThreads(long activeThreads, long inUseThreads)
152 } 326 {
153 } 327 GetCounter(STPPerformanceCounterType.ActiveThreads).Set(activeThreads);
154 } 328 GetCounter(STPPerformanceCounterType.InUseThreads).Set(inUseThreads);
329 GetCounter(STPPerformanceCounterType.OverheadThreads).Set(activeThreads-inUseThreads);
330
331 GetCounter(STPPerformanceCounterType.OverheadThreadsPercentBase).Set(activeThreads-inUseThreads);
332 GetCounter(STPPerformanceCounterType.OverheadThreadsPercent).Set(inUseThreads);
333 }
334
335 public void SampleWorkItems(long workItemsQueued, long workItemsProcessed)
336 {
337 GetCounter(STPPerformanceCounterType.WorkItems).Set(workItemsQueued+workItemsProcessed);
338 GetCounter(STPPerformanceCounterType.WorkItemsInQueue).Set(workItemsQueued);
339 GetCounter(STPPerformanceCounterType.WorkItemsProcessed).Set(workItemsProcessed);
340
341 GetCounter(STPPerformanceCounterType.WorkItemsQueuedPerSecond).Set(workItemsQueued);
342 GetCounter(STPPerformanceCounterType.WorkItemsProcessedPerSecond).Set(workItemsProcessed);
343 }
344
345 public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime)
346 {
347 GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTime).IncrementBy((long)workItemWaitTime.TotalMilliseconds);
348 GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTimeBase).Increment();
349 }
350
351 public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime)
352 {
353 GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTime).IncrementBy((long)workItemProcessTime.TotalMilliseconds);
354 GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTimeBase).Increment();
355 }
356 }
357#endif
155 358
156 internal class STPInstancePerformanceCounter : IDisposable 359 internal class NullSTPInstancePerformanceCounters : ISTPInstancePerformanceCounters, ISTPPerformanceCountersReader
157 { 360 {
158 // Fields 361 private static readonly NullSTPInstancePerformanceCounters _instance = new NullSTPInstancePerformanceCounters();
159 private PerformanceCounter _pcs;
160 362
161 // Methods 363 public static NullSTPInstancePerformanceCounters Instance
162 protected STPInstancePerformanceCounter() 364 {
163 { 365 get { return _instance; }
164 } 366 }
165 367
166 public STPInstancePerformanceCounter( 368 public void Close() {}
167 string instance, 369 public void Dispose() {}
168 STPPerformanceCounterType spcType) 370
371 public void SampleThreads(long activeThreads, long inUseThreads) {}
372 public void SampleWorkItems(long workItemsQueued, long workItemsProcessed) {}
373 public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime) {}
374 public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime) {}
375 public long InUseThreads
169 { 376 {
170 STPPerformanceCounters counters = STPPerformanceCounters.Instance; 377 get { return 0; }
171 _pcs = new PerformanceCounter(
172 STPPerformanceCounters._stpCategoryName,
173 counters._stpPerformanceCounters[(int) spcType].Name,
174 instance,
175 false);
176 _pcs.RawValue = _pcs.RawValue;
177 } 378 }
178 379
179 ~STPInstancePerformanceCounter() 380 public long ActiveThreads
180 { 381 {
181 Close(); 382 get { return 0; }
182 } 383 }
183 384
184 public void Close() 385 public long WorkItemsQueued
185 {
186 if (_pcs != null)
187 {
188 _pcs.RemoveInstance();
189 _pcs.Close();
190 _pcs = null;
191 }
192 }
193
194 public void Dispose()
195 { 386 {
196 Close(); 387 get { return 0; }
197 GC.SuppressFinalize(this);
198 }
199
200 public virtual void Increment()
201 {
202 _pcs.Increment();
203 }
204
205 public virtual void IncrementBy(long val)
206 {
207 _pcs.IncrementBy(val);
208 } 388 }
209 389
210 public virtual void Set(long val) 390 public long WorkItemsProcessed
211 { 391 {
212 _pcs.RawValue = val; 392 get { return 0; }
213 } 393 }
214 } 394 }
215 395
216 internal class STPInstanceNullPerformanceCounter : STPInstancePerformanceCounter 396 internal class LocalSTPInstancePerformanceCounters : ISTPInstancePerformanceCounters, ISTPPerformanceCountersReader
217 { 397 {
218 // Methods 398 public void Close() { }
219 public STPInstanceNullPerformanceCounter() {} 399 public void Dispose() { }
220 public override void Increment() {}
221 public override void IncrementBy(long value) {}
222 public override void Set(long val) {}
223 }
224
225 internal interface ISTPInstancePerformanceCounters : IDisposable
226 {
227 void Close();
228 void SampleThreads(long activeThreads, long inUseThreads);
229 void SampleWorkItems(long workItemsQueued, long workItemsProcessed);
230 void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime);
231 void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime);
232 }
233 400
401 private long _activeThreads;
402 private long _inUseThreads;
403 private long _workItemsQueued;
404 private long _workItemsProcessed;
234 405
235 internal class STPInstancePerformanceCounters : ISTPInstancePerformanceCounters, IDisposable 406 public long InUseThreads
236 {
237 // Fields
238 private STPInstancePerformanceCounter[] _pcs;
239 private static STPInstancePerformanceCounter _stpInstanceNullPerformanceCounter;
240
241 // Methods
242 static STPInstancePerformanceCounters()
243 { 407 {
244 _stpInstanceNullPerformanceCounter = new STPInstanceNullPerformanceCounter(); 408 get { return _inUseThreads; }
245 }
246
247 public STPInstancePerformanceCounters(string instance)
248 {
249 _pcs = new STPInstancePerformanceCounter[(int)STPPerformanceCounterType.LastCounter];
250 // STPPerformanceCounters counters = STPPerformanceCounters.Instance;
251 for (int i = 0; i < _pcs.Length; i++)
252 {
253 if (instance != null)
254 {
255 _pcs[i] = new STPInstancePerformanceCounter(
256 instance,
257 (STPPerformanceCounterType) i);
258 }
259 else
260 {
261 _pcs[i] = _stpInstanceNullPerformanceCounter;
262 }
263 }
264 } 409 }
265
266 410
267 public void Close() 411 public long ActiveThreads
268 { 412 {
269 if (null != _pcs) 413 get { return _activeThreads; }
270 {
271 for (int i = 0; i < _pcs.Length; i++)
272 {
273 if (null != _pcs[i])
274 {
275 _pcs[i].Close();
276 }
277 }
278 _pcs = null;
279 }
280 } 414 }
281 415
282 ~STPInstancePerformanceCounters() 416 public long WorkItemsQueued
283 { 417 {
284 Close(); 418 get { return _workItemsQueued; }
285 } 419 }
286 420
287 public void Dispose() 421 public long WorkItemsProcessed
288 {
289 Close();
290 GC.SuppressFinalize(this);
291 }
292
293 private STPInstancePerformanceCounter GetCounter(STPPerformanceCounterType spcType)
294 { 422 {
295 return _pcs[(int) spcType]; 423 get { return _workItemsProcessed; }
296 } 424 }
297 425
298 public void SampleThreads(long activeThreads, long inUseThreads) 426 public void SampleThreads(long activeThreads, long inUseThreads)
299 { 427 {
300 GetCounter(STPPerformanceCounterType.ActiveThreads).Set(activeThreads); 428 _activeThreads = activeThreads;
301 GetCounter(STPPerformanceCounterType.InUseThreads).Set(inUseThreads); 429 _inUseThreads = inUseThreads;
302 GetCounter(STPPerformanceCounterType.OverheadThreads).Set(activeThreads-inUseThreads);
303
304 GetCounter(STPPerformanceCounterType.OverheadThreadsPercentBase).Set(activeThreads-inUseThreads);
305 GetCounter(STPPerformanceCounterType.OverheadThreadsPercent).Set(inUseThreads);
306 } 430 }
307 431
308 public void SampleWorkItems(long workItemsQueued, long workItemsProcessed) 432 public void SampleWorkItems(long workItemsQueued, long workItemsProcessed)
309 { 433 {
310 GetCounter(STPPerformanceCounterType.WorkItems).Set(workItemsQueued+workItemsProcessed); 434 _workItemsQueued = workItemsQueued;
311 GetCounter(STPPerformanceCounterType.WorkItemsInQueue).Set(workItemsQueued); 435 _workItemsProcessed = workItemsProcessed;
312 GetCounter(STPPerformanceCounterType.WorkItemsProcessed).Set(workItemsProcessed);
313
314 GetCounter(STPPerformanceCounterType.WorkItemsQueuedPerSecond).Set(workItemsQueued);
315 GetCounter(STPPerformanceCounterType.WorkItemsProcessedPerSecond).Set(workItemsProcessed);
316 } 436 }
317 437
318 public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime) 438 public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime)
319 { 439 {
320 GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTime).IncrementBy((long)workItemWaitTime.TotalMilliseconds); 440 // Not supported
321 GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTimeBase).Increment();
322 } 441 }
323 442
324 public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime) 443 public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime)
325 { 444 {
326 GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTime).IncrementBy((long)workItemProcessTime.TotalMilliseconds); 445 // Not supported
327 GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTimeBase).Increment();
328 }
329 }
330
331 internal class NullSTPInstancePerformanceCounters : ISTPInstancePerformanceCounters, IDisposable
332 {
333 static NullSTPInstancePerformanceCounters()
334 {
335 } 446 }
336
337 private static NullSTPInstancePerformanceCounters _instance = new NullSTPInstancePerformanceCounters(null);
338
339 public static NullSTPInstancePerformanceCounters Instance
340 {
341 get { return _instance; }
342 }
343
344 public NullSTPInstancePerformanceCounters(string instance) {}
345 public void Close() {}
346 public void Dispose() {}
347
348 public void SampleThreads(long activeThreads, long inUseThreads) {}
349 public void SampleWorkItems(long workItemsQueued, long workItemsProcessed) {}
350 public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime) {}
351 public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime) {}
352 } 447 }
353
354} 448}
diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs
index fa9ceb4..96fa094 100644
--- a/ThirdParty/SmartThreadPool/STPStartInfo.cs
+++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs
@@ -1,113 +1,212 @@
1// Ami Bar 1using System;
2// amibar@gmail.com
3
4using System.Threading; 2using System.Threading;
5 3
6namespace Amib.Threading 4namespace Amib.Threading
7{ 5{
8 /// <summary> 6 /// <summary>
9 /// Summary description for STPStartInfo. 7 /// Summary description for STPStartInfo.
10 /// </summary> 8 /// </summary>
11 public class STPStartInfo : WIGStartInfo 9 public class STPStartInfo : WIGStartInfo
12 { 10 {
13 /// <summary> 11 private int _idleTimeout = SmartThreadPool.DefaultIdleTimeout;
14 /// Idle timeout in milliseconds. 12 private int _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
15 /// If a thread is idle for _idleTimeout milliseconds then 13 private int _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
16 /// it may quit. 14#if !(WINDOWS_PHONE)
17 /// </summary> 15 private ThreadPriority _threadPriority = SmartThreadPool.DefaultThreadPriority;
18 private int _idleTimeout; 16#endif
19 17 private string _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
20 /// <summary> 18 private bool _areThreadsBackground = SmartThreadPool.DefaultAreThreadsBackground;
21 /// The lower limit of threads in the pool. 19 private bool _enableLocalPerformanceCounters;
22 /// </summary> 20 private string _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
23 private int _minWorkerThreads; 21 private int? _maxStackSize = SmartThreadPool.DefaultMaxStackSize;
24 22
25 /// <summary> 23 public STPStartInfo()
26 /// The upper limit of threads in the pool.
27 /// </summary>
28 private int _maxWorkerThreads;
29
30 /// <summary>
31 /// The priority of the threads in the pool
32 /// </summary>
33 private ThreadPriority _threadPriority;
34
35 /// <summary>
36 /// The thread pool name. Threads will get names depending on this.
37 /// </summary>
38 private string _threadPoolName;
39
40 /// <summary>
41 /// If this field is not null then the performance counters are enabled
42 /// and use the string as the name of the instance.
43 /// </summary>
44 private string _pcInstanceName;
45
46 private int _stackSize;
47
48 public STPStartInfo() : base()
49 { 24 {
25 _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
26#if !(WINDOWS_PHONE)
27 _threadPriority = SmartThreadPool.DefaultThreadPriority;
28#endif
29 _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
50 _idleTimeout = SmartThreadPool.DefaultIdleTimeout; 30 _idleTimeout = SmartThreadPool.DefaultIdleTimeout;
51 _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads; 31 _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
52 _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
53 _threadPriority = SmartThreadPool.DefaultThreadPriority;
54 _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
55 _pcInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
56 _stackSize = SmartThreadPool.DefaultStackSize;
57 } 32 }
58 33
59 public STPStartInfo(STPStartInfo stpStartInfo) : base(stpStartInfo) 34 public STPStartInfo(STPStartInfo stpStartInfo)
35 : base(stpStartInfo)
60 { 36 {
61 _idleTimeout = stpStartInfo._idleTimeout; 37 _idleTimeout = stpStartInfo.IdleTimeout;
62 _minWorkerThreads = stpStartInfo._minWorkerThreads; 38 _minWorkerThreads = stpStartInfo.MinWorkerThreads;
63 _maxWorkerThreads = stpStartInfo._maxWorkerThreads; 39 _maxWorkerThreads = stpStartInfo.MaxWorkerThreads;
64 _threadPriority = stpStartInfo._threadPriority; 40#if !(WINDOWS_PHONE)
41 _threadPriority = stpStartInfo.ThreadPriority;
42#endif
43 _performanceCounterInstanceName = stpStartInfo.PerformanceCounterInstanceName;
44 _enableLocalPerformanceCounters = stpStartInfo._enableLocalPerformanceCounters;
65 _threadPoolName = stpStartInfo._threadPoolName; 45 _threadPoolName = stpStartInfo._threadPoolName;
66 _pcInstanceName = stpStartInfo._pcInstanceName; 46 _areThreadsBackground = stpStartInfo.AreThreadsBackground;
67 _stackSize = stpStartInfo._stackSize; 47#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
48 _apartmentState = stpStartInfo._apartmentState;
49#endif
68 } 50 }
69 51
70 public int IdleTimeout 52 /// <summary>
71 { 53 /// Get/Set the idle timeout in milliseconds.
72 get { return _idleTimeout; } 54 /// If a thread is idle (starved) longer than IdleTimeout then it may quit.
73 set { _idleTimeout = value; } 55 /// </summary>
56 public virtual int IdleTimeout
57 {
58 get { return _idleTimeout; }
59 set
60 {
61 ThrowIfReadOnly();
62 _idleTimeout = value;
63 }
64 }
65
66
67 /// <summary>
68 /// Get/Set the lower limit of threads in the pool.
69 /// </summary>
70 public virtual int MinWorkerThreads
71 {
72 get { return _minWorkerThreads; }
73 set
74 {
75 ThrowIfReadOnly();
76 _minWorkerThreads = value;
77 }
78 }
79
80
81 /// <summary>
82 /// Get/Set the upper limit of threads in the pool.
83 /// </summary>
84 public virtual int MaxWorkerThreads
85 {
86 get { return _maxWorkerThreads; }
87 set
88 {
89 ThrowIfReadOnly();
90 _maxWorkerThreads = value;
91 }
92 }
93
94#if !(WINDOWS_PHONE)
95 /// <summary>
96 /// Get/Set the scheduling priority of the threads in the pool.
97 /// The Os handles the scheduling.
98 /// </summary>
99 public virtual ThreadPriority ThreadPriority
100 {
101 get { return _threadPriority; }
102 set
103 {
104 ThrowIfReadOnly();
105 _threadPriority = value;
106 }
107 }
108#endif
109 /// <summary>
110 /// Get/Set the thread pool name. Threads will get names depending on this.
111 /// </summary>
112 public virtual string ThreadPoolName {
113 get { return _threadPoolName; }
114 set
115 {
116 ThrowIfReadOnly ();
117 _threadPoolName = value;
118 }
74 } 119 }
75 120
76 public int MinWorkerThreads 121 /// <summary>
77 { 122 /// Get/Set the performance counter instance name of this SmartThreadPool
78 get { return _minWorkerThreads; } 123 /// The default is null which indicate not to use performance counters at all.
79 set { _minWorkerThreads = value; } 124 /// </summary>
80 } 125 public virtual string PerformanceCounterInstanceName
126 {
127 get { return _performanceCounterInstanceName; }
128 set
129 {
130 ThrowIfReadOnly();
131 _performanceCounterInstanceName = value;
132 }
133 }
81 134
82 public int MaxWorkerThreads 135 /// <summary>
83 { 136 /// Enable/Disable the local performance counter.
84 get { return _maxWorkerThreads; } 137 /// This enables the user to get some performance information about the SmartThreadPool
85 set { _maxWorkerThreads = value; } 138 /// without using Windows performance counters. (Useful on WindowsCE, Silverlight, etc.)
86 } 139 /// The default is false.
140 /// </summary>
141 public virtual bool EnableLocalPerformanceCounters
142 {
143 get { return _enableLocalPerformanceCounters; }
144 set
145 {
146 ThrowIfReadOnly();
147 _enableLocalPerformanceCounters = value;
148 }
149 }
87 150
88 public ThreadPriority ThreadPriority 151 /// <summary>
152 /// Get/Set backgroundness of thread in thread pool.
153 /// </summary>
154 public virtual bool AreThreadsBackground
155 {
156 get { return _areThreadsBackground; }
157 set
158 {
159 ThrowIfReadOnly ();
160 _areThreadsBackground = value;
161 }
162 }
163
164 /// <summary>
165 /// Get a readonly version of this STPStartInfo.
166 /// </summary>
167 /// <returns>Returns a readonly reference to this STPStartInfo</returns>
168 public new STPStartInfo AsReadOnly()
89 { 169 {
90 get { return _threadPriority; } 170 return new STPStartInfo(this) { _readOnly = true };
91 set { _threadPriority = value; }
92 } 171 }
93 172
94 public virtual string ThreadPoolName 173#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
95 {
96 get { return _threadPoolName; }
97 set { _threadPoolName = value; }
98 }
99 174
175 private ApartmentState _apartmentState = SmartThreadPool.DefaultApartmentState;
100 176
101 public string PerformanceCounterInstanceName 177 /// <summary>
178 /// Get/Set the apartment state of threads in the thread pool
179 /// </summary>
180 public ApartmentState ApartmentState
102 { 181 {
103 get { return _pcInstanceName; } 182 get { return _apartmentState; }
104 set { _pcInstanceName = value; } 183 set
105 } 184 {
106 185 ThrowIfReadOnly();
107 public int StackSize 186 _apartmentState = value;
187 }
188 }
189
190#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
191
192 /// <summary>
193 /// Get/Set the max stack size of threads in the thread pool
194 /// </summary>
195 public int? MaxStackSize
108 { 196 {
109 get { return _stackSize; } 197 get { return _maxStackSize; }
110 set { _stackSize = value; } 198 set
199 {
200 ThrowIfReadOnly();
201 if (value.HasValue && value.Value < 0)
202 {
203 throw new ArgumentOutOfRangeException("value", "Value must be greater than 0.");
204 }
205 _maxStackSize = value;
206 }
111 } 207 }
208#endif
209
210#endif
112 } 211 }
113} 212}
diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.ThreadEntry.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.ThreadEntry.cs
new file mode 100644
index 0000000..d9502bb
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/SmartThreadPool.ThreadEntry.cs
@@ -0,0 +1,60 @@
1
2using System;
3using Amib.Threading.Internal;
4
5namespace Amib.Threading
6{
7 public partial class SmartThreadPool
8 {
9 #region ThreadEntry class
10
11 internal class ThreadEntry
12 {
13 /// <summary>
14 /// The thread creation time
15 /// The value is stored as UTC value.
16 /// </summary>
17 private readonly DateTime _creationTime;
18
19 /// <summary>
20 /// The last time this thread has been running
21 /// It is updated by IAmAlive() method
22 /// The value is stored as UTC value.
23 /// </summary>
24 private DateTime _lastAliveTime;
25
26 /// <summary>
27 /// A reference from each thread in the thread pool to its SmartThreadPool
28 /// object container.
29 /// With this variable a thread can know whatever it belongs to a
30 /// SmartThreadPool.
31 /// </summary>
32 private readonly SmartThreadPool _associatedSmartThreadPool;
33
34 /// <summary>
35 /// A reference to the current work item a thread from the thread pool
36 /// is executing.
37 /// </summary>
38 public WorkItem CurrentWorkItem { get; set; }
39
40 public ThreadEntry(SmartThreadPool stp)
41 {
42 _associatedSmartThreadPool = stp;
43 _creationTime = DateTime.UtcNow;
44 _lastAliveTime = DateTime.MinValue;
45 }
46
47 public SmartThreadPool AssociatedSmartThreadPool
48 {
49 get { return _associatedSmartThreadPool; }
50 }
51
52 public void IAmAlive()
53 {
54 _lastAliveTime = DateTime.UtcNow;
55 }
56 }
57
58 #endregion
59 }
60} \ No newline at end of file
diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
index 2c061d7..a4f4ce5 100644
--- a/ThirdParty/SmartThreadPool/SmartThreadPool.cs
+++ b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
@@ -1,61 +1,106 @@
1// Ami Bar 1#region Release History
2// amibar@gmail.com 2
3// 3// Smart Thread Pool
4// Smart thread pool in C#.
5// 7 Aug 2004 - Initial release 4// 7 Aug 2004 - Initial release
5//
6// 14 Sep 2004 - Bug fixes 6// 14 Sep 2004 - Bug fixes
7//
7// 15 Oct 2004 - Added new features 8// 15 Oct 2004 - Added new features
8// - Work items return result. 9// - Work items return result.
9// - Support waiting synchronization for multiple work items. 10// - Support waiting synchronization for multiple work items.
10// - Work items can be cancelled. 11// - Work items can be cancelled.
11// - Passage of the caller thread’s context to the thread in the pool. 12// - Passage of the caller thread’s context to the thread in the pool.
12// - Minimal usage of WIN32 handles. 13// - Minimal usage of WIN32 handles.
13// - Minor bug fixes. 14// - Minor bug fixes.
15//
14// 26 Dec 2004 - Changes: 16// 26 Dec 2004 - Changes:
15// - Removed static constructors. 17// - Removed static constructors.
16// - Added finalizers. 18// - Added finalizers.
17// - Changed Exceptions so they are serializable. 19// - Changed Exceptions so they are serializable.
18// - Fixed the bug in one of the SmartThreadPool constructors. 20// - Fixed the bug in one of the SmartThreadPool constructors.
19// - Changed the SmartThreadPool.WaitAll() so it will support any number of waiters. 21// - Changed the SmartThreadPool.WaitAll() so it will support any number of waiters.
20// The SmartThreadPool.WaitAny() is still limited by the .NET Framework. 22// The SmartThreadPool.WaitAny() is still limited by the .NET Framework.
21// - Added PostExecute with options on which cases to call it. 23// - Added PostExecute with options on which cases to call it.
22// - Added option to dispose of the state objects. 24// - Added option to dispose of the state objects.
23// - Added a WaitForIdle() method that waits until the work items queue is empty. 25// - Added a WaitForIdle() method that waits until the work items queue is empty.
24// - Added an STPStartInfo class for the initialization of the thread pool. 26// - Added an STPStartInfo class for the initialization of the thread pool.
25// - Changed exception handling so if a work item throws an exception it 27// - Changed exception handling so if a work item throws an exception it
26// is rethrown at GetResult(), rather then firing an UnhandledException event. 28// is rethrown at GetResult(), rather then firing an UnhandledException event.
27// Note that PostExecute exception are always ignored. 29// Note that PostExecute exception are always ignored.
30//
28// 25 Mar 2005 - Changes: 31// 25 Mar 2005 - Changes:
29// - Fixed lost of work items bug 32// - Fixed lost of work items bug
33//
30// 3 Jul 2005: Changes. 34// 3 Jul 2005: Changes.
31// - Fixed bug where Enqueue() throws an exception because PopWaiter() returned null, hardly reconstructed. 35// - Fixed bug where Enqueue() throws an exception because PopWaiter() returned null, hardly reconstructed.
36//
32// 16 Aug 2005: Changes. 37// 16 Aug 2005: Changes.
33// - Fixed bug where the InUseThreads becomes negative when canceling work items. 38// - Fixed bug where the InUseThreads becomes negative when canceling work items.
34// 39//
35// 31 Jan 2006 - Changes: 40// 31 Jan 2006 - Changes:
36// - Added work items priority 41// - Added work items priority
37// - Removed support of chained delegates in callbacks and post executes (nobody really use this) 42// - Removed support of chained delegates in callbacks and post executes (nobody really use this)
38// - Added work items groups 43// - Added work items groups
39// - Added work items groups idle event 44// - Added work items groups idle event
40// - Changed SmartThreadPool.WaitAll() behavior so when it gets empty array 45// - Changed SmartThreadPool.WaitAll() behavior so when it gets empty array
41// it returns true rather then throwing an exception. 46// it returns true rather then throwing an exception.
42// - Added option to start the STP and the WIG as suspended 47// - Added option to start the STP and the WIG as suspended
43// - Exception behavior changed, the real exception is returned by an 48// - Exception behavior changed, the real exception is returned by an
44// inner exception 49// inner exception
45// - Added option to keep the Http context of the caller thread. (Thanks to Steven T.) 50// - Added option to keep the Http context of the caller thread. (Thanks to Steven T.)
46// - Added performance counters 51// - Added performance counters
47// - Added priority to the threads in the pool 52// - Added priority to the threads in the pool
48// 53//
49// 13 Feb 2006 - Changes: 54// 13 Feb 2006 - Changes:
50// - Added a call to the dispose of the Performance Counter so 55// - Added a call to the dispose of the Performance Counter so
51// their won't be a Performance Counter leak. 56// their won't be a Performance Counter leak.
52// - Added exception catch in case the Performance Counters cannot 57// - Added exception catch in case the Performance Counters cannot
53// be created. 58// be created.
59//
60// 17 May 2008 - Changes:
61// - Changed the dispose behavior and removed the Finalizers.
62// - Enabled the change of the MaxThreads and MinThreads at run time.
63// - Enabled the change of the Concurrency of a IWorkItemsGroup at run
64// time If the IWorkItemsGroup is a SmartThreadPool then the Concurrency
65// refers to the MaxThreads.
66// - Improved the cancel behavior.
67// - Added events for thread creation and termination.
68// - Fixed the HttpContext context capture.
69// - Changed internal collections so they use generic collections
70// - Added IsIdle flag to the SmartThreadPool and IWorkItemsGroup
71// - Added support for WinCE
72// - Added support for Action<T> and Func<T>
73//
74// 07 April 2009 - Changes:
75// - Added support for Silverlight and Mono
76// - Added Join, Choice, and Pipe to SmartThreadPool.
77// - Added local performance counters (for Mono, Silverlight, and WindowsCE)
78// - Changed duration measures from DateTime.Now to Stopwatch.
79// - Queues changed from System.Collections.Queue to System.Collections.Generic.LinkedList<T>.
80//
81// 21 December 2009 - Changes:
82// - Added work item timeout (passive)
83//
84// 20 August 2012 - Changes:
85// - Added set name to threads
86// - Fixed the WorkItemsQueue.Dequeue.
87// Replaced while (!Monitor.TryEnter(this)); with lock(this) { ... }
88// - Fixed SmartThreadPool.Pipe
89// - Added IsBackground option to threads
90// - Added ApartmentState to threads
91// - Fixed thread creation when queuing many work items at the same time.
92//
93// 24 August 2012 - Changes:
94// - Enabled cancel abort after cancel. See: http://smartthreadpool.codeplex.com/discussions/345937 by alecswan
95// - Added option to set MaxStackSize of threads
96
97#endregion
54 98
55using System; 99using System;
56using System.Security; 100using System.Security;
57using System.Threading; 101using System.Threading;
58using System.Collections; 102using System.Collections;
103using System.Collections.Generic;
59using System.Diagnostics; 104using System.Diagnostics;
60using System.Runtime.CompilerServices; 105using System.Runtime.CompilerServices;
61 106
@@ -63,1210 +108,1503 @@ using Amib.Threading.Internal;
63 108
64namespace Amib.Threading 109namespace Amib.Threading
65{ 110{
66 #region SmartThreadPool class 111 #region SmartThreadPool class
67 /// <summary> 112 /// <summary>
68 /// Smart thread pool class. 113 /// Smart thread pool class.
69 /// </summary> 114 /// </summary>
70 public class SmartThreadPool : IWorkItemsGroup, IDisposable 115 public partial class SmartThreadPool : WorkItemsGroupBase, IDisposable
71 { 116 {
72 #region Default Constants 117 #region Public Default Constants
73 118
74 /// <summary> 119 /// <summary>
75 /// Default minimum number of threads the thread pool contains. (0) 120 /// Default minimum number of threads the thread pool contains. (0)
76 /// </summary> 121 /// </summary>
77 public const int DefaultMinWorkerThreads = 0; 122 public const int DefaultMinWorkerThreads = 0;
78 123
79 /// <summary> 124 /// <summary>
80 /// Default maximum number of threads the thread pool contains. (25) 125 /// Default maximum number of threads the thread pool contains. (25)
81 /// </summary> 126 /// </summary>
82 public const int DefaultMaxWorkerThreads = 25; 127 public const int DefaultMaxWorkerThreads = 25;
83 128
84 /// <summary> 129 /// <summary>
85 /// Default idle timeout in milliseconds. (One minute) 130 /// Default idle timeout in milliseconds. (One minute)
131 /// </summary>
132 public const int DefaultIdleTimeout = 60*1000; // One minute
133
134 /// <summary>
135 /// Indicate to copy the security context of the caller and then use it in the call. (false)
136 /// </summary>
137 public const bool DefaultUseCallerCallContext = false;
138
139 /// <summary>
140 /// Indicate to copy the HTTP context of the caller and then use it in the call. (false)
141 /// </summary>
142 public const bool DefaultUseCallerHttpContext = false;
143
144 /// <summary>
145 /// Indicate to dispose of the state objects if they support the IDispose interface. (false)
146 /// </summary>
147 public const bool DefaultDisposeOfStateObjects = false;
148
149 /// <summary>
150 /// The default option to run the post execute (CallToPostExecute.Always)
151 /// </summary>
152 public const CallToPostExecute DefaultCallToPostExecute = CallToPostExecute.Always;
153
154 /// <summary>
155 /// The default post execute method to run. (None)
156 /// When null it means not to call it.
157 /// </summary>
158 public static readonly PostExecuteWorkItemCallback DefaultPostExecuteWorkItemCallback;
159
160 /// <summary>
161 /// The default work item priority (WorkItemPriority.Normal)
162 /// </summary>
163 public const WorkItemPriority DefaultWorkItemPriority = WorkItemPriority.Normal;
164
165 /// <summary>
166 /// The default is to work on work items as soon as they arrive
167 /// and not to wait for the start. (false)
168 /// </summary>
169 public const bool DefaultStartSuspended = false;
170
171 /// <summary>
172 /// The default name to use for the performance counters instance. (null)
173 /// </summary>
174 public static readonly string DefaultPerformanceCounterInstanceName;
175
176#if !(WINDOWS_PHONE)
177
178 /// <summary>
179 /// The default thread priority (ThreadPriority.Normal)
180 /// </summary>
181 public const ThreadPriority DefaultThreadPriority = ThreadPriority.Normal;
182#endif
183 /// <summary>
184 /// The default thread pool name. (SmartThreadPool)
86 /// </summary> 185 /// </summary>
87 public const int DefaultIdleTimeout = 60*1000; // One minute 186 public const string DefaultThreadPoolName = "SmartThreadPool";
88 187
89 /// <summary> 188 /// <summary>
90 /// Indicate to copy the security context of the caller and then use it in the call. (false) 189 /// The default Max Stack Size. (SmartThreadPool)
91 /// </summary> 190 /// </summary>
92 public const bool DefaultUseCallerCallContext = false; 191 public static readonly int? DefaultMaxStackSize = null;
93 192
94 /// <summary> 193 /// <summary>
95 /// Indicate to copy the HTTP context of the caller and then use it in the call. (false) 194 /// The default fill state with params. (false)
195 /// It is relevant only to QueueWorkItem of Action&lt;...&gt;/Func&lt;...&gt;
96 /// </summary> 196 /// </summary>
97 public const bool DefaultUseCallerHttpContext = false; 197 public const bool DefaultFillStateWithArgs = false;
98 198
99 /// <summary> 199 /// <summary>
100 /// Indicate to dispose of the state objects if they support the IDispose interface. (false) 200 /// The default thread backgroundness. (true)
101 /// </summary> 201 /// </summary>
102 public const bool DefaultDisposeOfStateObjects = false; 202 public const bool DefaultAreThreadsBackground = true;
103 203
204#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
104 /// <summary> 205 /// <summary>
105 /// The default option to run the post execute 206 /// The default apartment state of a thread in the thread pool.
207 /// The default is ApartmentState.Unknown which means the STP will not
208 /// set the apartment of the thread. It will use the .NET default.
106 /// </summary> 209 /// </summary>
107 public const CallToPostExecute DefaultCallToPostExecute = CallToPostExecute.Always; 210 public const ApartmentState DefaultApartmentState = ApartmentState.Unknown;
211#endif
108 212
109 /// <summary> 213 #endregion
110 /// The default post execute method to run.
111 /// When null it means not to call it.
112 /// </summary>
113 public static readonly PostExecuteWorkItemCallback DefaultPostExecuteWorkItemCallback = null;
114 214
115 /// <summary> 215 #region Member Variables
116 /// The default work item priority
117 /// </summary>
118 public const WorkItemPriority DefaultWorkItemPriority = WorkItemPriority.Normal;
119 216
120 /// <summary> 217 /// <summary>
121 /// The default is to work on work items as soon as they arrive 218 /// Dictionary of all the threads in the thread pool.
122 /// and not to wait for the start. 219 /// </summary>
123 /// </summary> 220 private readonly SynchronizedDictionary<Thread, ThreadEntry> _workerThreads = new SynchronizedDictionary<Thread, ThreadEntry>();
124 public const bool DefaultStartSuspended = false;
125 221
126 /// <summary> 222 /// <summary>
127 /// The default is not to use the performance counters 223 /// Queue of work items.
128 /// </summary> 224 /// </summary>
129 public static readonly string DefaultPerformanceCounterInstanceName = null; 225 private readonly WorkItemsQueue _workItemsQueue = new WorkItemsQueue();
130 226
131 public static readonly int DefaultStackSize = 0; 227 /// <summary>
228 /// Count the work items handled.
229 /// Used by the performance counter.
230 /// </summary>
231 private int _workItemsProcessed;
132 232
133 /// <summary> 233 /// <summary>
134 /// The default thread priority 234 /// Number of threads that currently work (not idle).
135 /// </summary> 235 /// </summary>
136 public const ThreadPriority DefaultThreadPriority = ThreadPriority.Normal; 236 private int _inUseWorkerThreads;
137 237
138 /// <summary> 238 /// <summary>
139 /// The default thread pool name 239 /// Stores a copy of the original STPStartInfo.
240 /// It is used to change the MinThread and MaxThreads
140 /// </summary> 241 /// </summary>
141 public const string DefaultThreadPoolName = "SmartThreadPool"; 242 private STPStartInfo _stpStartInfo;
142 243
143 #endregion 244 /// <summary>
245 /// Total number of work items that are stored in the work items queue
246 /// plus the work items that the threads in the pool are working on.
247 /// </summary>
248 private int _currentWorkItemsCount;
144 249
145 #region Member Variables 250 /// <summary>
251 /// Signaled when the thread pool is idle, i.e. no thread is busy
252 /// and the work items queue is empty
253 /// </summary>
254 //private ManualResetEvent _isIdleWaitHandle = new ManualResetEvent(true);
255 private ManualResetEvent _isIdleWaitHandle = EventWaitHandleFactory.CreateManualResetEvent(true);
146 256
147 /// <summary> 257 /// <summary>
148 /// Contains the name of this instance of SmartThreadPool. 258 /// An event to signal all the threads to quit immediately.
149 /// Can be changed by the user. 259 /// </summary>
150 /// </summary> 260 //private ManualResetEvent _shuttingDownEvent = new ManualResetEvent(false);
151 private string _name = DefaultThreadPoolName; 261 private ManualResetEvent _shuttingDownEvent = EventWaitHandleFactory.CreateManualResetEvent(false);
152 262
153 /// <summary> 263 /// <summary>
154 /// Hashtable of all the threads in the thread pool. 264 /// A flag to indicate if the Smart Thread Pool is now suspended.
155 /// </summary> 265 /// </summary>
156 private Hashtable _workerThreads = Hashtable.Synchronized(new Hashtable()); 266 private bool _isSuspended;
157 267
158 /// <summary> 268 /// <summary>
159 /// Queue of work items. 269 /// A flag to indicate the threads to quit.
160 /// </summary> 270 /// </summary>
161 private WorkItemsQueue _workItemsQueue = new WorkItemsQueue(); 271 private bool _shutdown;
162 272
163 /// <summary> 273 /// <summary>
164 /// Count the work items handled. 274 /// Counts the threads created in the pool.
165 /// Used by the performance counter. 275 /// It is used to name the threads.
166 /// </summary> 276 /// </summary>
167 private long _workItemsProcessed = 0; 277 private int _threadCounter;
168 278
169 /// <summary> 279 /// <summary>
170 /// Number of threads that currently work (not idle). 280 /// Indicate that the SmartThreadPool has been disposed
171 /// </summary> 281 /// </summary>
172 private int _inUseWorkerThreads = 0; 282 private bool _isDisposed;
173 283
174 /// <summary> 284 /// <summary>
175 /// Start information to use. 285 /// Holds all the WorkItemsGroup instaces that have at least one
176 /// It is simpler than providing many constructors. 286 /// work item int the SmartThreadPool
177 /// </summary> 287 /// This variable is used in case of Shutdown
178 private STPStartInfo _stpStartInfo = new STPStartInfo(); 288 /// </summary>
289 private readonly SynchronizedDictionary<IWorkItemsGroup, IWorkItemsGroup> _workItemsGroups = new SynchronizedDictionary<IWorkItemsGroup, IWorkItemsGroup>();
179 290
180 /// <summary> 291 /// <summary>
181 /// Total number of work items that are stored in the work items queue 292 /// A common object for all the work items int the STP
182 /// plus the work items that the threads in the pool are working on. 293 /// so we can mark them to cancel in O(1)
183 /// </summary> 294 /// </summary>
184 private int _currentWorkItemsCount = 0; 295 private CanceledWorkItemsGroup _canceledSmartThreadPool = new CanceledWorkItemsGroup();
185 296
186 /// <summary> 297 /// <summary>
187 /// Signaled when the thread pool is idle, i.e. no thread is busy 298 /// Windows STP performance counters
188 /// and the work items queue is empty
189 /// </summary> 299 /// </summary>
190 private ManualResetEvent _isIdleWaitHandle = new ManualResetEvent(true); 300 private ISTPInstancePerformanceCounters _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
191 301
192 /// <summary> 302 /// <summary>
193 /// An event to signal all the threads to quit immediately. 303 /// Local STP performance counters
194 /// </summary> 304 /// </summary>
195 private ManualResetEvent _shuttingDownEvent = new ManualResetEvent(false); 305 private ISTPInstancePerformanceCounters _localPCs = NullSTPInstancePerformanceCounters.Instance;
196 306
197 /// <summary>
198 /// A flag to indicate the threads to quit.
199 /// </summary>
200 private bool _shutdown = false;
201 307
202 /// <summary> 308#if (WINDOWS_PHONE)
203 /// Counts the threads created in the pool. 309 private static readonly Dictionary<int, ThreadEntry> _threadEntries = new Dictionary<int, ThreadEntry>();
204 /// It is used to name the threads. 310#elif (_WINDOWS_CE)
205 /// </summary> 311 private static LocalDataStoreSlot _threadEntrySlot = Thread.AllocateDataSlot();
206 private int _threadCounter = 0; 312#else
313 [ThreadStatic]
314 private static ThreadEntry _threadEntry;
207 315
208 /// <summary> 316#endif
209 /// Indicate that the SmartThreadPool has been disposed
210 /// </summary>
211 private bool _isDisposed = false;
212 317
213 /// <summary> 318 /// <summary>
214 /// Event to send that the thread pool is idle 319 /// An event to call after a thread is created, but before
320 /// it's first use.
215 /// </summary> 321 /// </summary>
216 private event EventHandler _stpIdle; 322 private event ThreadInitializationHandler _onThreadInitialization;
217 323
218 /// <summary> 324 /// <summary>
219 /// On idle event 325 /// An event to call when a thread is about to exit, after
326 /// it is no longer belong to the pool.
220 /// </summary> 327 /// </summary>
221 //private event WorkItemsGroupIdleHandler _onIdle; 328 private event ThreadTerminationHandler _onThreadTermination;
222 329
223 /// <summary> 330 #endregion
224 /// Holds all the WorkItemsGroup instaces that have at least one
225 /// work item int the SmartThreadPool
226 /// This variable is used in case of Shutdown
227 /// </summary>
228 private Hashtable _workItemsGroups = Hashtable.Synchronized(new Hashtable());
229 331
230 /// <summary> 332 #region Per thread properties
231 /// A reference from each thread in the thread pool to its SmartThreadPool
232 /// object container.
233 /// With this variable a thread can know whatever it belongs to a
234 /// SmartThreadPool.
235 /// </summary>
236 [ThreadStatic]
237 private static SmartThreadPool _smartThreadPool;
238 333
239 /// <summary> 334 /// <summary>
240 /// A reference to the current work item a thread from the thread pool 335 /// A reference to the current work item a thread from the thread pool
241 /// is executing. 336 /// is executing.
242 /// </summary> 337 /// </summary>
243 [ThreadStatic] 338 internal static ThreadEntry CurrentThreadEntry
244 private static WorkItem _currentWorkItem; 339 {
245 340#if (WINDOWS_PHONE)
246 /// <summary> 341 get
247 /// STP performance counters 342 {
248 /// </summary> 343 lock(_threadEntries)
249 private ISTPInstancePerformanceCounters _pcs = NullSTPInstancePerformanceCounters.Instance; 344 {
250 345 ThreadEntry threadEntry;
346 if (_threadEntries.TryGetValue(Thread.CurrentThread.ManagedThreadId, out threadEntry))
347 {
348 return threadEntry;
349 }
350 }
351 return null;
352 }
353 set
354 {
355 lock(_threadEntries)
356 {
357 _threadEntries[Thread.CurrentThread.ManagedThreadId] = value;
358 }
359 }
360#elif (_WINDOWS_CE)
361 get
362 {
363 //Thread.CurrentThread.ManagedThreadId
364 return Thread.GetData(_threadEntrySlot) as ThreadEntry;
365 }
366 set
367 {
368 Thread.SetData(_threadEntrySlot, value);
369 }
370#else
371 get
372 {
373 return _threadEntry;
374 }
375 set
376 {
377 _threadEntry = value;
378 }
379#endif
380 }
251 #endregion 381 #endregion
252 382
253 #region Construction and Finalization 383 #region Construction and Finalization
254 384
255 /// <summary> 385 /// <summary>
256 /// Constructor 386 /// Constructor
257 /// </summary> 387 /// </summary>
258 public SmartThreadPool() 388 public SmartThreadPool()
259 { 389 {
390 _stpStartInfo = new STPStartInfo();
260 Initialize(); 391 Initialize();
261 } 392 }
262 393
263 /// <summary> 394 /// <summary>
264 /// Constructor 395 /// Constructor
265 /// </summary> 396 /// </summary>
266 /// <param name="idleTimeout">Idle timeout in milliseconds</param> 397 /// <param name="idleTimeout">Idle timeout in milliseconds</param>
267 public SmartThreadPool(int idleTimeout) 398 public SmartThreadPool(int idleTimeout)
268 { 399 {
269 _stpStartInfo.IdleTimeout = idleTimeout; 400 _stpStartInfo = new STPStartInfo
270 Initialize(); 401 {
271 } 402 IdleTimeout = idleTimeout,
403 };
404 Initialize();
405 }
406
407 /// <summary>
408 /// Constructor
409 /// </summary>
410 /// <param name="idleTimeout">Idle timeout in milliseconds</param>
411 /// <param name="maxWorkerThreads">Upper limit of threads in the pool</param>
412 public SmartThreadPool(
413 int idleTimeout,
414 int maxWorkerThreads)
415 {
416 _stpStartInfo = new STPStartInfo
417 {
418 IdleTimeout = idleTimeout,
419 MaxWorkerThreads = maxWorkerThreads,
420 };
421 Initialize();
422 }
423
424 /// <summary>
425 /// Constructor
426 /// </summary>
427 /// <param name="idleTimeout">Idle timeout in milliseconds</param>
428 /// <param name="maxWorkerThreads">Upper limit of threads in the pool</param>
429 /// <param name="minWorkerThreads">Lower limit of threads in the pool</param>
430 public SmartThreadPool(
431 int idleTimeout,
432 int maxWorkerThreads,
433 int minWorkerThreads)
434 {
435 _stpStartInfo = new STPStartInfo
436 {
437 IdleTimeout = idleTimeout,
438 MaxWorkerThreads = maxWorkerThreads,
439 MinWorkerThreads = minWorkerThreads,
440 };
441 Initialize();
442 }
272 443
273 /// <summary> 444 /// <summary>
274 /// Constructor 445 /// Constructor
275 /// </summary> 446 /// </summary>
276 /// <param name="idleTimeout">Idle timeout in milliseconds</param> 447 /// <param name="stpStartInfo">A SmartThreadPool configuration that overrides the default behavior</param>
277 /// <param name="maxWorkerThreads">Upper limit of threads in the pool</param> 448 public SmartThreadPool(STPStartInfo stpStartInfo)
278 public SmartThreadPool( 449 {
279 int idleTimeout, 450 _stpStartInfo = new STPStartInfo(stpStartInfo);
280 int maxWorkerThreads) 451 Initialize();
281 { 452 }
282 _stpStartInfo.IdleTimeout = idleTimeout;
283 _stpStartInfo.MaxWorkerThreads = maxWorkerThreads;
284 Initialize();
285 }
286 453
287 /// <summary> 454 private void Initialize()
288 /// Constructor 455 {
289 /// </summary> 456 Name = _stpStartInfo.ThreadPoolName;
290 /// <param name="idleTimeout">Idle timeout in milliseconds</param> 457 ValidateSTPStartInfo();
291 /// <param name="maxWorkerThreads">Upper limit of threads in the pool</param>
292 /// <param name="minWorkerThreads">Lower limit of threads in the pool</param>
293 public SmartThreadPool(
294 int idleTimeout,
295 int maxWorkerThreads,
296 int minWorkerThreads)
297 {
298 _stpStartInfo.IdleTimeout = idleTimeout;
299 _stpStartInfo.MaxWorkerThreads = maxWorkerThreads;
300 _stpStartInfo.MinWorkerThreads = minWorkerThreads;
301 Initialize();
302 }
303 458
304 /// <summary> 459 // _stpStartInfoRW stores a read/write copy of the STPStartInfo.
305 /// Constructor 460 // Actually only MaxWorkerThreads and MinWorkerThreads are overwritten
306 /// </summary>
307 public SmartThreadPool(STPStartInfo stpStartInfo)
308 {
309 _stpStartInfo = new STPStartInfo(stpStartInfo);
310 Initialize();
311 }
312 461
313 private void Initialize() 462 _isSuspended = _stpStartInfo.StartSuspended;
314 {
315 Name = _stpStartInfo.ThreadPoolName;
316 ValidateSTPStartInfo();
317 463
464#if (_WINDOWS_CE) || (_SILVERLIGHT) || (_MONO) || (WINDOWS_PHONE)
465 if (null != _stpStartInfo.PerformanceCounterInstanceName)
466 {
467 throw new NotSupportedException("Performance counters are not implemented for Compact Framework/Silverlight/Mono, instead use StpStartInfo.EnableLocalPerformanceCounters");
468 }
469#else
318 if (null != _stpStartInfo.PerformanceCounterInstanceName) 470 if (null != _stpStartInfo.PerformanceCounterInstanceName)
319 { 471 {
320 try 472 try
321 { 473 {
322 _pcs = new STPInstancePerformanceCounters(_stpStartInfo.PerformanceCounterInstanceName); 474 _windowsPCs = new STPInstancePerformanceCounters(_stpStartInfo.PerformanceCounterInstanceName);
323 } 475 }
324 catch(Exception e) 476 catch (Exception e)
325 { 477 {
326 Debug.WriteLine("Unable to create Performance Counters: " + e.ToString()); 478 Debug.WriteLine("Unable to create Performance Counters: " + e);
327 _pcs = NullSTPInstancePerformanceCounters.Instance; 479 _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
328 } 480 }
329 } 481 }
482#endif
330 483
331 StartOptimalNumberOfThreads(); 484 if (_stpStartInfo.EnableLocalPerformanceCounters)
332 }
333
334 private void StartOptimalNumberOfThreads()
335 {
336 int threadsCount = Math.Max(_workItemsQueue.Count, _stpStartInfo.MinWorkerThreads);
337 threadsCount = Math.Min(threadsCount, _stpStartInfo.MaxWorkerThreads);
338 StartThreads(threadsCount);
339 }
340
341 private void ValidateSTPStartInfo()
342 {
343 if (_stpStartInfo.MinWorkerThreads < 0)
344 {
345 throw new ArgumentOutOfRangeException(
346 "MinWorkerThreads", "MinWorkerThreads cannot be negative");
347 }
348
349 if (_stpStartInfo.MaxWorkerThreads <= 0)
350 { 485 {
351 throw new ArgumentOutOfRangeException( 486 _localPCs = new LocalSTPInstancePerformanceCounters();
352 "MaxWorkerThreads", "MaxWorkerThreads must be greater than zero");
353 } 487 }
354 488
355 if (_stpStartInfo.MinWorkerThreads > _stpStartInfo.MaxWorkerThreads) 489 // If the STP is not started suspended then start the threads.
490 if (!_isSuspended)
356 { 491 {
357 throw new ArgumentOutOfRangeException( 492 StartOptimalNumberOfThreads();
358 "MinWorkerThreads, maxWorkerThreads",
359 "MaxWorkerThreads must be greater or equal to MinWorkerThreads");
360 } 493 }
361 } 494 }
362 495
363 private void ValidateCallback(Delegate callback) 496 private void StartOptimalNumberOfThreads()
364 { 497 {
365 if(callback.GetInvocationList().Length > 1) 498 int threadsCount = Math.Max(_workItemsQueue.Count, _stpStartInfo.MinWorkerThreads);
499 threadsCount = Math.Min(threadsCount, _stpStartInfo.MaxWorkerThreads);
500 threadsCount -= _workerThreads.Count;
501 if (threadsCount > 0)
366 { 502 {
367 throw new NotSupportedException("SmartThreadPool doesn't support delegates chains"); 503 StartThreads(threadsCount);
368 } 504 }
369 } 505 }
370 506
371 #endregion 507 private void ValidateSTPStartInfo()
508 {
509 if (_stpStartInfo.MinWorkerThreads < 0)
510 {
511 throw new ArgumentOutOfRangeException(
512 "MinWorkerThreads", "MinWorkerThreads cannot be negative");
513 }
372 514
373 #region Thread Processing 515 if (_stpStartInfo.MaxWorkerThreads <= 0)
516 {
517 throw new ArgumentOutOfRangeException(
518 "MaxWorkerThreads", "MaxWorkerThreads must be greater than zero");
519 }
374 520
375 /// <summary> 521 if (_stpStartInfo.MinWorkerThreads > _stpStartInfo.MaxWorkerThreads)
376 /// Waits on the queue for a work item, shutdown, or timeout. 522 {
377 /// </summary> 523 throw new ArgumentOutOfRangeException(
378 /// <returns> 524 "MinWorkerThreads, maxWorkerThreads",
379 /// Returns the WaitingCallback or null in case of timeout or shutdown. 525 "MaxWorkerThreads must be greater or equal to MinWorkerThreads");
380 /// </returns> 526 }
381 private WorkItem Dequeue() 527 }
382 { 528
383 WorkItem workItem = 529 private static void ValidateCallback(Delegate callback)
530 {
531 if(callback.GetInvocationList().Length > 1)
532 {
533 throw new NotSupportedException("SmartThreadPool doesn't support delegates chains");
534 }
535 }
536
537 #endregion
538
539 #region Thread Processing
540
541 /// <summary>
542 /// Waits on the queue for a work item, shutdown, or timeout.
543 /// </summary>
544 /// <returns>
545 /// Returns the WaitingCallback or null in case of timeout or shutdown.
546 /// </returns>
547 private WorkItem Dequeue()
548 {
549 WorkItem workItem =
384 _workItemsQueue.DequeueWorkItem(_stpStartInfo.IdleTimeout, _shuttingDownEvent); 550 _workItemsQueue.DequeueWorkItem(_stpStartInfo.IdleTimeout, _shuttingDownEvent);
385 551
386 return workItem; 552 return workItem;
387 } 553 }
388 554
389 /// <summary> 555 /// <summary>
390 /// Put a new work item in the queue 556 /// Put a new work item in the queue
391 /// </summary> 557 /// </summary>
392 /// <param name="workItem">A work item to queue</param> 558 /// <param name="workItem">A work item to queue</param>
393 private void Enqueue(WorkItem workItem) 559 internal override void Enqueue(WorkItem workItem)
394 { 560 {
395 Enqueue(workItem, true); 561 // Make sure the workItem is not null
396 } 562 Debug.Assert(null != workItem);
397 563
398 /// <summary> 564 IncrementWorkItemsCount();
399 /// Put a new work item in the queue 565
400 /// </summary> 566 workItem.CanceledSmartThreadPool = _canceledSmartThreadPool;
401 /// <param name="workItem">A work item to queue</param> 567 _workItemsQueue.EnqueueWorkItem(workItem);
402 internal void Enqueue(WorkItem workItem, bool incrementWorkItems) 568 workItem.WorkItemIsQueued();
403 { 569
404 // Make sure the workItem is not null 570 // If all the threads are busy then try to create a new one
405 Debug.Assert(null != workItem); 571 if (_currentWorkItemsCount > _workerThreads.Count)
406 572 {
407 if (incrementWorkItems) 573 StartThreads(1);
408 { 574 }
409 IncrementWorkItemsCount(); 575 }
410 } 576
411 577 private void IncrementWorkItemsCount()
412 _workItemsQueue.EnqueueWorkItem(workItem); 578 {
413 workItem.WorkItemIsQueued(); 579 _windowsPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
414 580 _localPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
415 // If all the threads are busy then try to create a new one 581
416 if ((InUseThreads + WaitingCallbacks) > _workerThreads.Count) 582 int count = Interlocked.Increment(ref _currentWorkItemsCount);
417 { 583 //Trace.WriteLine("WorkItemsCount = " + _currentWorkItemsCount.ToString());
418 StartThreads(1); 584 if (count == 1)
419 } 585 {
420 } 586 IsIdle = false;
421
422 private void IncrementWorkItemsCount()
423 {
424 _pcs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
425
426 int count = Interlocked.Increment(ref _currentWorkItemsCount);
427 //Trace.WriteLine("WorkItemsCount = " + _currentWorkItemsCount.ToString());
428 if (count == 1)
429 {
430 //Trace.WriteLine("STP is NOT idle");
431 _isIdleWaitHandle.Reset(); 587 _isIdleWaitHandle.Reset();
432 } 588 }
433 } 589 }
434
435 private void DecrementWorkItemsCount()
436 {
437 ++_workItemsProcessed;
438
439 // The counter counts even if the work item was cancelled
440 _pcs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
441 590
591 private void DecrementWorkItemsCount()
592 {
442 int count = Interlocked.Decrement(ref _currentWorkItemsCount); 593 int count = Interlocked.Decrement(ref _currentWorkItemsCount);
443 //Trace.WriteLine("WorkItemsCount = " + _currentWorkItemsCount.ToString()); 594 //Trace.WriteLine("WorkItemsCount = " + _currentWorkItemsCount.ToString());
444 if (count == 0) 595 if (count == 0)
445 { 596 {
446 //Trace.WriteLine("STP is idle"); 597 IsIdle = true;
447 _isIdleWaitHandle.Set(); 598 _isIdleWaitHandle.Set();
448 } 599 }
449 }
450 600
451 internal void RegisterWorkItemsGroup(IWorkItemsGroup workItemsGroup) 601 Interlocked.Increment(ref _workItemsProcessed);
452 {
453 _workItemsGroups[workItemsGroup] = workItemsGroup;
454 }
455
456 internal void UnregisterWorkItemsGroup(IWorkItemsGroup workItemsGroup)
457 {
458 if (_workItemsGroups.Contains(workItemsGroup))
459 {
460 _workItemsGroups.Remove(workItemsGroup);
461 }
462 }
463 602
464 /// <summary> 603 if (!_shutdown)
465 /// Inform that the current thread is about to quit or quiting.
466 /// The same thread may call this method more than once.
467 /// </summary>
468 private void InformCompleted()
469 {
470 // There is no need to lock the two methods together
471 // since only the current thread removes itself
472 // and the _workerThreads is a synchronized hashtable
473 if (_workerThreads.Contains(Thread.CurrentThread))
474 { 604 {
475 _workerThreads.Remove(Thread.CurrentThread); 605 // The counter counts even if the work item was cancelled
476 _pcs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads); 606 _windowsPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
607 _localPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
477 } 608 }
478 }
479 609
480 /// <summary> 610 }
481 /// Starts new threads 611
482 /// </summary> 612 internal void RegisterWorkItemsGroup(IWorkItemsGroup workItemsGroup)
483 /// <param name="threadsCount">The number of threads to start</param> 613 {
484 private void StartThreads(int threadsCount) 614 _workItemsGroups[workItemsGroup] = workItemsGroup;
485 { 615 }
486 if (_stpStartInfo.StartSuspended) 616
487 { 617 internal void UnregisterWorkItemsGroup(IWorkItemsGroup workItemsGroup)
488 return; 618 {
489 } 619 if (_workItemsGroups.Contains(workItemsGroup))
620 {
621 _workItemsGroups.Remove(workItemsGroup);
622 }
623 }
624
625 /// <summary>
626 /// Inform that the current thread is about to quit or quiting.
627 /// The same thread may call this method more than once.
628 /// </summary>
629 private void InformCompleted()
630 {
631 // There is no need to lock the two methods together
632 // since only the current thread removes itself
633 // and the _workerThreads is a synchronized dictionary
634 if (_workerThreads.Contains(Thread.CurrentThread))
635 {
636 _workerThreads.Remove(Thread.CurrentThread);
637 _windowsPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
638 _localPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
639 }
640 }
641
642 /// <summary>
643 /// Starts new threads
644 /// </summary>
645 /// <param name="threadsCount">The number of threads to start</param>
646 private void StartThreads(int threadsCount)
647 {
648 if (_isSuspended)
649 {
650 return;
651 }
652
653 lock(_workerThreads.SyncRoot)
654 {
655 // Don't start threads on shut down
656 if (_shutdown)
657 {
658 return;
659 }
660
661 for(int i = 0; i < threadsCount; ++i)
662 {
663 // Don't create more threads then the upper limit
664 if (_workerThreads.Count >= _stpStartInfo.MaxWorkerThreads)
665 {
666 return;
667 }
490 668
491 lock(_workerThreads.SyncRoot) 669 // Create a new thread
492 {
493 // Don't start threads on shut down
494 if (_shutdown)
495 {
496 return;
497 }
498 670
499 for(int i = 0; i < threadsCount; ++i) 671#if (_SILVERLIGHT) || (WINDOWS_PHONE)
500 { 672 Thread workerThread = new Thread(ProcessQueuedItems);
501 // Don't create more threads then the upper limit 673#else
502 if (_workerThreads.Count >= _stpStartInfo.MaxWorkerThreads) 674 Thread workerThread =
675 _stpStartInfo.MaxStackSize.HasValue
676 ? new Thread(ProcessQueuedItems, _stpStartInfo.MaxStackSize.Value)
677 : new Thread(ProcessQueuedItems);
678#endif
679 // Configure the new thread and start it
680 workerThread.Name = "STP " + Name + " Thread #" + _threadCounter;
681 workerThread.IsBackground = _stpStartInfo.AreThreadsBackground;
682
683#if !(_SILVERLIGHT) && !(_WINDOWS_CE) && !(WINDOWS_PHONE)
684 if (_stpStartInfo.ApartmentState != ApartmentState.Unknown)
503 { 685 {
504 return; 686 workerThread.SetApartmentState(_stpStartInfo.ApartmentState);
505 } 687 }
688#endif
506 689
507 // Create a new thread 690#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
508 Thread workerThread;
509 if (_stpStartInfo.StackSize > 0)
510 workerThread = new Thread(ProcessQueuedItems, _stpStartInfo.StackSize);
511 else
512 workerThread = new Thread(ProcessQueuedItems);
513
514 // Configure the new thread and start it
515 workerThread.Name = "STP " + Name + " Thread #" + _threadCounter;
516 workerThread.IsBackground = true;
517 workerThread.Priority = _stpStartInfo.ThreadPriority; 691 workerThread.Priority = _stpStartInfo.ThreadPriority;
692#endif
518 workerThread.Start(); 693 workerThread.Start();
519 ++_threadCounter; 694 ++_threadCounter;
520 695
521 // Add the new thread to the hashtable and update its creation 696 // Add it to the dictionary and update its creation time.
522 // time. 697 _workerThreads[workerThread] = new ThreadEntry(this);
523 _workerThreads[workerThread] = DateTime.Now; 698
524 _pcs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads); 699 _windowsPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
525 } 700 _localPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
526 } 701 }
527 } 702 }
528 703 }
529 /// <summary> 704
530 /// A worker thread method that processes work items from the work items queue. 705 /// <summary>
531 /// </summary> 706 /// A worker thread method that processes work items from the work items queue.
532 private void ProcessQueuedItems() 707 /// </summary>
533 { 708 private void ProcessQueuedItems()
534 // Initialize the _smartThreadPool variable 709 {
535 _smartThreadPool = this; 710 // Keep the entry of the dictionary as thread's variable to avoid the synchronization locks
536 711 // of the dictionary.
537 try 712 CurrentThreadEntry = _workerThreads[Thread.CurrentThread];
538 { 713
539 bool bInUseWorkerThreadsWasIncremented = false; 714 FireOnThreadInitialization();
540 715
541 // Process until shutdown. 716 try
542 while(!_shutdown) 717 {
543 { 718 bool bInUseWorkerThreadsWasIncremented = false;
544 719
545 // Wait for a work item, shutdown, or timeout 720 // Process until shutdown.
546 WorkItem workItem = Dequeue(); 721 while(!_shutdown)
547 722 {
548 // On timeout or shut down. 723 // Update the last time this thread was seen alive.
549 if (null == workItem) 724 // It's good for debugging.
725 CurrentThreadEntry.IAmAlive();
726
727 // The following block handles the when the MaxWorkerThreads has been
728 // incremented by the user at run-time.
729 // Double lock for quit.
730 if (_workerThreads.Count > _stpStartInfo.MaxWorkerThreads)
550 { 731 {
551 // Double lock for quit. 732 lock (_workerThreads.SyncRoot)
552 if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads)
553 { 733 {
554 lock(_workerThreads.SyncRoot) 734 if (_workerThreads.Count > _stpStartInfo.MaxWorkerThreads)
555 { 735 {
556 // Update the last time this thread was seen alive. 736 // Inform that the thread is quiting and then quit.
557 // It's good for debugging. 737 // This method must be called within this lock or else
558 _workerThreads[Thread.CurrentThread] = DateTime.Now; 738 // more threads will quit and the thread pool will go
559 739 // below the lower limit.
560 if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads) 740 InformCompleted();
561 { 741 break;
562 // Inform that the thread is quiting and then quit.
563 // This method must be called within this lock or else
564 // more threads will quit and the thread pool will go
565 // below the lower limit.
566 InformCompleted();
567 break;
568 }
569 } 742 }
570 } 743 }
571 } 744 }
572 745
573 // If we didn't quit then skip to the next iteration. 746 // Wait for a work item, shutdown, or timeout
574 if (null == workItem) 747 WorkItem workItem = Dequeue();
575 {
576 continue;
577 }
578
579 try
580 {
581 // Initialize the value to false
582 bInUseWorkerThreadsWasIncremented = false;
583
584 // Change the state of the work item to 'in progress' if possible.
585 // We do it here so if the work item has been canceled we won't
586 // increment the _inUseWorkerThreads.
587 // The cancel mechanism doesn't delete items from the queue,
588 // it marks the work item as canceled, and when the work item
589 // is dequeued, we just skip it.
590 // If the post execute of work item is set to always or to
591 // call when the work item is canceled then the StartingWorkItem()
592 // will return true, so the post execute can run.
593 if (!workItem.StartingWorkItem())
594 {
595 continue;
596 }
597 748
598 // Execute the callback. Make sure to accurately 749 // Update the last time this thread was seen alive.
599 // record how many callbacks are currently executing. 750 // It's good for debugging.
600 int inUseWorkerThreads = Interlocked.Increment(ref _inUseWorkerThreads); 751 CurrentThreadEntry.IAmAlive();
601 _pcs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
602 752
603 // Mark that the _inUseWorkerThreads incremented, so in the finally{} 753 // On timeout or shut down.
604 // statement we will decrement it correctly. 754 if (null == workItem)
605 bInUseWorkerThreadsWasIncremented = true; 755 {
606 756 // Double lock for quit.
607 // Set the _currentWorkItem to the current work item 757 if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads)
608 _currentWorkItem = workItem; 758 {
609 759 lock(_workerThreads.SyncRoot)
610 lock(workItem) 760 {
611 { 761 if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads)
612 workItem.currentThread = Thread.CurrentThread; 762 {
613 } 763 // Inform that the thread is quiting and then quit.
614 764 // This method must be called within this lock or else
615 ExecuteWorkItem(workItem); 765 // more threads will quit and the thread pool will go
616 766 // below the lower limit.
617 lock(workItem) 767 InformCompleted();
618 { 768 break;
619 workItem.currentThread = null; 769 }
620 } 770 }
621 771 }
622 } 772 }
623 catch(ThreadAbortException ex) 773
624 { 774 // If we didn't quit then skip to the next iteration.
625 lock(workItem) 775 if (null == workItem)
626 { 776 {
627 workItem.currentThread = null; 777 continue;
628 } 778 }
629 ex.GetHashCode(); 779
630 Thread.ResetAbort(); 780 try
631 } 781 {
632 catch(Exception ex) 782 // Initialize the value to false
633 { 783 bInUseWorkerThreadsWasIncremented = false;
784
785 // Set the Current Work Item of the thread.
786 // Store the Current Work Item before the workItem.StartingWorkItem() is called,
787 // so WorkItem.Cancel can work when the work item is between InQueue and InProgress
788 // states.
789 // If the work item has been cancelled BEFORE the workItem.StartingWorkItem()
790 // (work item is in InQueue state) then workItem.StartingWorkItem() will return false.
791 // If the work item has been cancelled AFTER the workItem.StartingWorkItem() then
792 // (work item is in InProgress state) then the thread will be aborted
793 CurrentThreadEntry.CurrentWorkItem = workItem;
794
795 // Change the state of the work item to 'in progress' if possible.
796 // We do it here so if the work item has been canceled we won't
797 // increment the _inUseWorkerThreads.
798 // The cancel mechanism doesn't delete items from the queue,
799 // it marks the work item as canceled, and when the work item
800 // is dequeued, we just skip it.
801 // If the post execute of work item is set to always or to
802 // call when the work item is canceled then the StartingWorkItem()
803 // will return true, so the post execute can run.
804 if (!workItem.StartingWorkItem())
805 {
806 continue;
807 }
808
809 // Execute the callback. Make sure to accurately
810 // record how many callbacks are currently executing.
811 int inUseWorkerThreads = Interlocked.Increment(ref _inUseWorkerThreads);
812 _windowsPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
813 _localPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
814
815 // Mark that the _inUseWorkerThreads incremented, so in the finally{}
816 // statement we will decrement it correctly.
817 bInUseWorkerThreadsWasIncremented = true;
818
819 workItem.FireWorkItemStarted();
820
821 ExecuteWorkItem(workItem);
822 }
823 catch(Exception ex)
824 {
634 ex.GetHashCode(); 825 ex.GetHashCode();
635 // Do nothing 826 // Do nothing
636 } 827 }
637 finally 828 finally
638 { 829 {
639 lock(workItem) 830 workItem.DisposeOfState();
640 { 831
641 workItem.currentThread = null; 832 // Set the CurrentWorkItem to null, since we
642 } 833 // no longer run user's code.
643 834 CurrentThreadEntry.CurrentWorkItem = null;
644 if (null != workItem) 835
645 { 836 // Decrement the _inUseWorkerThreads only if we had
646 workItem.DisposeOfState(); 837 // incremented it. Note the cancelled work items don't
647 } 838 // increment _inUseWorkerThreads.
648 839 if (bInUseWorkerThreadsWasIncremented)
649 // Set the _currentWorkItem to null, since we 840 {
650 // no longer run user's code. 841 int inUseWorkerThreads = Interlocked.Decrement(ref _inUseWorkerThreads);
651 _currentWorkItem = null; 842 _windowsPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
652 843 _localPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
653 // Decrement the _inUseWorkerThreads only if we had 844 }
654 // incremented it. Note the cancelled work items don't 845
655 // increment _inUseWorkerThreads. 846 // Notify that the work item has been completed.
656 if (bInUseWorkerThreadsWasIncremented) 847 // WorkItemsGroup may enqueue their next work item.
657 { 848 workItem.FireWorkItemCompleted();
658 int inUseWorkerThreads = Interlocked.Decrement(ref _inUseWorkerThreads); 849
659 _pcs.SampleThreads(_workerThreads.Count, inUseWorkerThreads); 850 // Decrement the number of work items here so the idle
660 } 851 // ManualResetEvent won't fluctuate.
661 852 DecrementWorkItemsCount();
662 // Notify that the work item has been completed. 853 }
663 // WorkItemsGroup may enqueue their next work item. 854 }
664 workItem.FireWorkItemCompleted(); 855 }
665 856 catch(ThreadAbortException tae)
666 // Decrement the number of work items here so the idle 857 {
667 // ManualResetEvent won't fluctuate.
668 DecrementWorkItemsCount();
669 }
670 }
671 }
672 catch(ThreadAbortException tae)
673 {
674 tae.GetHashCode(); 858 tae.GetHashCode();
675 // Handle the abort exception gracfully. 859 // Handle the abort exception gracfully.
676 Thread.ResetAbort(); 860#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
677 } 861 Thread.ResetAbort();
678 catch(Exception e) 862#endif
679 {
680 Debug.Assert(null != e);
681 }
682 finally
683 {
684 InformCompleted();
685 }
686 }
687
688 private void ExecuteWorkItem(WorkItem workItem)
689 {
690 _pcs.SampleWorkItemsWaitTime(workItem.WaitingTime);
691 try
692 {
693 workItem.Execute();
694 }
695 catch
696 {
697 throw;
698 } 863 }
699 finally 864 catch(Exception e)
865 {
866 Debug.Assert(null != e);
867 }
868 finally
869 {
870 InformCompleted();
871 FireOnThreadTermination();
872 }
873 }
874
875 private void ExecuteWorkItem(WorkItem workItem)
876 {
877 _windowsPCs.SampleWorkItemsWaitTime(workItem.WaitingTime);
878 _localPCs.SampleWorkItemsWaitTime(workItem.WaitingTime);
879 try
880 {
881 workItem.Execute();
882 }
883 finally
884 {
885 _windowsPCs.SampleWorkItemsProcessTime(workItem.ProcessTime);
886 _localPCs.SampleWorkItemsProcessTime(workItem.ProcessTime);
887 }
888 }
889
890
891 #endregion
892
893 #region Public Methods
894
895 private void ValidateWaitForIdle()
896 {
897 if (null != CurrentThreadEntry && CurrentThreadEntry.AssociatedSmartThreadPool == this)
898 {
899 throw new NotSupportedException(
900 "WaitForIdle cannot be called from a thread on its SmartThreadPool, it causes a deadlock");
901 }
902 }
903
904 internal static void ValidateWorkItemsGroupWaitForIdle(IWorkItemsGroup workItemsGroup)
905 {
906 if (null == CurrentThreadEntry)
700 { 907 {
701 _pcs.SampleWorkItemsProcessTime(workItem.ProcessTime); 908 return;
702 } 909 }
703 }
704
705
706 #endregion
707 910
708 #region Public Methods 911 WorkItem workItem = CurrentThreadEntry.CurrentWorkItem;
709 912 ValidateWorkItemsGroupWaitForIdleImpl(workItemsGroup, workItem);
710 /// <summary> 913 if ((null != workItemsGroup) &&
711 /// Queue a work item 914 (null != workItem) &&
915 CurrentThreadEntry.CurrentWorkItem.WasQueuedBy(workItemsGroup))
916 {
917 throw new NotSupportedException("WaitForIdle cannot be called from a thread on its SmartThreadPool, it causes a deadlock");
918 }
919 }
920
921 [MethodImpl(MethodImplOptions.NoInlining)]
922 private static void ValidateWorkItemsGroupWaitForIdleImpl(IWorkItemsGroup workItemsGroup, WorkItem workItem)
923 {
924 if ((null != workItemsGroup) &&
925 (null != workItem) &&
926 workItem.WasQueuedBy(workItemsGroup))
927 {
928 throw new NotSupportedException("WaitForIdle cannot be called from a thread on its SmartThreadPool, it causes a deadlock");
929 }
930 }
931
932 /// <summary>
933 /// Force the SmartThreadPool to shutdown
934 /// </summary>
935 public void Shutdown()
936 {
937 Shutdown(true, 0);
938 }
939
940 /// <summary>
941 /// Force the SmartThreadPool to shutdown with timeout
712 /// </summary> 942 /// </summary>
713 /// <param name="callback">A callback to execute</param> 943 public void Shutdown(bool forceAbort, TimeSpan timeout)
714 /// <returns>Returns a work item result</returns> 944 {
715 public IWorkItemResult QueueWorkItem(WorkItemCallback callback) 945 Shutdown(forceAbort, (int)timeout.TotalMilliseconds);
716 { 946 }
717 ValidateNotDisposed(); 947
718 ValidateCallback(callback); 948 /// <summary>
719 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback); 949 /// Empties the queue of work items and abort the threads in the pool.
720 Enqueue(workItem); 950 /// </summary>
721 return workItem.GetWorkItemResult(); 951 public void Shutdown(bool forceAbort, int millisecondsTimeout)
722 } 952 {
953 ValidateNotDisposed();
954
955 ISTPInstancePerformanceCounters pcs = _windowsPCs;
956
957 if (NullSTPInstancePerformanceCounters.Instance != _windowsPCs)
958 {
959 // Set the _pcs to "null" to stop updating the performance
960 // counters
961 _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
962
963 pcs.Dispose();
964 }
965
966 Thread [] threads;
967 lock(_workerThreads.SyncRoot)
968 {
969 // Shutdown the work items queue
970 _workItemsQueue.Dispose();
971
972 // Signal the threads to exit
973 _shutdown = true;
974 _shuttingDownEvent.Set();
975
976 // Make a copy of the threads' references in the pool
977 threads = new Thread [_workerThreads.Count];
978 _workerThreads.Keys.CopyTo(threads, 0);
979 }
980
981 int millisecondsLeft = millisecondsTimeout;
982 Stopwatch stopwatch = Stopwatch.StartNew();
983 //DateTime start = DateTime.UtcNow;
984 bool waitInfinitely = (Timeout.Infinite == millisecondsTimeout);
985 bool timeout = false;
986
987 // Each iteration we update the time left for the timeout.
988 foreach(Thread thread in threads)
989 {
990 // Join don't work with negative numbers
991 if (!waitInfinitely && (millisecondsLeft < 0))
992 {
993 timeout = true;
994 break;
995 }
996
997 // Wait for the thread to terminate
998 bool success = thread.Join(millisecondsLeft);
999 if(!success)
1000 {
1001 timeout = true;
1002 break;
1003 }
1004
1005 if(!waitInfinitely)
1006 {
1007 // Update the time left to wait
1008 //TimeSpan ts = DateTime.UtcNow - start;
1009 millisecondsLeft = millisecondsTimeout - (int)stopwatch.ElapsedMilliseconds;
1010 }
1011 }
1012
1013 if (timeout && forceAbort)
1014 {
1015 // Abort the threads in the pool
1016 foreach(Thread thread in threads)
1017 {
1018
1019 if ((thread != null)
1020#if !(_WINDOWS_CE)
1021 && thread.IsAlive
1022#endif
1023 )
1024 {
1025 try
1026 {
1027 thread.Abort(); // Shutdown
1028 }
1029 catch(SecurityException e)
1030 {
1031 e.GetHashCode();
1032 }
1033 catch(ThreadStateException ex)
1034 {
1035 ex.GetHashCode();
1036 // In case the thread has been terminated
1037 // after the check if it is alive.
1038 }
1039 }
1040 }
1041 }
1042 }
1043
1044 /// <summary>
1045 /// Wait for all work items to complete
1046 /// </summary>
1047 /// <param name="waitableResults">Array of work item result objects</param>
1048 /// <returns>
1049 /// true when every work item in workItemResults has completed; otherwise false.
1050 /// </returns>
1051 public static bool WaitAll(
1052 IWaitableResult [] waitableResults)
1053 {
1054 return WaitAll(waitableResults, Timeout.Infinite, true);
1055 }
1056
1057 /// <summary>
1058 /// Wait for all work items to complete
1059 /// </summary>
1060 /// <param name="waitableResults">Array of work item result objects</param>
1061 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param>
1062 /// <param name="exitContext">
1063 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1064 /// </param>
1065 /// <returns>
1066 /// true when every work item in workItemResults has completed; otherwise false.
1067 /// </returns>
1068 public static bool WaitAll(
1069 IWaitableResult [] waitableResults,
1070 TimeSpan timeout,
1071 bool exitContext)
1072 {
1073 return WaitAll(waitableResults, (int)timeout.TotalMilliseconds, exitContext);
1074 }
1075
1076 /// <summary>
1077 /// Wait for all work items to complete
1078 /// </summary>
1079 /// <param name="waitableResults">Array of work item result objects</param>
1080 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param>
1081 /// <param name="exitContext">
1082 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1083 /// </param>
1084 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1085 /// <returns>
1086 /// true when every work item in workItemResults has completed; otherwise false.
1087 /// </returns>
1088 public static bool WaitAll(
1089 IWaitableResult[] waitableResults,
1090 TimeSpan timeout,
1091 bool exitContext,
1092 WaitHandle cancelWaitHandle)
1093 {
1094 return WaitAll(waitableResults, (int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle);
1095 }
1096
1097 /// <summary>
1098 /// Wait for all work items to complete
1099 /// </summary>
1100 /// <param name="waitableResults">Array of work item result objects</param>
1101 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1102 /// <param name="exitContext">
1103 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1104 /// </param>
1105 /// <returns>
1106 /// true when every work item in workItemResults has completed; otherwise false.
1107 /// </returns>
1108 public static bool WaitAll(
1109 IWaitableResult [] waitableResults,
1110 int millisecondsTimeout,
1111 bool exitContext)
1112 {
1113 return WorkItem.WaitAll(waitableResults, millisecondsTimeout, exitContext, null);
1114 }
1115
1116 /// <summary>
1117 /// Wait for all work items to complete
1118 /// </summary>
1119 /// <param name="waitableResults">Array of work item result objects</param>
1120 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1121 /// <param name="exitContext">
1122 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1123 /// </param>
1124 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1125 /// <returns>
1126 /// true when every work item in workItemResults has completed; otherwise false.
1127 /// </returns>
1128 public static bool WaitAll(
1129 IWaitableResult[] waitableResults,
1130 int millisecondsTimeout,
1131 bool exitContext,
1132 WaitHandle cancelWaitHandle)
1133 {
1134 return WorkItem.WaitAll(waitableResults, millisecondsTimeout, exitContext, cancelWaitHandle);
1135 }
1136
1137
1138 /// <summary>
1139 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1140 /// </summary>
1141 /// <param name="waitableResults">Array of work item result objects</param>
1142 /// <returns>
1143 /// The array index of the work item result that satisfied the wait, or WaitTimeout if any of the work items has been canceled.
1144 /// </returns>
1145 public static int WaitAny(
1146 IWaitableResult [] waitableResults)
1147 {
1148 return WaitAny(waitableResults, Timeout.Infinite, true);
1149 }
1150
1151 /// <summary>
1152 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1153 /// </summary>
1154 /// <param name="waitableResults">Array of work item result objects</param>
1155 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param>
1156 /// <param name="exitContext">
1157 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1158 /// </param>
1159 /// <returns>
1160 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1161 /// </returns>
1162 public static int WaitAny(
1163 IWaitableResult[] waitableResults,
1164 TimeSpan timeout,
1165 bool exitContext)
1166 {
1167 return WaitAny(waitableResults, (int)timeout.TotalMilliseconds, exitContext);
1168 }
1169
1170 /// <summary>
1171 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1172 /// </summary>
1173 /// <param name="waitableResults">Array of work item result objects</param>
1174 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param>
1175 /// <param name="exitContext">
1176 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1177 /// </param>
1178 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1179 /// <returns>
1180 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1181 /// </returns>
1182 public static int WaitAny(
1183 IWaitableResult [] waitableResults,
1184 TimeSpan timeout,
1185 bool exitContext,
1186 WaitHandle cancelWaitHandle)
1187 {
1188 return WaitAny(waitableResults, (int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle);
1189 }
1190
1191 /// <summary>
1192 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1193 /// </summary>
1194 /// <param name="waitableResults">Array of work item result objects</param>
1195 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1196 /// <param name="exitContext">
1197 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1198 /// </param>
1199 /// <returns>
1200 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1201 /// </returns>
1202 public static int WaitAny(
1203 IWaitableResult [] waitableResults,
1204 int millisecondsTimeout,
1205 bool exitContext)
1206 {
1207 return WorkItem.WaitAny(waitableResults, millisecondsTimeout, exitContext, null);
1208 }
1209
1210 /// <summary>
1211 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1212 /// </summary>
1213 /// <param name="waitableResults">Array of work item result objects</param>
1214 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1215 /// <param name="exitContext">
1216 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1217 /// </param>
1218 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1219 /// <returns>
1220 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1221 /// </returns>
1222 public static int WaitAny(
1223 IWaitableResult [] waitableResults,
1224 int millisecondsTimeout,
1225 bool exitContext,
1226 WaitHandle cancelWaitHandle)
1227 {
1228 return WorkItem.WaitAny(waitableResults, millisecondsTimeout, exitContext, cancelWaitHandle);
1229 }
1230
1231 /// <summary>
1232 /// Creates a new WorkItemsGroup.
1233 /// </summary>
1234 /// <param name="concurrency">The number of work items that can be run concurrently</param>
1235 /// <returns>A reference to the WorkItemsGroup</returns>
1236 public IWorkItemsGroup CreateWorkItemsGroup(int concurrency)
1237 {
1238 IWorkItemsGroup workItemsGroup = new WorkItemsGroup(this, concurrency, _stpStartInfo);
1239 return workItemsGroup;
1240 }
723 1241
724 /// <summary> 1242 /// <summary>
725 /// Queue a work item 1243 /// Creates a new WorkItemsGroup.
726 /// </summary> 1244 /// </summary>
727 /// <param name="callback">A callback to execute</param> 1245 /// <param name="concurrency">The number of work items that can be run concurrently</param>
728 /// <param name="workItemPriority">The priority of the work item</param> 1246 /// <param name="wigStartInfo">A WorkItemsGroup configuration that overrides the default behavior</param>
729 /// <returns>Returns a work item result</returns> 1247 /// <returns>A reference to the WorkItemsGroup</returns>
730 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority) 1248 public IWorkItemsGroup CreateWorkItemsGroup(int concurrency, WIGStartInfo wigStartInfo)
731 { 1249 {
732 ValidateNotDisposed(); 1250 IWorkItemsGroup workItemsGroup = new WorkItemsGroup(this, concurrency, wigStartInfo);
733 ValidateCallback(callback); 1251 return workItemsGroup;
734 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, workItemPriority); 1252 }
735 Enqueue(workItem);
736 return workItem.GetWorkItemResult();
737 }
738 1253
739 /// <summary> 1254 #region Fire Thread's Events
740 /// Queue a work item
741 /// </summary>
742 /// <param name="workItemInfo">Work item info</param>
743 /// <param name="callback">A callback to execute</param>
744 /// <returns>Returns a work item result</returns>
745 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback)
746 {
747 ValidateNotDisposed();
748 ValidateCallback(callback);
749 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, workItemInfo, callback);
750 Enqueue(workItem);
751 return workItem.GetWorkItemResult();
752 }
753 1255
754 /// <summary> 1256 private void FireOnThreadInitialization()
755 /// Queue a work item
756 /// </summary>
757 /// <param name="callback">A callback to execute</param>
758 /// <param name="state">
759 /// The context object of the work item. Used for passing arguments to the work item.
760 /// </param>
761 /// <returns>Returns a work item result</returns>
762 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state)
763 { 1257 {
764 ValidateNotDisposed(); 1258 if (null != _onThreadInitialization)
765 ValidateCallback(callback); 1259 {
766 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state); 1260 foreach (ThreadInitializationHandler tih in _onThreadInitialization.GetInvocationList())
767 Enqueue(workItem); 1261 {
768 return workItem.GetWorkItemResult(); 1262 try
1263 {
1264 tih();
1265 }
1266 catch (Exception e)
1267 {
1268 e.GetHashCode();
1269 Debug.Assert(false);
1270 throw;
1271 }
1272 }
1273 }
769 } 1274 }
770 1275
771 /// <summary> 1276 private void FireOnThreadTermination()
772 /// Queue a work item
773 /// </summary>
774 /// <param name="callback">A callback to execute</param>
775 /// <param name="state">
776 /// The context object of the work item. Used for passing arguments to the work item.
777 /// </param>
778 /// <param name="workItemPriority">The work item priority</param>
779 /// <returns>Returns a work item result</returns>
780 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority)
781 { 1277 {
782 ValidateNotDisposed(); 1278 if (null != _onThreadTermination)
783 ValidateCallback(callback); 1279 {
784 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, workItemPriority); 1280 foreach (ThreadTerminationHandler tth in _onThreadTermination.GetInvocationList())
785 Enqueue(workItem); 1281 {
786 return workItem.GetWorkItemResult(); 1282 try
1283 {
1284 tth();
1285 }
1286 catch (Exception e)
1287 {
1288 e.GetHashCode();
1289 Debug.Assert(false);
1290 throw;
1291 }
1292 }
1293 }
787 } 1294 }
788 1295
789 /// <summary> 1296 #endregion
790 /// Queue a work item
791 /// </summary>
792 /// <param name="workItemInfo">Work item information</param>
793 /// <param name="callback">A callback to execute</param>
794 /// <param name="state">
795 /// The context object of the work item. Used for passing arguments to the work item.
796 /// </param>
797 /// <returns>Returns a work item result</returns>
798 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
799 {
800 ValidateNotDisposed();
801 ValidateCallback(callback);
802 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, workItemInfo, callback, state);
803 Enqueue(workItem);
804 return workItem.GetWorkItemResult();
805 }
806 1297
807 /// <summary> 1298 /// <summary>
808 /// Queue a work item 1299 /// This event is fired when a thread is created.
1300 /// Use it to initialize a thread before the work items use it.
809 /// </summary> 1301 /// </summary>
810 /// <param name="callback">A callback to execute</param> 1302 public event ThreadInitializationHandler OnThreadInitialization
811 /// <param name="state">
812 /// The context object of the work item. Used for passing arguments to the work item.
813 /// </param>
814 /// <param name="postExecuteWorkItemCallback">
815 /// A delegate to call after the callback completion
816 /// </param>
817 /// <returns>Returns a work item result</returns>
818 public IWorkItemResult QueueWorkItem(
819 WorkItemCallback callback,
820 object state,
821 PostExecuteWorkItemCallback postExecuteWorkItemCallback)
822 { 1303 {
823 ValidateNotDisposed(); 1304 add { _onThreadInitialization += value; }
824 ValidateCallback(callback); 1305 remove { _onThreadInitialization -= value; }
825 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, postExecuteWorkItemCallback);
826 Enqueue(workItem);
827 return workItem.GetWorkItemResult();
828 } 1306 }
829 1307
830 /// <summary> 1308 /// <summary>
831 /// Queue a work item 1309 /// This event is fired when a thread is terminating.
1310 /// Use it for cleanup.
832 /// </summary> 1311 /// </summary>
833 /// <param name="callback">A callback to execute</param> 1312 public event ThreadTerminationHandler OnThreadTermination
834 /// <param name="state">
835 /// The context object of the work item. Used for passing arguments to the work item.
836 /// </param>
837 /// <param name="postExecuteWorkItemCallback">
838 /// A delegate to call after the callback completion
839 /// </param>
840 /// <param name="workItemPriority">The work item priority</param>
841 /// <returns>Returns a work item result</returns>
842 public IWorkItemResult QueueWorkItem(
843 WorkItemCallback callback,
844 object state,
845 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
846 WorkItemPriority workItemPriority)
847 { 1313 {
848 ValidateNotDisposed(); 1314 add { _onThreadTermination += value; }
849 ValidateCallback(callback); 1315 remove { _onThreadTermination -= value; }
850 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, postExecuteWorkItemCallback, workItemPriority);
851 Enqueue(workItem);
852 return workItem.GetWorkItemResult();
853 } 1316 }
854 1317
855 /// <summary>
856 /// Queue a work item
857 /// </summary>
858 /// <param name="callback">A callback to execute</param>
859 /// <param name="state">
860 /// The context object of the work item. Used for passing arguments to the work item.
861 /// </param>
862 /// <param name="postExecuteWorkItemCallback">
863 /// A delegate to call after the callback completion
864 /// </param>
865 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
866 /// <returns>Returns a work item result</returns>
867 public IWorkItemResult QueueWorkItem(
868 WorkItemCallback callback,
869 object state,
870 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
871 CallToPostExecute callToPostExecute)
872 {
873 ValidateNotDisposed();
874 ValidateCallback(callback);
875 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute);
876 Enqueue(workItem);
877 return workItem.GetWorkItemResult();
878 }
879 1318
880 /// <summary> 1319 internal void CancelAbortWorkItemsGroup(WorkItemsGroup wig)
881 /// Queue a work item
882 /// </summary>
883 /// <param name="callback">A callback to execute</param>
884 /// <param name="state">
885 /// The context object of the work item. Used for passing arguments to the work item.
886 /// </param>
887 /// <param name="postExecuteWorkItemCallback">
888 /// A delegate to call after the callback completion
889 /// </param>
890 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
891 /// <param name="workItemPriority">The work item priority</param>
892 /// <returns>Returns a work item result</returns>
893 public IWorkItemResult QueueWorkItem(
894 WorkItemCallback callback,
895 object state,
896 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
897 CallToPostExecute callToPostExecute,
898 WorkItemPriority workItemPriority)
899 { 1320 {
900 ValidateNotDisposed(); 1321 foreach (ThreadEntry threadEntry in _workerThreads.Values)
901 ValidateCallback(callback); 1322 {
902 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _stpStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority); 1323 WorkItem workItem = threadEntry.CurrentWorkItem;
903 Enqueue(workItem); 1324 if (null != workItem &&
904 return workItem.GetWorkItemResult(); 1325 workItem.WasQueuedBy(wig) &&
1326 !workItem.IsCanceled)
1327 {
1328 threadEntry.CurrentWorkItem.GetWorkItemResult().Cancel(true);
1329 }
1330 }
905 } 1331 }
906 1332
907 /// <summary> 1333
908 /// Wait for the thread pool to be idle
909 /// </summary>
910 public void WaitForIdle()
911 {
912 WaitForIdle(Timeout.Infinite);
913 }
914 1334
915 /// <summary> 1335 #endregion
916 /// Wait for the thread pool to be idle
917 /// </summary>
918 public bool WaitForIdle(TimeSpan timeout)
919 {
920 return WaitForIdle((int)timeout.TotalMilliseconds);
921 }
922 1336
923 /// <summary> 1337 #region Properties
924 /// Wait for the thread pool to be idle
925 /// </summary>
926 public bool WaitForIdle(int millisecondsTimeout)
927 {
928 ValidateWaitForIdle();
929 return _isIdleWaitHandle.WaitOne(millisecondsTimeout, false);
930 }
931 1338
932 private void ValidateWaitForIdle() 1339 /// <summary>
933 { 1340 /// Get/Set the lower limit of threads in the pool.
934 if(_smartThreadPool == this) 1341 /// </summary>
1342 public int MinThreads
1343 {
1344 get
1345 {
1346 ValidateNotDisposed();
1347 return _stpStartInfo.MinWorkerThreads;
1348 }
1349 set
935 { 1350 {
936 throw new NotSupportedException( 1351 Debug.Assert(value >= 0);
937 "WaitForIdle cannot be called from a thread on its SmartThreadPool, it will cause may cause a deadlock"); 1352 Debug.Assert(value <= _stpStartInfo.MaxWorkerThreads);
1353 if (_stpStartInfo.MaxWorkerThreads < value)
1354 {
1355 _stpStartInfo.MaxWorkerThreads = value;
1356 }
1357 _stpStartInfo.MinWorkerThreads = value;
1358 StartOptimalNumberOfThreads();
938 } 1359 }
939 } 1360 }
1361
1362 /// <summary>
1363 /// Get/Set the upper limit of threads in the pool.
1364 /// </summary>
1365 public int MaxThreads
1366 {
1367 get
1368 {
1369 ValidateNotDisposed();
1370 return _stpStartInfo.MaxWorkerThreads;
1371 }
940 1372
941 internal void ValidateWorkItemsGroupWaitForIdle(IWorkItemsGroup workItemsGroup) 1373 set
1374 {
1375 Debug.Assert(value > 0);
1376 Debug.Assert(value >= _stpStartInfo.MinWorkerThreads);
1377 if (_stpStartInfo.MinWorkerThreads > value)
1378 {
1379 _stpStartInfo.MinWorkerThreads = value;
1380 }
1381 _stpStartInfo.MaxWorkerThreads = value;
1382 StartOptimalNumberOfThreads();
1383 }
1384 }
1385 /// <summary>
1386 /// Get the number of threads in the thread pool.
1387 /// Should be between the lower and the upper limits.
1388 /// </summary>
1389 public int ActiveThreads
1390 {
1391 get
1392 {
1393 ValidateNotDisposed();
1394 return _workerThreads.Count;
1395 }
1396 }
1397
1398 /// <summary>
1399 /// Get the number of busy (not idle) threads in the thread pool.
1400 /// </summary>
1401 public int InUseThreads
1402 {
1403 get
1404 {
1405 ValidateNotDisposed();
1406 return _inUseWorkerThreads;
1407 }
1408 }
1409
1410 /// <summary>
1411 /// Returns true if the current running work item has been cancelled.
1412 /// Must be used within the work item's callback method.
1413 /// The work item should sample this value in order to know if it
1414 /// needs to quit before its completion.
1415 /// </summary>
1416 public static bool IsWorkItemCanceled
942 { 1417 {
943 ValidateWorkItemsGroupWaitForIdleImpl(workItemsGroup, SmartThreadPool._currentWorkItem); 1418 get
944 if ((null != workItemsGroup) &&
945 (null != SmartThreadPool._currentWorkItem) &&
946 SmartThreadPool._currentWorkItem.WasQueuedBy(workItemsGroup))
947 { 1419 {
948 throw new NotSupportedException("WaitForIdle cannot be called from a thread on its SmartThreadPool, it will cause may cause a deadlock"); 1420 return CurrentThreadEntry.CurrentWorkItem.IsCanceled;
949 } 1421 }
950 } 1422 }
951 1423
952 [MethodImpl(MethodImplOptions.NoInlining)] 1424 /// <summary>
953 private void ValidateWorkItemsGroupWaitForIdleImpl(IWorkItemsGroup workItemsGroup, WorkItem workItem) 1425 /// Checks if the work item has been cancelled, and if yes then abort the thread.
1426 /// Can be used with Cancel and timeout
1427 /// </summary>
1428 public static void AbortOnWorkItemCancel()
954 { 1429 {
955 if ((null != workItemsGroup) && 1430 if (IsWorkItemCanceled)
956 (null != workItem) &&
957 workItem.WasQueuedBy(workItemsGroup))
958 { 1431 {
959 throw new NotSupportedException("WaitForIdle cannot be called from a thread on its SmartThreadPool, it will cause may cause a deadlock"); 1432 Thread.CurrentThread.Abort();
960 } 1433 }
961 } 1434 }
962 1435
963
964
965 /// <summary> 1436 /// <summary>
966 /// Force the SmartThreadPool to shutdown 1437 /// Thread Pool start information (readonly)
967 /// </summary> 1438 /// </summary>
968 public void Shutdown() 1439 public STPStartInfo STPStartInfo
969 { 1440 {
970 Shutdown(true, 0); 1441 get
1442 {
1443 return _stpStartInfo.AsReadOnly();
1444 }
971 } 1445 }
972 1446
973 public void Shutdown(bool forceAbort, TimeSpan timeout) 1447 public bool IsShuttingdown
974 { 1448 {
975 Shutdown(forceAbort, (int)timeout.TotalMilliseconds); 1449 get { return _shutdown; }
976 } 1450 }
977 1451
978 /// <summary> 1452 /// <summary>
979 /// Empties the queue of work items and abort the threads in the pool. 1453 /// Return the local calculated performance counters
1454 /// Available only if STPStartInfo.EnableLocalPerformanceCounters is true.
980 /// </summary> 1455 /// </summary>
981 public void Shutdown(bool forceAbort, int millisecondsTimeout) 1456 public ISTPPerformanceCountersReader PerformanceCountersReader
982 { 1457 {
983 ValidateNotDisposed(); 1458 get { return (ISTPPerformanceCountersReader)_localPCs; }
984 1459 }
985 ISTPInstancePerformanceCounters pcs = _pcs;
986
987 if (NullSTPInstancePerformanceCounters.Instance != _pcs)
988 {
989 _pcs.Dispose();
990 // Set the _pcs to "null" to stop updating the performance
991 // counters
992 _pcs = NullSTPInstancePerformanceCounters.Instance;
993 }
994
995 Thread [] threads = null;
996 lock(_workerThreads.SyncRoot)
997 {
998 // Shutdown the work items queue
999 _workItemsQueue.Dispose();
1000
1001 // Signal the threads to exit
1002 _shutdown = true;
1003 _shuttingDownEvent.Set();
1004 1460
1005 // Make a copy of the threads' references in the pool 1461 #endregion
1006 threads = new Thread [_workerThreads.Count];
1007 _workerThreads.Keys.CopyTo(threads, 0);
1008 }
1009 1462
1010 int millisecondsLeft = millisecondsTimeout; 1463 #region IDisposable Members
1011 DateTime start = DateTime.Now;
1012 bool waitInfinitely = (Timeout.Infinite == millisecondsTimeout);
1013 bool timeout = false;
1014 1464
1015 // Each iteration we update the time left for the timeout. 1465 public void Dispose()
1016 foreach(Thread thread in threads) 1466 {
1467 if (!_isDisposed)
1017 { 1468 {
1018 // Join don't work with negative numbers 1469 if (!_shutdown)
1019 if (!waitInfinitely && (millisecondsLeft < 0))
1020 { 1470 {
1021 timeout = true; 1471 Shutdown();
1022 break;
1023 } 1472 }
1024 1473
1025 // Wait for the thread to terminate 1474 if (null != _shuttingDownEvent)
1026 bool success = thread.Join(millisecondsLeft);
1027 if(!success)
1028 { 1475 {
1029 timeout = true; 1476 _shuttingDownEvent.Close();
1030 break; 1477 _shuttingDownEvent = null;
1031 } 1478 }
1032 1479 _workerThreads.Clear();
1033 if(!waitInfinitely) 1480
1481 if (null != _isIdleWaitHandle)
1034 { 1482 {
1035 // Update the time left to wait 1483 _isIdleWaitHandle.Close();
1036 TimeSpan ts = DateTime.Now - start; 1484 _isIdleWaitHandle = null;
1037 millisecondsLeft = millisecondsTimeout - (int)ts.TotalMilliseconds;
1038 } 1485 }
1039 }
1040 1486
1041 if (timeout && forceAbort) 1487 _isDisposed = true;
1042 {
1043 // Abort the threads in the pool
1044 foreach(Thread thread in threads)
1045 {
1046 if ((thread != null) && thread.IsAlive)
1047 {
1048 try
1049 {
1050 thread.Abort("Shutdown");
1051 }
1052 catch(SecurityException e)
1053 {
1054 e.GetHashCode();
1055 }
1056 catch(ThreadStateException ex)
1057 {
1058 ex.GetHashCode();
1059 // In case the thread has been terminated
1060 // after the check if it is alive.
1061 }
1062 }
1063 }
1064 } 1488 }
1065
1066 // Dispose of the performance counters
1067 pcs.Dispose();
1068 } 1489 }
1069 1490
1070 /// <summary> 1491 private void ValidateNotDisposed()
1071 /// Wait for all work items to complete
1072 /// </summary>
1073 /// <param name="workItemResults">Array of work item result objects</param>
1074 /// <returns>
1075 /// true when every work item in workItemResults has completed; otherwise false.
1076 /// </returns>
1077 public static bool WaitAll(
1078 IWorkItemResult [] workItemResults)
1079 { 1492 {
1080 return WaitAll(workItemResults, Timeout.Infinite, true); 1493 if(_isDisposed)
1494 {
1495 throw new ObjectDisposedException(GetType().ToString(), "The SmartThreadPool has been shutdown");
1496 }
1081 } 1497 }
1498 #endregion
1499
1500 #region WorkItemsGroupBase Overrides
1082 1501
1083 /// <summary> 1502 /// <summary>
1084 /// Wait for all work items to complete 1503 /// Get/Set the maximum number of work items that execute cocurrency on the thread pool
1085 /// </summary> 1504 /// </summary>
1086 /// <param name="workItemResults">Array of work item result objects</param> 1505 public override int Concurrency
1087 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param> 1506 {
1088 /// <param name="exitContext"> 1507 get { return MaxThreads; }
1089 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. 1508 set { MaxThreads = value; }
1090 /// </param> 1509 }
1091 /// <returns> 1510
1092 /// true when every work item in workItemResults has completed; otherwise false. 1511 /// <summary>
1093 /// </returns> 1512 /// Get the number of work items in the queue.
1094 public static bool WaitAll( 1513 /// </summary>
1095 IWorkItemResult [] workItemResults, 1514 public override int WaitingCallbacks
1096 TimeSpan timeout, 1515 {
1097 bool exitContext) 1516 get
1098 { 1517 {
1099 return WaitAll(workItemResults, (int)timeout.TotalMilliseconds, exitContext); 1518 ValidateNotDisposed();
1100 } 1519 return _workItemsQueue.Count;
1520 }
1521 }
1101 1522
1102 /// <summary> 1523 /// <summary>
1103 /// Wait for all work items to complete 1524 /// Get an array with all the state objects of the currently running items.
1525 /// The array represents a snap shot and impact performance.
1104 /// </summary> 1526 /// </summary>
1105 /// <param name="workItemResults">Array of work item result objects</param> 1527 public override object[] GetStates()
1106 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param>
1107 /// <param name="exitContext">
1108 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1109 /// </param>
1110 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1111 /// <returns>
1112 /// true when every work item in workItemResults has completed; otherwise false.
1113 /// </returns>
1114 public static bool WaitAll(
1115 IWorkItemResult [] workItemResults,
1116 TimeSpan timeout,
1117 bool exitContext,
1118 WaitHandle cancelWaitHandle)
1119 { 1528 {
1120 return WaitAll(workItemResults, (int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle); 1529 object[] states = _workItemsQueue.GetStates();
1530 return states;
1121 } 1531 }
1122 1532
1123 /// <summary> 1533 /// <summary>
1124 /// Wait for all work items to complete 1534 /// WorkItemsGroup start information (readonly)
1125 /// </summary> 1535 /// </summary>
1126 /// <param name="workItemResults">Array of work item result objects</param> 1536 public override WIGStartInfo WIGStartInfo
1127 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1128 /// <param name="exitContext">
1129 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1130 /// </param>
1131 /// <returns>
1132 /// true when every work item in workItemResults has completed; otherwise false.
1133 /// </returns>
1134 public static bool WaitAll(
1135 IWorkItemResult [] workItemResults,
1136 int millisecondsTimeout,
1137 bool exitContext)
1138 { 1537 {
1139 return WorkItem.WaitAll(workItemResults, millisecondsTimeout, exitContext, null); 1538 get { return _stpStartInfo.AsReadOnly(); }
1140 } 1539 }
1141 1540
1142 /// <summary> 1541 /// <summary>
1143 /// Wait for all work items to complete 1542 /// Start the thread pool if it was started suspended.
1543 /// If it is already running, this method is ignored.
1144 /// </summary> 1544 /// </summary>
1145 /// <param name="workItemResults">Array of work item result objects</param> 1545 public override void Start()
1146 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1147 /// <param name="exitContext">
1148 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1149 /// </param>
1150 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1151 /// <returns>
1152 /// true when every work item in workItemResults has completed; otherwise false.
1153 /// </returns>
1154 public static bool WaitAll(
1155 IWorkItemResult [] workItemResults,
1156 int millisecondsTimeout,
1157 bool exitContext,
1158 WaitHandle cancelWaitHandle)
1159 { 1546 {
1160 return WorkItem.WaitAll(workItemResults, millisecondsTimeout, exitContext, cancelWaitHandle); 1547 if (!_isSuspended)
1161 } 1548 {
1549 return;
1550 }
1551 _isSuspended = false;
1162 1552
1553 ICollection workItemsGroups = _workItemsGroups.Values;
1554 foreach (WorkItemsGroup workItemsGroup in workItemsGroups)
1555 {
1556 workItemsGroup.OnSTPIsStarting();
1557 }
1163 1558
1164 /// <summary> 1559 StartOptimalNumberOfThreads();
1165 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
1166 /// </summary>
1167 /// <param name="workItemResults">Array of work item result objects</param>
1168 /// <returns>
1169 /// The array index of the work item result that satisfied the wait, or WaitTimeout if any of the work items has been canceled.
1170 /// </returns>
1171 public static int WaitAny(
1172 IWorkItemResult [] workItemResults)
1173 {
1174 return WaitAny(workItemResults, Timeout.Infinite, true);
1175 } 1560 }
1176 1561
1177 /// <summary> 1562 /// <summary>
1178 /// Waits for any of the work items in the specified array to complete, cancel, or timeout 1563 /// Cancel all work items using thread abortion
1179 /// </summary> 1564 /// </summary>
1180 /// <param name="workItemResults">Array of work item result objects</param> 1565 /// <param name="abortExecution">True to stop work items by raising ThreadAbortException</param>
1181 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param> 1566 public override void Cancel(bool abortExecution)
1182 /// <param name="exitContext">
1183 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1184 /// </param>
1185 /// <returns>
1186 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1187 /// </returns>
1188 public static int WaitAny(
1189 IWorkItemResult [] workItemResults,
1190 TimeSpan timeout,
1191 bool exitContext)
1192 { 1567 {
1193 return WaitAny(workItemResults, (int)timeout.TotalMilliseconds, exitContext); 1568 _canceledSmartThreadPool.IsCanceled = true;
1194 } 1569 _canceledSmartThreadPool = new CanceledWorkItemsGroup();
1195 1570
1196 /// <summary> 1571 ICollection workItemsGroups = _workItemsGroups.Values;
1197 /// Waits for any of the work items in the specified array to complete, cancel, or timeout 1572 foreach (WorkItemsGroup workItemsGroup in workItemsGroups)
1198 /// </summary> 1573 {
1199 /// <param name="workItemResults">Array of work item result objects</param> 1574 workItemsGroup.Cancel(abortExecution);
1200 /// <param name="timeout">The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. </param> 1575 }
1201 /// <param name="exitContext"> 1576
1202 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. 1577 if (abortExecution)
1203 /// </param> 1578 {
1204 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param> 1579 foreach (ThreadEntry threadEntry in _workerThreads.Values)
1205 /// <returns> 1580 {
1206 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. 1581 WorkItem workItem = threadEntry.CurrentWorkItem;
1207 /// </returns> 1582 if (null != workItem &&
1208 public static int WaitAny( 1583 threadEntry.AssociatedSmartThreadPool == this &&
1209 IWorkItemResult [] workItemResults, 1584 !workItem.IsCanceled)
1210 TimeSpan timeout, 1585 {
1211 bool exitContext, 1586 threadEntry.CurrentWorkItem.GetWorkItemResult().Cancel(true);
1212 WaitHandle cancelWaitHandle) 1587 }
1213 { 1588 }
1214 return WaitAny(workItemResults, (int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle); 1589 }
1215 } 1590 }
1216 1591
1217 /// <summary> 1592 /// <summary>
1218 /// Waits for any of the work items in the specified array to complete, cancel, or timeout 1593 /// Wait for the thread pool to be idle
1219 /// </summary> 1594 /// </summary>
1220 /// <param name="workItemResults">Array of work item result objects</param> 1595 public override bool WaitForIdle(int millisecondsTimeout)
1221 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1222 /// <param name="exitContext">
1223 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1224 /// </param>
1225 /// <returns>
1226 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1227 /// </returns>
1228 public static int WaitAny(
1229 IWorkItemResult [] workItemResults,
1230 int millisecondsTimeout,
1231 bool exitContext)
1232 { 1596 {
1233 return WorkItem.WaitAny(workItemResults, millisecondsTimeout, exitContext, null); 1597 ValidateWaitForIdle();
1598 return STPEventWaitHandle.WaitOne(_isIdleWaitHandle, millisecondsTimeout, false);
1234 } 1599 }
1235 1600
1236 /// <summary> 1601 /// <summary>
1237 /// Waits for any of the work items in the specified array to complete, cancel, or timeout 1602 /// This event is fired when all work items are completed.
1603 /// (When IsIdle changes to true)
1604 /// This event only work on WorkItemsGroup. On SmartThreadPool
1605 /// it throws the NotImplementedException.
1238 /// </summary> 1606 /// </summary>
1239 /// <param name="workItemResults">Array of work item result objects</param> 1607 public override event WorkItemsGroupIdleHandler OnIdle
1240 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
1241 /// <param name="exitContext">
1242 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
1243 /// </param>
1244 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
1245 /// <returns>
1246 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
1247 /// </returns>
1248 public static int WaitAny(
1249 IWorkItemResult [] workItemResults,
1250 int millisecondsTimeout,
1251 bool exitContext,
1252 WaitHandle cancelWaitHandle)
1253 {
1254 return WorkItem.WaitAny(workItemResults, millisecondsTimeout, exitContext, cancelWaitHandle);
1255 }
1256
1257 public IWorkItemsGroup CreateWorkItemsGroup(int concurrency)
1258 {
1259 IWorkItemsGroup workItemsGroup = new WorkItemsGroup(this, concurrency, _stpStartInfo);
1260 return workItemsGroup;
1261 }
1262
1263 public IWorkItemsGroup CreateWorkItemsGroup(int concurrency, WIGStartInfo wigStartInfo)
1264 {
1265 IWorkItemsGroup workItemsGroup = new WorkItemsGroup(this, concurrency, wigStartInfo);
1266 return workItemsGroup;
1267 }
1268
1269 public event WorkItemsGroupIdleHandler OnIdle
1270 { 1608 {
1271 add 1609 add
1272 { 1610 {
@@ -1280,166 +1618,115 @@ namespace Amib.Threading
1280 } 1618 }
1281 } 1619 }
1282 1620
1283 public void Cancel() 1621 internal override void PreQueueWorkItem()
1284 {
1285 ICollection workItemsGroups = _workItemsGroups.Values;
1286 foreach(WorkItemsGroup workItemsGroup in workItemsGroups)
1287 {
1288 workItemsGroup.Cancel();
1289 }
1290 }
1291
1292 public void Start()
1293 { 1622 {
1294 lock (this) 1623 ValidateNotDisposed();
1295 {
1296 if (!this._stpStartInfo.StartSuspended)
1297 {
1298 return;
1299 }
1300 _stpStartInfo.StartSuspended = false;
1301 }
1302
1303 ICollection workItemsGroups = _workItemsGroups.Values;
1304 foreach(WorkItemsGroup workItemsGroup in workItemsGroups)
1305 {
1306 workItemsGroup.OnSTPIsStarting();
1307 }
1308
1309 StartOptimalNumberOfThreads();
1310 } 1624 }
1311 1625
1312 #endregion 1626 #endregion
1313 1627
1314 #region Properties 1628 #region Join, Choice, Pipe, etc.
1315
1316 /// <summary>
1317 /// Get/Set the name of the SmartThreadPool instance
1318 /// </summary>
1319 public string Name
1320 {
1321 get
1322 {
1323 return _name;
1324 }
1325
1326 set
1327 {
1328 _name = value;
1329 }
1330 }
1331 1629
1332 /// <summary> 1630 /// <summary>
1333 /// Get the lower limit of threads in the pool. 1631 /// Executes all actions in parallel.
1632 /// Returns when they all finish.
1334 /// </summary> 1633 /// </summary>
1335 public int MinThreads 1634 /// <param name="actions">Actions to execute</param>
1336 { 1635 public void Join(IEnumerable<Action> actions)
1337 get 1636 {
1637 WIGStartInfo wigStartInfo = new WIGStartInfo { StartSuspended = true };
1638 IWorkItemsGroup workItemsGroup = CreateWorkItemsGroup(int.MaxValue, wigStartInfo);
1639 foreach (Action action in actions)
1338 { 1640 {
1339 ValidateNotDisposed(); 1641 workItemsGroup.QueueWorkItem(action);
1340 return _stpStartInfo.MinWorkerThreads;
1341 } 1642 }
1643 workItemsGroup.Start();
1644 workItemsGroup.WaitForIdle();
1342 } 1645 }
1343 1646
1344 /// <summary> 1647 /// <summary>
1345 /// Get the upper limit of threads in the pool. 1648 /// Executes all actions in parallel.
1346 /// </summary> 1649 /// Returns when they all finish.
1347 public int MaxThreads
1348 {
1349 get
1350 {
1351 ValidateNotDisposed();
1352 return _stpStartInfo.MaxWorkerThreads;
1353 }
1354 }
1355 /// <summary>
1356 /// Get the number of threads in the thread pool.
1357 /// Should be between the lower and the upper limits.
1358 /// </summary> 1650 /// </summary>
1359 public int ActiveThreads 1651 /// <param name="actions">Actions to execute</param>
1360 { 1652 public void Join(params Action[] actions)
1361 get 1653 {
1362 { 1654 Join((IEnumerable<Action>)actions);
1363 ValidateNotDisposed();
1364 return _workerThreads.Count;
1365 }
1366 } 1655 }
1367 1656
1368 /// <summary> 1657 private class ChoiceIndex
1369 /// Get the number of busy (not idle) threads in the thread pool. 1658 {
1370 /// </summary> 1659 public int _index = -1;
1371 public int InUseThreads
1372 {
1373 get
1374 {
1375 ValidateNotDisposed();
1376 return _inUseWorkerThreads;
1377 }
1378 } 1660 }
1379 1661
1380 /// <summary> 1662 /// <summary>
1381 /// Get the number of work items in the queue. 1663 /// Executes all actions in parallel
1664 /// Returns when the first one completes
1382 /// </summary> 1665 /// </summary>
1383 public int WaitingCallbacks 1666 /// <param name="actions">Actions to execute</param>
1384 { 1667 public int Choice(IEnumerable<Action> actions)
1385 get 1668 {
1386 { 1669 WIGStartInfo wigStartInfo = new WIGStartInfo { StartSuspended = true };
1387 ValidateNotDisposed(); 1670 IWorkItemsGroup workItemsGroup = CreateWorkItemsGroup(int.MaxValue, wigStartInfo);
1388 return _workItemsQueue.Count;
1389 }
1390 }
1391 1671
1672 ManualResetEvent anActionCompleted = new ManualResetEvent(false);
1392 1673
1393 public event EventHandler Idle 1674 ChoiceIndex choiceIndex = new ChoiceIndex();
1394 { 1675
1395 add 1676 int i = 0;
1677 foreach (Action action in actions)
1396 { 1678 {
1397 _stpIdle += value; 1679 Action act = action;
1680 int value = i;
1681 workItemsGroup.QueueWorkItem(() => { act(); Interlocked.CompareExchange(ref choiceIndex._index, value, -1); anActionCompleted.Set(); });
1682 ++i;
1398 } 1683 }
1684 workItemsGroup.Start();
1685 anActionCompleted.WaitOne();
1399 1686
1400 remove 1687 return choiceIndex._index;
1401 {
1402 _stpIdle -= value;
1403 }
1404 } 1688 }
1405 1689
1406 #endregion 1690 /// <summary>
1407 1691 /// Executes all actions in parallel
1408 #region IDisposable Members 1692 /// Returns when the first one completes
1409 1693 /// </summary>
1410// ~SmartThreadPool() 1694 /// <param name="actions">Actions to execute</param>
1411// { 1695 public int Choice(params Action[] actions)
1412// Dispose(); 1696 {
1413// } 1697 return Choice((IEnumerable<Action>)actions);
1698 }
1414 1699
1415 public void Dispose() 1700 /// <summary>
1701 /// Executes actions in sequence asynchronously.
1702 /// Returns immediately.
1703 /// </summary>
1704 /// <param name="pipeState">A state context that passes </param>
1705 /// <param name="actions">Actions to execute in the order they should run</param>
1706 public void Pipe<T>(T pipeState, IEnumerable<Action<T>> actions)
1416 { 1707 {
1417 if (!_isDisposed) 1708 WIGStartInfo wigStartInfo = new WIGStartInfo { StartSuspended = true };
1709 IWorkItemsGroup workItemsGroup = CreateWorkItemsGroup(1, wigStartInfo);
1710 foreach (Action<T> action in actions)
1418 { 1711 {
1419 if (!_shutdown) 1712 Action<T> act = action;
1420 { 1713 workItemsGroup.QueueWorkItem(() => act(pipeState));
1421 Shutdown();
1422 }
1423
1424 if (null != _shuttingDownEvent)
1425 {
1426 _shuttingDownEvent.Close();
1427 _shuttingDownEvent = null;
1428 }
1429 _workerThreads.Clear();
1430 _isDisposed = true;
1431 GC.SuppressFinalize(this);
1432 } 1714 }
1715 workItemsGroup.Start();
1716 workItemsGroup.WaitForIdle();
1433 } 1717 }
1434 1718
1435 private void ValidateNotDisposed() 1719 /// <summary>
1720 /// Executes actions in sequence asynchronously.
1721 /// Returns immediately.
1722 /// </summary>
1723 /// <param name="pipeState"></param>
1724 /// <param name="actions">Actions to execute in the order they should run</param>
1725 public void Pipe<T>(T pipeState, params Action<T>[] actions)
1436 { 1726 {
1437 if(_isDisposed) 1727 Pipe(pipeState, (IEnumerable<Action<T>>)actions);
1438 {
1439 throw new ObjectDisposedException(GetType().ToString(), "The SmartThreadPool has been shutdown");
1440 }
1441 } 1728 }
1442 #endregion 1729 #endregion
1443 } 1730 }
1444 #endregion 1731 #endregion
1445} 1732}
diff --git a/ThirdParty/SmartThreadPool/SynchronizedDictionary.cs b/ThirdParty/SmartThreadPool/SynchronizedDictionary.cs
new file mode 100644
index 0000000..0cce19f
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/SynchronizedDictionary.cs
@@ -0,0 +1,89 @@
1using System.Collections.Generic;
2
3namespace Amib.Threading.Internal
4{
5 internal class SynchronizedDictionary<TKey, TValue>
6 {
7 private readonly Dictionary<TKey, TValue> _dictionary;
8 private readonly object _lock;
9
10 public SynchronizedDictionary()
11 {
12 _lock = new object();
13 _dictionary = new Dictionary<TKey, TValue>();
14 }
15
16 public int Count
17 {
18 get { return _dictionary.Count; }
19 }
20
21 public bool Contains(TKey key)
22 {
23 lock (_lock)
24 {
25 return _dictionary.ContainsKey(key);
26 }
27 }
28
29 public void Remove(TKey key)
30 {
31 lock (_lock)
32 {
33 _dictionary.Remove(key);
34 }
35 }
36
37 public object SyncRoot
38 {
39 get { return _lock; }
40 }
41
42 public TValue this[TKey key]
43 {
44 get
45 {
46 lock (_lock)
47 {
48 return _dictionary[key];
49 }
50 }
51 set
52 {
53 lock (_lock)
54 {
55 _dictionary[key] = value;
56 }
57 }
58 }
59
60 public Dictionary<TKey, TValue>.KeyCollection Keys
61 {
62 get
63 {
64 lock (_lock)
65 {
66 return _dictionary.Keys;
67 }
68 }
69 }
70
71 public Dictionary<TKey, TValue>.ValueCollection Values
72 {
73 get
74 {
75 lock (_lock)
76 {
77 return _dictionary.Values;
78 }
79 }
80 }
81 public void Clear()
82 {
83 lock (_lock)
84 {
85 _dictionary.Clear();
86 }
87 }
88 }
89}
diff --git a/ThirdParty/SmartThreadPool/WIGStartInfo.cs b/ThirdParty/SmartThreadPool/WIGStartInfo.cs
index 150317f..8af195b 100644
--- a/ThirdParty/SmartThreadPool/WIGStartInfo.cs
+++ b/ThirdParty/SmartThreadPool/WIGStartInfo.cs
@@ -1,99 +1,171 @@
1// Ami Bar 1using System;
2// amibar@gmail.com
3 2
4namespace Amib.Threading 3namespace Amib.Threading
5{ 4{
6 /// <summary> 5 /// <summary>
7 /// Summary description for WIGStartInfo. 6 /// Summary description for WIGStartInfo.
8 /// </summary> 7 /// </summary>
9 public class WIGStartInfo 8 public class WIGStartInfo
10 { 9 {
11 /// <summary>
12 /// Use the caller's security context
13 /// </summary>
14 private bool _useCallerCallContext; 10 private bool _useCallerCallContext;
15
16 /// <summary>
17 /// Use the caller's HTTP context
18 /// </summary>
19 private bool _useCallerHttpContext; 11 private bool _useCallerHttpContext;
20
21 /// <summary>
22 /// Dispose of the state object of a work item
23 /// </summary>
24 private bool _disposeOfStateObjects; 12 private bool _disposeOfStateObjects;
25
26 /// <summary>
27 /// The option to run the post execute
28 /// </summary>
29 private CallToPostExecute _callToPostExecute; 13 private CallToPostExecute _callToPostExecute;
30
31 /// <summary>
32 /// A post execute callback to call when none is provided in
33 /// the QueueWorkItem method.
34 /// </summary>
35 private PostExecuteWorkItemCallback _postExecuteWorkItemCallback; 14 private PostExecuteWorkItemCallback _postExecuteWorkItemCallback;
36
37 /// <summary>
38 /// Indicate the WorkItemsGroup to suspend the handling of the work items
39 /// until the Start() method is called.
40 /// </summary>
41 private bool _startSuspended; 15 private bool _startSuspended;
16 private WorkItemPriority _workItemPriority;
17 private bool _fillStateWithArgs;
42 18
43 public WIGStartInfo() 19 protected bool _readOnly;
20
21 public WIGStartInfo()
44 { 22 {
45 _useCallerCallContext = SmartThreadPool.DefaultUseCallerCallContext; 23 _fillStateWithArgs = SmartThreadPool.DefaultFillStateWithArgs;
46 _useCallerHttpContext = SmartThreadPool.DefaultUseCallerHttpContext; 24 _workItemPriority = SmartThreadPool.DefaultWorkItemPriority;
47 _disposeOfStateObjects = SmartThreadPool.DefaultDisposeOfStateObjects;
48 _callToPostExecute = SmartThreadPool.DefaultCallToPostExecute;
49 _postExecuteWorkItemCallback = SmartThreadPool.DefaultPostExecuteWorkItemCallback;
50 _startSuspended = SmartThreadPool.DefaultStartSuspended; 25 _startSuspended = SmartThreadPool.DefaultStartSuspended;
26 _postExecuteWorkItemCallback = SmartThreadPool.DefaultPostExecuteWorkItemCallback;
27 _callToPostExecute = SmartThreadPool.DefaultCallToPostExecute;
28 _disposeOfStateObjects = SmartThreadPool.DefaultDisposeOfStateObjects;
29 _useCallerHttpContext = SmartThreadPool.DefaultUseCallerHttpContext;
30 _useCallerCallContext = SmartThreadPool.DefaultUseCallerCallContext;
51 } 31 }
52 32
53 public WIGStartInfo(WIGStartInfo wigStartInfo) 33 public WIGStartInfo(WIGStartInfo wigStartInfo)
54 { 34 {
55 _useCallerCallContext = wigStartInfo._useCallerCallContext; 35 _useCallerCallContext = wigStartInfo.UseCallerCallContext;
56 _useCallerHttpContext = wigStartInfo._useCallerHttpContext; 36 _useCallerHttpContext = wigStartInfo.UseCallerHttpContext;
57 _disposeOfStateObjects = wigStartInfo._disposeOfStateObjects; 37 _disposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
58 _callToPostExecute = wigStartInfo._callToPostExecute; 38 _callToPostExecute = wigStartInfo.CallToPostExecute;
59 _postExecuteWorkItemCallback = wigStartInfo._postExecuteWorkItemCallback; 39 _postExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
60 _startSuspended = wigStartInfo._startSuspended; 40 _workItemPriority = wigStartInfo.WorkItemPriority;
41 _startSuspended = wigStartInfo.StartSuspended;
42 _fillStateWithArgs = wigStartInfo.FillStateWithArgs;
61 } 43 }
62 44
63 public bool UseCallerCallContext 45 protected void ThrowIfReadOnly()
64 { 46 {
65 get { return _useCallerCallContext; } 47 if (_readOnly)
66 set { _useCallerCallContext = value; } 48 {
49 throw new NotSupportedException("This is a readonly instance and set is not supported");
50 }
67 } 51 }
68 52
69 public bool UseCallerHttpContext 53 /// <summary>
70 { 54 /// Get/Set if to use the caller's security context
71 get { return _useCallerHttpContext; } 55 /// </summary>
72 set { _useCallerHttpContext = value; } 56 public virtual bool UseCallerCallContext
73 } 57 {
58 get { return _useCallerCallContext; }
59 set
60 {
61 ThrowIfReadOnly();
62 _useCallerCallContext = value;
63 }
64 }
74 65
75 public bool DisposeOfStateObjects
76 {
77 get { return _disposeOfStateObjects; }
78 set { _disposeOfStateObjects = value; }
79 }
80 66
81 public CallToPostExecute CallToPostExecute 67 /// <summary>
82 { 68 /// Get/Set if to use the caller's HTTP context
83 get { return _callToPostExecute; } 69 /// </summary>
84 set { _callToPostExecute = value; } 70 public virtual bool UseCallerHttpContext
85 } 71 {
72 get { return _useCallerHttpContext; }
73 set
74 {
75 ThrowIfReadOnly();
76 _useCallerHttpContext = value;
77 }
78 }
86 79
87 public PostExecuteWorkItemCallback PostExecuteWorkItemCallback
88 {
89 get { return _postExecuteWorkItemCallback; }
90 set { _postExecuteWorkItemCallback = value; }
91 }
92 80
93 public bool StartSuspended 81 /// <summary>
94 { 82 /// Get/Set if to dispose of the state object of a work item
95 get { return _startSuspended; } 83 /// </summary>
96 set { _startSuspended = value; } 84 public virtual bool DisposeOfStateObjects
97 } 85 {
86 get { return _disposeOfStateObjects; }
87 set
88 {
89 ThrowIfReadOnly();
90 _disposeOfStateObjects = value;
91 }
92 }
93
94
95 /// <summary>
96 /// Get/Set the run the post execute options
97 /// </summary>
98 public virtual CallToPostExecute CallToPostExecute
99 {
100 get { return _callToPostExecute; }
101 set
102 {
103 ThrowIfReadOnly();
104 _callToPostExecute = value;
105 }
106 }
107
108
109 /// <summary>
110 /// Get/Set the default post execute callback
111 /// </summary>
112 public virtual PostExecuteWorkItemCallback PostExecuteWorkItemCallback
113 {
114 get { return _postExecuteWorkItemCallback; }
115 set
116 {
117 ThrowIfReadOnly();
118 _postExecuteWorkItemCallback = value;
119 }
120 }
121
122
123 /// <summary>
124 /// Get/Set if the work items execution should be suspended until the Start()
125 /// method is called.
126 /// </summary>
127 public virtual bool StartSuspended
128 {
129 get { return _startSuspended; }
130 set
131 {
132 ThrowIfReadOnly();
133 _startSuspended = value;
134 }
135 }
136
137
138 /// <summary>
139 /// Get/Set the default priority that a work item gets when it is enqueued
140 /// </summary>
141 public virtual WorkItemPriority WorkItemPriority
142 {
143 get { return _workItemPriority; }
144 set { _workItemPriority = value; }
145 }
146
147 /// <summary>
148 /// Get/Set the if QueueWorkItem of Action&lt;...&gt;/Func&lt;...&gt; fill the
149 /// arguments as an object array into the state of the work item.
150 /// The arguments can be access later by IWorkItemResult.State.
151 /// </summary>
152 public virtual bool FillStateWithArgs
153 {
154 get { return _fillStateWithArgs; }
155 set
156 {
157 ThrowIfReadOnly();
158 _fillStateWithArgs = value;
159 }
160 }
161
162 /// <summary>
163 /// Get a readonly version of this WIGStartInfo
164 /// </summary>
165 /// <returns>Returns a readonly reference to this WIGStartInfoRO</returns>
166 public WIGStartInfo AsReadOnly()
167 {
168 return new WIGStartInfo(this) { _readOnly = true };
169 }
98 } 170 }
99} 171}
diff --git a/ThirdParty/SmartThreadPool/WorkItem.WorkItemResult.cs b/ThirdParty/SmartThreadPool/WorkItem.WorkItemResult.cs
new file mode 100644
index 0000000..435a14b
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/WorkItem.WorkItemResult.cs
@@ -0,0 +1,190 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Threading;
5
6namespace Amib.Threading.Internal
7{
8 public partial class WorkItem
9 {
10 #region WorkItemResult class
11
12 private class WorkItemResult : IWorkItemResult, IInternalWorkItemResult, IInternalWaitableResult
13 {
14 /// <summary>
15 /// A back reference to the work item
16 /// </summary>
17 private readonly WorkItem _workItem;
18
19 public WorkItemResult(WorkItem workItem)
20 {
21 _workItem = workItem;
22 }
23
24 internal WorkItem GetWorkItem()
25 {
26 return _workItem;
27 }
28
29 #region IWorkItemResult Members
30
31 public bool IsCompleted
32 {
33 get
34 {
35 return _workItem.IsCompleted;
36 }
37 }
38
39 public bool IsCanceled
40 {
41 get
42 {
43 return _workItem.IsCanceled;
44 }
45 }
46
47 public object GetResult()
48 {
49 return _workItem.GetResult(Timeout.Infinite, true, null);
50 }
51
52 public object GetResult(int millisecondsTimeout, bool exitContext)
53 {
54 return _workItem.GetResult(millisecondsTimeout, exitContext, null);
55 }
56
57 public object GetResult(TimeSpan timeout, bool exitContext)
58 {
59 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null);
60 }
61
62 public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle)
63 {
64 return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle);
65 }
66
67 public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle)
68 {
69 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle);
70 }
71
72 public object GetResult(out Exception e)
73 {
74 return _workItem.GetResult(Timeout.Infinite, true, null, out e);
75 }
76
77 public object GetResult(int millisecondsTimeout, bool exitContext, out Exception e)
78 {
79 return _workItem.GetResult(millisecondsTimeout, exitContext, null, out e);
80 }
81
82 public object GetResult(TimeSpan timeout, bool exitContext, out Exception e)
83 {
84 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null, out e);
85 }
86
87 public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
88 {
89 return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e);
90 }
91
92 public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
93 {
94 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle, out e);
95 }
96
97 public bool Cancel()
98 {
99 return Cancel(false);
100 }
101
102 public bool Cancel(bool abortExecution)
103 {
104 return _workItem.Cancel(abortExecution);
105 }
106
107 public object State
108 {
109 get
110 {
111 return _workItem._state;
112 }
113 }
114
115 public WorkItemPriority WorkItemPriority
116 {
117 get
118 {
119 return _workItem._workItemInfo.WorkItemPriority;
120 }
121 }
122
123 /// <summary>
124 /// Return the result, same as GetResult()
125 /// </summary>
126 public object Result
127 {
128 get { return GetResult(); }
129 }
130
131 /// <summary>
132 /// Returns the exception if occured otherwise returns null.
133 /// This value is valid only after the work item completed,
134 /// before that it is always null.
135 /// </summary>
136 public object Exception
137 {
138 get { return _workItem._exception; }
139 }
140
141 #endregion
142
143 #region IInternalWorkItemResult Members
144
145 public event WorkItemStateCallback OnWorkItemStarted
146 {
147 add
148 {
149 _workItem.OnWorkItemStarted += value;
150 }
151 remove
152 {
153 _workItem.OnWorkItemStarted -= value;
154 }
155 }
156
157
158 public event WorkItemStateCallback OnWorkItemCompleted
159 {
160 add
161 {
162 _workItem.OnWorkItemCompleted += value;
163 }
164 remove
165 {
166 _workItem.OnWorkItemCompleted -= value;
167 }
168 }
169
170 #endregion
171
172 #region IInternalWorkItemResult Members
173
174 public IWorkItemResult GetWorkItemResult()
175 {
176 return this;
177 }
178
179 public IWorkItemResult<TResult> GetWorkItemResultT<TResult>()
180 {
181 return new WorkItemResultTWrapper<TResult>(this);
182 }
183
184 #endregion
185 }
186
187 #endregion
188
189 }
190}
diff --git a/ThirdParty/SmartThreadPool/WorkItem.cs b/ThirdParty/SmartThreadPool/WorkItem.cs
index d0c0524..185f10c 100644
--- a/ThirdParty/SmartThreadPool/WorkItem.cs
+++ b/ThirdParty/SmartThreadPool/WorkItem.cs
@@ -1,58 +1,13 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
5using System.Threading; 2using System.Threading;
6using System.Diagnostics; 3using System.Diagnostics;
7 4
8namespace Amib.Threading.Internal 5namespace Amib.Threading.Internal
9{ 6{
10 #region WorkItem Delegate
11
12 /// <summary>
13 /// An internal delegate to call when the WorkItem starts or completes
14 /// </summary>
15 internal delegate void WorkItemStateCallback(WorkItem workItem);
16
17 #endregion
18
19 #region IInternalWorkItemResult interface
20
21 public class CanceledWorkItemsGroup
22 {
23 public readonly static CanceledWorkItemsGroup NotCanceledWorkItemsGroup = new CanceledWorkItemsGroup();
24
25 private bool _isCanceled = false;
26 public bool IsCanceled
27 {
28 get { return _isCanceled; }
29 set { _isCanceled = value; }
30 }
31 }
32
33 internal interface IInternalWorkItemResult
34 {
35 event WorkItemStateCallback OnWorkItemStarted;
36 event WorkItemStateCallback OnWorkItemCompleted;
37 }
38
39 #endregion
40
41 #region IWorkItem interface
42
43 public interface IWorkItem
44 {
45
46 }
47
48 #endregion
49
50 #region WorkItem class
51
52 /// <summary> 7 /// <summary>
53 /// Holds a callback delegate and the state for that delegate. 8 /// Holds a callback delegate and the state for that delegate.
54 /// </summary> 9 /// </summary>
55 public class WorkItem : IHasWorkItemPriority, IWorkItem 10 public partial class WorkItem : IHasWorkItemPriority
56 { 11 {
57 #region WorkItemState enum 12 #region WorkItemState enum
58 13
@@ -61,33 +16,57 @@ namespace Amib.Threading.Internal
61 /// </summary> 16 /// </summary>
62 private enum WorkItemState 17 private enum WorkItemState
63 { 18 {
64 InQueue, 19 InQueue = 0, // Nexts: InProgress, Canceled
65 InProgress, 20 InProgress = 1, // Nexts: Completed, Canceled
66 Completed, 21 Completed = 2, // Stays Completed
67 Canceled, 22 Canceled = 3, // Stays Canceled
68 } 23 }
69 24
70 #endregion 25 private static bool IsValidStatesTransition(WorkItemState currentState, WorkItemState nextState)
26 {
27 bool valid = false;
28
29 switch (currentState)
30 {
31 case WorkItemState.InQueue:
32 valid = (WorkItemState.InProgress == nextState) || (WorkItemState.Canceled == nextState);
33 break;
34 case WorkItemState.InProgress:
35 valid = (WorkItemState.Completed == nextState) || (WorkItemState.Canceled == nextState);
36 break;
37 case WorkItemState.Completed:
38 case WorkItemState.Canceled:
39 // Cannot be changed
40 break;
41 default:
42 // Unknown state
43 Debug.Assert(false);
44 break;
45 }
71 46
72 #region Member Variables 47 return valid;
48 }
73 49
74 public Thread currentThread; 50 #endregion
51
52 #region Fields
75 53
76 /// <summary> 54 /// <summary>
77 /// Callback delegate for the callback. 55 /// Callback delegate for the callback.
78 /// </summary> 56 /// </summary>
79 private WorkItemCallback _callback; 57 private readonly WorkItemCallback _callback;
80 58
81 /// <summary> 59 /// <summary>
82 /// State with which to call the callback delegate. 60 /// State with which to call the callback delegate.
83 /// </summary> 61 /// </summary>
84 private object _state; 62 private object _state;
85 63
64#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
86 /// <summary> 65 /// <summary>
87 /// Stores the caller's context 66 /// Stores the caller's context
88 /// </summary> 67 /// </summary>
89 private CallerThreadContext _callerContext; 68 private readonly CallerThreadContext _callerContext;
90 69#endif
91 /// <summary> 70 /// <summary>
92 /// Holds the result of the mehtod 71 /// Holds the result of the mehtod
93 /// </summary> 72 /// </summary>
@@ -117,12 +96,12 @@ namespace Amib.Threading.Internal
117 /// <summary> 96 /// <summary>
118 /// Represents the result state of the work item 97 /// Represents the result state of the work item
119 /// </summary> 98 /// </summary>
120 private WorkItemResult _workItemResult; 99 private readonly WorkItemResult _workItemResult;
121 100
122 /// <summary> 101 /// <summary>
123 /// Work item info 102 /// Work item info
124 /// </summary> 103 /// </summary>
125 private WorkItemInfo _workItemInfo; 104 private readonly WorkItemInfo _workItemInfo;
126 105
127 /// <summary> 106 /// <summary>
128 /// Called when the WorkItem starts 107 /// Called when the WorkItem starts
@@ -141,30 +120,41 @@ namespace Amib.Threading.Internal
141 private CanceledWorkItemsGroup _canceledWorkItemsGroup = CanceledWorkItemsGroup.NotCanceledWorkItemsGroup; 120 private CanceledWorkItemsGroup _canceledWorkItemsGroup = CanceledWorkItemsGroup.NotCanceledWorkItemsGroup;
142 121
143 /// <summary> 122 /// <summary>
123 /// A reference to an object that indicates whatever the
124 /// SmartThreadPool has been canceled
125 /// </summary>
126 private CanceledWorkItemsGroup _canceledSmartThreadPool = CanceledWorkItemsGroup.NotCanceledWorkItemsGroup;
127
128 /// <summary>
144 /// The work item group this work item belong to. 129 /// The work item group this work item belong to.
145 ///
146 /// </summary> 130 /// </summary>
147 private IWorkItemsGroup _workItemsGroup; 131 private readonly IWorkItemsGroup _workItemsGroup;
148 132
149 #region Performance Counter fields 133 /// <summary>
134 /// The thread that executes this workitem.
135 /// This field is available for the period when the work item is executed, before and after it is null.
136 /// </summary>
137 private Thread _executingThread;
150 138
151 /// <summary> 139 /// <summary>
152 /// The time when the work items is queued. 140 /// The absulote time when the work item will be timeout
153 /// Used with the performance counter.
154 /// </summary> 141 /// </summary>
155 private DateTime _queuedTime; 142 private long _expirationTime;
143
144 #region Performance Counter fields
145
146
147
156 148
157 /// <summary> 149 /// <summary>
158 /// The time when the work items starts its execution. 150 /// Stores how long the work item waited on the stp queue
159 /// Used with the performance counter.
160 /// </summary> 151 /// </summary>
161 private DateTime _beginProcessTime; 152 private Stopwatch _waitingOnQueueStopwatch;
162 153
163 /// <summary> 154 /// <summary>
164 /// The time when the work items ends its execution. 155 /// Stores how much time it took the work item to execute after it went out of the queue
165 /// Used with the performance counter.
166 /// </summary> 156 /// </summary>
167 private DateTime _endProcessTime; 157 private Stopwatch _processingStopwatch;
168 158
169 #endregion 159 #endregion
170 160
@@ -174,17 +164,25 @@ namespace Amib.Threading.Internal
174 164
175 public TimeSpan WaitingTime 165 public TimeSpan WaitingTime
176 { 166 {
177 get 167 get
178 { 168 {
179 return (_beginProcessTime - _queuedTime); 169 return _waitingOnQueueStopwatch.Elapsed;
180 } 170 }
181 } 171 }
182 172
183 public TimeSpan ProcessTime 173 public TimeSpan ProcessTime
184 { 174 {
185 get 175 get
176 {
177 return _processingStopwatch.Elapsed;
178 }
179 }
180
181 internal WorkItemInfo WorkItemInfo
182 {
183 get
186 { 184 {
187 return (_endProcessTime - _beginProcessTime); 185 return _workItemInfo;
188 } 186 }
189 } 187 }
190 188
@@ -195,6 +193,8 @@ namespace Amib.Threading.Internal
195 /// <summary> 193 /// <summary>
196 /// Initialize the callback holding object. 194 /// Initialize the callback holding object.
197 /// </summary> 195 /// </summary>
196 /// <param name="workItemsGroup">The workItemGroup of the workitem</param>
197 /// <param name="workItemInfo">The WorkItemInfo of te workitem</param>
198 /// <param name="callback">Callback delegate for the callback.</param> 198 /// <param name="callback">Callback delegate for the callback.</param>
199 /// <param name="state">State with which to call the callback delegate.</param> 199 /// <param name="state">State with which to call the callback delegate.</param>
200 /// 200 ///
@@ -203,16 +203,18 @@ namespace Amib.Threading.Internal
203 public WorkItem( 203 public WorkItem(
204 IWorkItemsGroup workItemsGroup, 204 IWorkItemsGroup workItemsGroup,
205 WorkItemInfo workItemInfo, 205 WorkItemInfo workItemInfo,
206 WorkItemCallback callback, 206 WorkItemCallback callback,
207 object state) 207 object state)
208 { 208 {
209 _workItemsGroup = workItemsGroup; 209 _workItemsGroup = workItemsGroup;
210 _workItemInfo = workItemInfo; 210 _workItemInfo = workItemInfo;
211 211
212#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
212 if (_workItemInfo.UseCallerCallContext || _workItemInfo.UseCallerHttpContext) 213 if (_workItemInfo.UseCallerCallContext || _workItemInfo.UseCallerHttpContext)
213 { 214 {
214 _callerContext = CallerThreadContext.Capture(_workItemInfo.UseCallerCallContext, _workItemInfo.UseCallerHttpContext); 215 _callerContext = CallerThreadContext.Capture(_workItemInfo.UseCallerCallContext, _workItemInfo.UseCallerHttpContext);
215 } 216 }
217#endif
216 218
217 _callback = callback; 219 _callback = callback;
218 _state = state; 220 _state = state;
@@ -222,9 +224,18 @@ namespace Amib.Threading.Internal
222 224
223 internal void Initialize() 225 internal void Initialize()
224 { 226 {
227 // The _workItemState is changed directly instead of using the SetWorkItemState
228 // method since we don't want to go throught IsValidStateTransition.
225 _workItemState = WorkItemState.InQueue; 229 _workItemState = WorkItemState.InQueue;
230
226 _workItemCompleted = null; 231 _workItemCompleted = null;
227 _workItemCompletedRefCount = 0; 232 _workItemCompletedRefCount = 0;
233 _waitingOnQueueStopwatch = new Stopwatch();
234 _processingStopwatch = new Stopwatch();
235 _expirationTime =
236 _workItemInfo.Timeout > 0 ?
237 DateTime.UtcNow.Ticks + _workItemInfo.Timeout * TimeSpan.TicksPerMillisecond :
238 long.MaxValue;
228 } 239 }
229 240
230 internal bool WasQueuedBy(IWorkItemsGroup workItemsGroup) 241 internal bool WasQueuedBy(IWorkItemsGroup workItemsGroup)
@@ -237,17 +248,16 @@ namespace Amib.Threading.Internal
237 248
238 #region Methods 249 #region Methods
239 250
240 public CanceledWorkItemsGroup CanceledWorkItemsGroup 251 internal CanceledWorkItemsGroup CanceledWorkItemsGroup
241 { 252 {
242 get 253 get { return _canceledWorkItemsGroup; }
243 { 254 set { _canceledWorkItemsGroup = value; }
244 return _canceledWorkItemsGroup; 255 }
245 }
246 256
247 set 257 internal CanceledWorkItemsGroup CanceledSmartThreadPool
248 { 258 {
249 _canceledWorkItemsGroup = value; 259 get { return _canceledSmartThreadPool; }
250 } 260 set { _canceledSmartThreadPool = value; }
251 } 261 }
252 262
253 /// <summary> 263 /// <summary>
@@ -259,9 +269,10 @@ namespace Amib.Threading.Internal
259 /// </returns> 269 /// </returns>
260 public bool StartingWorkItem() 270 public bool StartingWorkItem()
261 { 271 {
262 _beginProcessTime = DateTime.Now; 272 _waitingOnQueueStopwatch.Stop();
273 _processingStopwatch.Start();
263 274
264 lock(this) 275 lock (this)
265 { 276 {
266 if (IsCanceled) 277 if (IsCanceled)
267 { 278 {
@@ -277,6 +288,9 @@ namespace Amib.Threading.Internal
277 288
278 Debug.Assert(WorkItemState.InQueue == GetWorkItemState()); 289 Debug.Assert(WorkItemState.InQueue == GetWorkItemState());
279 290
291 // No need for a lock yet, only after the state has changed to InProgress
292 _executingThread = Thread.CurrentThread;
293
280 SetWorkItemState(WorkItemState.InProgress); 294 SetWorkItemState(WorkItemState.InProgress);
281 } 295 }
282 296
@@ -291,7 +305,7 @@ namespace Amib.Threading.Internal
291 CallToPostExecute currentCallToPostExecute = 0; 305 CallToPostExecute currentCallToPostExecute = 0;
292 306
293 // Execute the work item if we are in the correct state 307 // Execute the work item if we are in the correct state
294 switch(GetWorkItemState()) 308 switch (GetWorkItemState())
295 { 309 {
296 case WorkItemState.InProgress: 310 case WorkItemState.InProgress:
297 currentCallToPostExecute |= CallToPostExecute.WhenWorkItemNotCanceled; 311 currentCallToPostExecute |= CallToPostExecute.WhenWorkItemNotCanceled;
@@ -311,7 +325,7 @@ namespace Amib.Threading.Internal
311 PostExecute(); 325 PostExecute();
312 } 326 }
313 327
314 _endProcessTime = DateTime.Now; 328 _processingStopwatch.Stop();
315 } 329 }
316 330
317 internal void FireWorkItemCompleted() 331 internal void FireWorkItemCompleted()
@@ -323,8 +337,21 @@ namespace Amib.Threading.Internal
323 _workItemCompletedEvent(this); 337 _workItemCompletedEvent(this);
324 } 338 }
325 } 339 }
326 catch // Ignore exceptions 340 catch // Suppress exceptions
327 {} 341 { }
342 }
343
344 internal void FireWorkItemStarted()
345 {
346 try
347 {
348 if (null != _workItemStartedEvent)
349 {
350 _workItemStartedEvent(this);
351 }
352 }
353 catch // Suppress exceptions
354 { }
328 } 355 }
329 356
330 /// <summary> 357 /// <summary>
@@ -332,32 +359,70 @@ namespace Amib.Threading.Internal
332 /// </summary> 359 /// </summary>
333 private void ExecuteWorkItem() 360 private void ExecuteWorkItem()
334 { 361 {
362
363#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
335 CallerThreadContext ctc = null; 364 CallerThreadContext ctc = null;
336 if (null != _callerContext) 365 if (null != _callerContext)
337 { 366 {
338 ctc = CallerThreadContext.Capture(_callerContext.CapturedCallContext, _callerContext.CapturedHttpContext); 367 ctc = CallerThreadContext.Capture(_callerContext.CapturedCallContext, _callerContext.CapturedHttpContext);
339 CallerThreadContext.Apply(_callerContext); 368 CallerThreadContext.Apply(_callerContext);
340 } 369 }
370#endif
341 371
342 Exception exception = null; 372 Exception exception = null;
343 object result = null; 373 object result = null;
344 374
345 try 375 try
346 { 376 {
347 result = _callback(_state); 377 try
378 {
379 result = _callback(_state);
380 }
381 catch (Exception e)
382 {
383 // Save the exception so we can rethrow it later
384 exception = e;
385 }
386
387 // Remove the value of the execution thread, so it will be impossible to cancel the work item,
388 // since it is already completed.
389 // Cancelling a work item that already completed may cause the abortion of the next work item!!!
390 Thread executionThread = Interlocked.CompareExchange(ref _executingThread, null, _executingThread);
391
392 if (null == executionThread)
393 {
394 // Oops! we are going to be aborted..., Wait here so we can catch the ThreadAbortException
395 Thread.Sleep(60 * 1000);
396
397 // If after 1 minute this thread was not aborted then let it continue working.
398 }
348 } 399 }
349 catch (Exception e) 400 // We must treat the ThreadAbortException or else it will be stored in the exception variable
401 catch (ThreadAbortException tae)
350 { 402 {
351 // Save the exception so we can rethrow it later 403 tae.GetHashCode();
352 exception = e; 404 // Check if the work item was cancelled
405 // If we got a ThreadAbortException and the STP is not shutting down, it means the
406 // work items was cancelled.
407 if (!SmartThreadPool.CurrentThreadEntry.AssociatedSmartThreadPool.IsShuttingdown)
408 {
409#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
410 Thread.ResetAbort();
411#endif
412 }
353 } 413 }
354 414
415#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
355 if (null != _callerContext) 416 if (null != _callerContext)
356 { 417 {
357 CallerThreadContext.Apply(ctc); 418 CallerThreadContext.Apply(ctc);
358 } 419 }
420#endif
359 421
360 SetResult(result, exception); 422 if (!SmartThreadPool.IsWorkItemCanceled)
423 {
424 SetResult(result, exception);
425 }
361 } 426 }
362 427
363 /// <summary> 428 /// <summary>
@@ -369,9 +434,9 @@ namespace Amib.Threading.Internal
369 { 434 {
370 try 435 try
371 { 436 {
372 _workItemInfo.PostExecuteWorkItemCallback(this._workItemResult); 437 _workItemInfo.PostExecuteWorkItemCallback(_workItemResult);
373 } 438 }
374 catch (Exception e) 439 catch (Exception e)
375 { 440 {
376 Debug.Assert(null != e); 441 Debug.Assert(null != e);
377 } 442 }
@@ -382,6 +447,8 @@ namespace Amib.Threading.Internal
382 /// Set the result of the work item to return 447 /// Set the result of the work item to return
383 /// </summary> 448 /// </summary>
384 /// <param name="result">The result of the work item</param> 449 /// <param name="result">The result of the work item</param>
450 /// <param name="exception">The exception that was throw while the workitem executed, null
451 /// if there was no exception.</param>
385 internal void SetResult(object result, Exception exception) 452 internal void SetResult(object result, Exception exception)
386 { 453 {
387 _result = result; 454 _result = result;
@@ -401,48 +468,48 @@ namespace Amib.Threading.Internal
401 /// <summary> 468 /// <summary>
402 /// Wait for all work items to complete 469 /// Wait for all work items to complete
403 /// </summary> 470 /// </summary>
404 /// <param name="workItemResults">Array of work item result objects</param> 471 /// <param name="waitableResults">Array of work item result objects</param>
405 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param> 472 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
406 /// <param name="exitContext"> 473 /// <param name="exitContext">
407 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. 474 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
408 /// </param> 475 /// </param>
409 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param> 476 /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the wait if needed</param>
410 /// <returns> 477 /// <returns>
411 /// true when every work item in workItemResults has completed; otherwise false. 478 /// true when every work item in waitableResults has completed; otherwise false.
412 /// </returns> 479 /// </returns>
413 internal static bool WaitAll( 480 internal static bool WaitAll(
414 IWorkItemResult [] workItemResults, 481 IWaitableResult[] waitableResults,
415 int millisecondsTimeout, 482 int millisecondsTimeout,
416 bool exitContext, 483 bool exitContext,
417 WaitHandle cancelWaitHandle) 484 WaitHandle cancelWaitHandle)
418 { 485 {
419 if (0 == workItemResults.Length) 486 if (0 == waitableResults.Length)
420 { 487 {
421 return true; 488 return true;
422 } 489 }
423 490
424 bool success; 491 bool success;
425 WaitHandle [] waitHandles = new WaitHandle[workItemResults.Length];; 492 WaitHandle[] waitHandles = new WaitHandle[waitableResults.Length];
426 GetWaitHandles(workItemResults, waitHandles); 493 GetWaitHandles(waitableResults, waitHandles);
427 494
428 if ((null == cancelWaitHandle) && (waitHandles.Length <= 64)) 495 if ((null == cancelWaitHandle) && (waitHandles.Length <= 64))
429 { 496 {
430 success = WaitHandle.WaitAll(waitHandles, millisecondsTimeout, exitContext); 497 success = STPEventWaitHandle.WaitAll(waitHandles, millisecondsTimeout, exitContext);
431 } 498 }
432 else 499 else
433 { 500 {
434 success = true; 501 success = true;
435 int millisecondsLeft = millisecondsTimeout; 502 int millisecondsLeft = millisecondsTimeout;
436 DateTime start = DateTime.Now; 503 Stopwatch stopwatch = Stopwatch.StartNew();
437 504
438 WaitHandle [] whs; 505 WaitHandle[] whs;
439 if (null != cancelWaitHandle) 506 if (null != cancelWaitHandle)
440 { 507 {
441 whs = new WaitHandle [] { null, cancelWaitHandle }; 508 whs = new WaitHandle[] { null, cancelWaitHandle };
442 } 509 }
443 else 510 else
444 { 511 {
445 whs = new WaitHandle [] { null }; 512 whs = new WaitHandle[] { null };
446 } 513 }
447 514
448 bool waitInfinitely = (Timeout.Infinite == millisecondsTimeout); 515 bool waitInfinitely = (Timeout.Infinite == millisecondsTimeout);
@@ -450,7 +517,7 @@ namespace Amib.Threading.Internal
450 // We cannot use WaitHandle.WaitAll directly, because the cancelWaitHandle 517 // We cannot use WaitHandle.WaitAll directly, because the cancelWaitHandle
451 // won't affect it. 518 // won't affect it.
452 // Each iteration we update the time left for the timeout. 519 // Each iteration we update the time left for the timeout.
453 for(int i = 0; i < workItemResults.Length; ++i) 520 for (int i = 0; i < waitableResults.Length; ++i)
454 { 521 {
455 // WaitAny don't work with negative numbers 522 // WaitAny don't work with negative numbers
456 if (!waitInfinitely && (millisecondsLeft < 0)) 523 if (!waitInfinitely && (millisecondsLeft < 0))
@@ -460,23 +527,22 @@ namespace Amib.Threading.Internal
460 } 527 }
461 528
462 whs[0] = waitHandles[i]; 529 whs[0] = waitHandles[i];
463 int result = WaitHandle.WaitAny(whs, millisecondsLeft, exitContext); 530 int result = STPEventWaitHandle.WaitAny(whs, millisecondsLeft, exitContext);
464 if((result > 0) || (WaitHandle.WaitTimeout == result)) 531 if ((result > 0) || (STPEventWaitHandle.WaitTimeout == result))
465 { 532 {
466 success = false; 533 success = false;
467 break; 534 break;
468 } 535 }
469 536
470 if(!waitInfinitely) 537 if (!waitInfinitely)
471 { 538 {
472 // Update the time left to wait 539 // Update the time left to wait
473 TimeSpan ts = DateTime.Now - start; 540 millisecondsLeft = millisecondsTimeout - (int)stopwatch.ElapsedMilliseconds;
474 millisecondsLeft = millisecondsTimeout - (int)ts.TotalMilliseconds;
475 } 541 }
476 } 542 }
477 } 543 }
478 // Release the wait handles 544 // Release the wait handles
479 ReleaseWaitHandles(workItemResults); 545 ReleaseWaitHandles(waitableResults);
480 546
481 return success; 547 return success;
482 } 548 }
@@ -484,7 +550,7 @@ namespace Amib.Threading.Internal
484 /// <summary> 550 /// <summary>
485 /// Waits for any of the work items in the specified array to complete, cancel, or timeout 551 /// Waits for any of the work items in the specified array to complete, cancel, or timeout
486 /// </summary> 552 /// </summary>
487 /// <param name="workItemResults">Array of work item result objects</param> 553 /// <param name="waitableResults">Array of work item result objects</param>
488 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param> 554 /// <param name="millisecondsTimeout">The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.</param>
489 /// <param name="exitContext"> 555 /// <param name="exitContext">
490 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. 556 /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false.
@@ -493,38 +559,38 @@ namespace Amib.Threading.Internal
493 /// <returns> 559 /// <returns>
494 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. 560 /// The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled.
495 /// </returns> 561 /// </returns>
496 internal static int WaitAny( 562 internal static int WaitAny(
497 IWorkItemResult [] workItemResults, 563 IWaitableResult[] waitableResults,
498 int millisecondsTimeout, 564 int millisecondsTimeout,
499 bool exitContext, 565 bool exitContext,
500 WaitHandle cancelWaitHandle) 566 WaitHandle cancelWaitHandle)
501 { 567 {
502 WaitHandle [] waitHandles = null; 568 WaitHandle[] waitHandles;
503 569
504 if (null != cancelWaitHandle) 570 if (null != cancelWaitHandle)
505 { 571 {
506 waitHandles = new WaitHandle[workItemResults.Length+1]; 572 waitHandles = new WaitHandle[waitableResults.Length + 1];
507 GetWaitHandles(workItemResults, waitHandles); 573 GetWaitHandles(waitableResults, waitHandles);
508 waitHandles[workItemResults.Length] = cancelWaitHandle; 574 waitHandles[waitableResults.Length] = cancelWaitHandle;
509 } 575 }
510 else 576 else
511 { 577 {
512 waitHandles = new WaitHandle[workItemResults.Length]; 578 waitHandles = new WaitHandle[waitableResults.Length];
513 GetWaitHandles(workItemResults, waitHandles); 579 GetWaitHandles(waitableResults, waitHandles);
514 } 580 }
515 581
516 int result = WaitHandle.WaitAny(waitHandles, millisecondsTimeout, exitContext); 582 int result = STPEventWaitHandle.WaitAny(waitHandles, millisecondsTimeout, exitContext);
517 583
518 // Treat cancel as timeout 584 // Treat cancel as timeout
519 if (null != cancelWaitHandle) 585 if (null != cancelWaitHandle)
520 { 586 {
521 if (result == workItemResults.Length) 587 if (result == waitableResults.Length)
522 { 588 {
523 result = WaitHandle.WaitTimeout; 589 result = STPEventWaitHandle.WaitTimeout;
524 } 590 }
525 } 591 }
526 592
527 ReleaseWaitHandles(workItemResults); 593 ReleaseWaitHandles(waitableResults);
528 594
529 return result; 595 return result;
530 } 596 }
@@ -532,16 +598,16 @@ namespace Amib.Threading.Internal
532 /// <summary> 598 /// <summary>
533 /// Fill an array of wait handles with the work items wait handles. 599 /// Fill an array of wait handles with the work items wait handles.
534 /// </summary> 600 /// </summary>
535 /// <param name="workItemResults">An array of work item results</param> 601 /// <param name="waitableResults">An array of work item results</param>
536 /// <param name="waitHandles">An array of wait handles to fill</param> 602 /// <param name="waitHandles">An array of wait handles to fill</param>
537 private static void GetWaitHandles( 603 private static void GetWaitHandles(
538 IWorkItemResult [] workItemResults, 604 IWaitableResult[] waitableResults,
539 WaitHandle [] waitHandles) 605 WaitHandle[] waitHandles)
540 { 606 {
541 for(int i = 0; i < workItemResults.Length; ++i) 607 for (int i = 0; i < waitableResults.Length; ++i)
542 { 608 {
543 WorkItemResult wir = workItemResults[i] as WorkItemResult; 609 WorkItemResult wir = waitableResults[i].GetWorkItemResult() as WorkItemResult;
544 Debug.Assert(null != wir, "All workItemResults must be WorkItemResult objects"); 610 Debug.Assert(null != wir, "All waitableResults must be WorkItemResult objects");
545 611
546 waitHandles[i] = wir.GetWorkItem().GetWaitHandle(); 612 waitHandles[i] = wir.GetWorkItem().GetWaitHandle();
547 } 613 }
@@ -550,40 +616,64 @@ namespace Amib.Threading.Internal
550 /// <summary> 616 /// <summary>
551 /// Release the work items' wait handles 617 /// Release the work items' wait handles
552 /// </summary> 618 /// </summary>
553 /// <param name="workItemResults">An array of work item results</param> 619 /// <param name="waitableResults">An array of work item results</param>
554 private static void ReleaseWaitHandles(IWorkItemResult [] workItemResults) 620 private static void ReleaseWaitHandles(IWaitableResult[] waitableResults)
555 { 621 {
556 for(int i = 0; i < workItemResults.Length; ++i) 622 for (int i = 0; i < waitableResults.Length; ++i)
557 { 623 {
558 WorkItemResult wir = workItemResults[i] as WorkItemResult; 624 WorkItemResult wir = (WorkItemResult)waitableResults[i].GetWorkItemResult();
559 625
560 wir.GetWorkItem().ReleaseWaitHandle(); 626 wir.GetWorkItem().ReleaseWaitHandle();
561 } 627 }
562 } 628 }
563 629
564
565 #endregion 630 #endregion
566 631
567 #region Private Members 632 #region Private Members
568 633
569 private WorkItemState GetWorkItemState() 634 private WorkItemState GetWorkItemState()
570 { 635 {
571 if (_canceledWorkItemsGroup.IsCanceled) 636 lock (this)
572 { 637 {
573 return WorkItemState.Canceled; 638 if (WorkItemState.Completed == _workItemState)
574 } 639 {
575 return _workItemState; 640 return _workItemState;
641 }
642
643 long nowTicks = DateTime.UtcNow.Ticks;
576 644
645 if (WorkItemState.Canceled != _workItemState && nowTicks > _expirationTime)
646 {
647 _workItemState = WorkItemState.Canceled;
648 }
649
650 if (WorkItemState.InProgress == _workItemState)
651 {
652 return _workItemState;
653 }
654
655 if (CanceledSmartThreadPool.IsCanceled || CanceledWorkItemsGroup.IsCanceled)
656 {
657 return WorkItemState.Canceled;
658 }
659
660 return _workItemState;
661 }
577 } 662 }
663
664
578 /// <summary> 665 /// <summary>
579 /// Sets the work item's state 666 /// Sets the work item's state
580 /// </summary> 667 /// </summary>
581 /// <param name="workItemState">The state to set the work item to</param> 668 /// <param name="workItemState">The state to set the work item to</param>
582 private void SetWorkItemState(WorkItemState workItemState) 669 private void SetWorkItemState(WorkItemState workItemState)
583 { 670 {
584 lock(this) 671 lock (this)
585 { 672 {
586 _workItemState = workItemState; 673 if (IsValidStatesTransition(_workItemState, workItemState))
674 {
675 _workItemState = workItemState;
676 }
587 } 677 }
588 } 678 }
589 679
@@ -594,7 +684,7 @@ namespace Amib.Threading.Internal
594 private void SignalComplete(bool canceled) 684 private void SignalComplete(bool canceled)
595 { 685 {
596 SetWorkItemState(canceled ? WorkItemState.Canceled : WorkItemState.Completed); 686 SetWorkItemState(canceled ? WorkItemState.Canceled : WorkItemState.Completed);
597 lock(this) 687 lock (this)
598 { 688 {
599 // If someone is waiting then signal. 689 // If someone is waiting then signal.
600 if (null != _workItemCompleted) 690 if (null != _workItemCompleted)
@@ -606,40 +696,93 @@ namespace Amib.Threading.Internal
606 696
607 internal void WorkItemIsQueued() 697 internal void WorkItemIsQueued()
608 { 698 {
609 _queuedTime = DateTime.Now; 699 _waitingOnQueueStopwatch.Start();
610 } 700 }
611 701
612 #endregion 702 #endregion
613 703
614 #region Members exposed by WorkItemResult 704 #region Members exposed by WorkItemResult
615 705
616 /// <summary> 706 /// <summary>
617 /// Cancel the work item if it didn't start running yet. 707 /// Cancel the work item if it didn't start running yet.
618 /// </summary> 708 /// </summary>
619 /// <returns>Returns true on success or false if the work item is in progress or already completed</returns> 709 /// <returns>Returns true on success or false if the work item is in progress or already completed</returns>
620 private bool Cancel() 710 private bool Cancel(bool abortExecution)
621 { 711 {
622 lock(this) 712#if (_WINDOWS_CE)
713 if(abortExecution)
714 {
715 throw new ArgumentOutOfRangeException("abortExecution", "WindowsCE doesn't support this feature");
716 }
717#endif
718 bool success = false;
719 bool signalComplete = false;
720
721 lock (this)
623 { 722 {
624 switch(GetWorkItemState()) 723 switch (GetWorkItemState())
625 { 724 {
626 case WorkItemState.Canceled: 725 case WorkItemState.Canceled:
627 //Debug.WriteLine("Work item already canceled"); 726 //Debug.WriteLine("Work item already canceled");
628 return true; 727 if (abortExecution)
728 {
729 Thread executionThread = Interlocked.CompareExchange(ref _executingThread, null, _executingThread);
730 if (null != executionThread)
731 {
732 executionThread.Abort(); // "Cancel"
733 // No need to signalComplete, because we already cancelled this work item
734 // so it already signaled its completion.
735 //signalComplete = true;
736 }
737 }
738 success = true;
739 break;
629 case WorkItemState.Completed: 740 case WorkItemState.Completed:
630 case WorkItemState.InProgress:
631 //Debug.WriteLine("Work item cannot be canceled"); 741 //Debug.WriteLine("Work item cannot be canceled");
632 return false; 742 break;
743 case WorkItemState.InProgress:
744 if (abortExecution)
745 {
746 Thread executionThread = Interlocked.CompareExchange(ref _executingThread, null, _executingThread);
747 if (null != executionThread)
748 {
749 executionThread.Abort(); // "Cancel"
750 success = true;
751 signalComplete = true;
752 }
753 }
754 else
755 {
756 // **************************
757 // Stock SmartThreadPool 2.2.3 sets these to true and relies on the thread to check the
758 // WorkItem cancellation status. However, OpenSimulator uses a different mechanism to notify
759 // scripts of co-operative termination and the abort code also relies on this method
760 // returning false in order to implement a small wait.
761 //
762 // Therefore, as was the case previously with STP, we will not signal successful cancellation
763 // here. It's possible that OpenSimulator code could be changed in the future to remove
764 // the need for this change.
765 // **************************
766 success = false;
767 signalComplete = false;
768 }
769 break;
633 case WorkItemState.InQueue: 770 case WorkItemState.InQueue:
634 // Signal to the wait for completion that the work 771 // Signal to the wait for completion that the work
635 // item has been completed (canceled). There is no 772 // item has been completed (canceled). There is no
636 // reason to wait for it to get out of the queue 773 // reason to wait for it to get out of the queue
637 SignalComplete(true); 774 signalComplete = true;
638 //Debug.WriteLine("Work item canceled"); 775 //Debug.WriteLine("Work item canceled");
639 return true; 776 success = true;
777 break;
778 }
779
780 if (signalComplete)
781 {
782 SignalComplete(true);
640 } 783 }
641 } 784 }
642 return false; 785 return success;
643 } 786 }
644 787
645 /// <summary> 788 /// <summary>
@@ -653,7 +796,7 @@ namespace Amib.Threading.Internal
653 bool exitContext, 796 bool exitContext,
654 WaitHandle cancelWaitHandle) 797 WaitHandle cancelWaitHandle)
655 { 798 {
656 Exception e = null; 799 Exception e;
657 object result = GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e); 800 object result = GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e);
658 if (null != e) 801 if (null != e)
659 { 802 {
@@ -694,7 +837,7 @@ namespace Amib.Threading.Internal
694 { 837 {
695 WaitHandle wh = GetWaitHandle(); 838 WaitHandle wh = GetWaitHandle();
696 839
697 bool timeout = !wh.WaitOne(millisecondsTimeout, exitContext); 840 bool timeout = !STPEventWaitHandle.WaitOne(wh, millisecondsTimeout, exitContext);
698 841
699 ReleaseWaitHandle(); 842 ReleaseWaitHandle();
700 843
@@ -706,10 +849,10 @@ namespace Amib.Threading.Internal
706 else 849 else
707 { 850 {
708 WaitHandle wh = GetWaitHandle(); 851 WaitHandle wh = GetWaitHandle();
709 int result = WaitHandle.WaitAny(new WaitHandle[] { wh, cancelWaitHandle }); 852 int result = STPEventWaitHandle.WaitAny(new WaitHandle[] { wh, cancelWaitHandle });
710 ReleaseWaitHandle(); 853 ReleaseWaitHandle();
711 854
712 switch(result) 855 switch (result)
713 { 856 {
714 case 0: 857 case 0:
715 // The work item signaled 858 // The work item signaled
@@ -717,7 +860,7 @@ namespace Amib.Threading.Internal
717 // work item (not the get result) 860 // work item (not the get result)
718 break; 861 break;
719 case 1: 862 case 1:
720 case WaitHandle.WaitTimeout: 863 case STPEventWaitHandle.WaitTimeout:
721 throw new WorkItemTimeoutException("Work item timeout"); 864 throw new WorkItemTimeoutException("Work item timeout");
722 default: 865 default:
723 Debug.Assert(false); 866 Debug.Assert(false);
@@ -745,11 +888,11 @@ namespace Amib.Threading.Internal
745 /// </summary> 888 /// </summary>
746 private WaitHandle GetWaitHandle() 889 private WaitHandle GetWaitHandle()
747 { 890 {
748 lock(this) 891 lock (this)
749 { 892 {
750 if (null == _workItemCompleted) 893 if (null == _workItemCompleted)
751 { 894 {
752 _workItemCompleted = new ManualResetEvent(IsCompleted); 895 _workItemCompleted = EventWaitHandleFactory.CreateManualResetEvent(IsCompleted);
753 } 896 }
754 ++_workItemCompletedRefCount; 897 ++_workItemCompletedRefCount;
755 } 898 }
@@ -758,7 +901,7 @@ namespace Amib.Threading.Internal
758 901
759 private void ReleaseWaitHandle() 902 private void ReleaseWaitHandle()
760 { 903 {
761 lock(this) 904 lock (this)
762 { 905 {
763 if (null != _workItemCompleted) 906 if (null != _workItemCompleted)
764 { 907 {
@@ -779,10 +922,10 @@ namespace Amib.Threading.Internal
779 { 922 {
780 get 923 get
781 { 924 {
782 lock(this) 925 lock (this)
783 { 926 {
784 WorkItemState workItemState = GetWorkItemState(); 927 WorkItemState workItemState = GetWorkItemState();
785 return ((workItemState == WorkItemState.Completed) || 928 return ((workItemState == WorkItemState.Completed) ||
786 (workItemState == WorkItemState.Canceled)); 929 (workItemState == WorkItemState.Canceled));
787 } 930 }
788 } 931 }
@@ -795,7 +938,7 @@ namespace Amib.Threading.Internal
795 { 938 {
796 get 939 get
797 { 940 {
798 lock(this) 941 lock (this)
799 { 942 {
800 return (GetWorkItemState() == WorkItemState.Canceled); 943 return (GetWorkItemState() == WorkItemState.Canceled);
801 } 944 }
@@ -843,172 +986,6 @@ namespace Amib.Threading.Internal
843 } 986 }
844 } 987 }
845 988
846
847 #region WorkItemResult class
848
849 private class WorkItemResult : IWorkItemResult, IInternalWorkItemResult
850 {
851 /// <summary>
852 /// A back reference to the work item
853 /// </summary>
854 private WorkItem _workItem;
855
856 public WorkItemResult(WorkItem workItem)
857 {
858 _workItem = workItem;
859 }
860
861 internal WorkItem GetWorkItem()
862 {
863 return _workItem;
864 }
865
866 #region IWorkItemResult Members
867
868 public bool IsCompleted
869 {
870 get
871 {
872 return _workItem.IsCompleted;
873 }
874 }
875
876 public void Abort()
877 {
878 _workItem.Abort();
879 }
880
881 public bool IsCanceled
882 {
883 get
884 {
885 return _workItem.IsCanceled;
886 }
887 }
888
889 public object GetResult()
890 {
891 return _workItem.GetResult(Timeout.Infinite, true, null);
892 }
893
894 public object GetResult(int millisecondsTimeout, bool exitContext)
895 {
896 return _workItem.GetResult(millisecondsTimeout, exitContext, null);
897 }
898
899 public object GetResult(TimeSpan timeout, bool exitContext)
900 {
901 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null);
902 }
903
904 public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle)
905 {
906 return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle);
907 }
908
909 public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle)
910 {
911 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle);
912 }
913
914 public object GetResult(out Exception e)
915 {
916 return _workItem.GetResult(Timeout.Infinite, true, null, out e);
917 }
918
919 public object GetResult(int millisecondsTimeout, bool exitContext, out Exception e)
920 {
921 return _workItem.GetResult(millisecondsTimeout, exitContext, null, out e);
922 }
923
924 public object GetResult(TimeSpan timeout, bool exitContext, out Exception e)
925 {
926 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null, out e);
927 }
928
929 public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
930 {
931 return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e);
932 }
933
934 public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
935 {
936 return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle, out e);
937 }
938
939 public bool Cancel()
940 {
941 return _workItem.Cancel();
942 }
943
944 public object State
945 {
946 get
947 {
948 return _workItem._state;
949 }
950 }
951
952 public WorkItemPriority WorkItemPriority
953 {
954 get
955 {
956 return _workItem._workItemInfo.WorkItemPriority;
957 }
958 }
959
960 /// <summary>
961 /// Return the result, same as GetResult()
962 /// </summary>
963 public object Result
964 {
965 get { return GetResult(); }
966 }
967
968 /// <summary>
969 /// Returns the exception if occured otherwise returns null.
970 /// This value is valid only after the work item completed,
971 /// before that it is always null.
972 /// </summary>
973 public object Exception
974 {
975 get { return _workItem._exception; }
976 }
977
978 #endregion
979
980 #region IInternalWorkItemResult Members
981
982 public event WorkItemStateCallback OnWorkItemStarted
983 {
984 add
985 {
986 _workItem.OnWorkItemStarted += value;
987 }
988 remove
989 {
990 _workItem.OnWorkItemStarted -= value;
991 }
992 }
993
994
995 public event WorkItemStateCallback OnWorkItemCompleted
996 {
997 add
998 {
999 _workItem.OnWorkItemCompleted += value;
1000 }
1001 remove
1002 {
1003 _workItem.OnWorkItemCompleted -= value;
1004 }
1005 }
1006
1007 #endregion
1008 }
1009
1010 #endregion
1011
1012 public void DisposeOfState() 989 public void DisposeOfState()
1013 { 990 {
1014 if (_workItemInfo.DisposeOfStateObjects) 991 if (_workItemInfo.DisposeOfStateObjects)
@@ -1021,15 +998,5 @@ namespace Amib.Threading.Internal
1021 } 998 }
1022 } 999 }
1023 } 1000 }
1024
1025 public void Abort()
1026 {
1027 lock (this)
1028 {
1029 if(currentThread != null)
1030 currentThread.Abort();
1031 }
1032 }
1033 } 1001 }
1034 #endregion
1035} 1002}
diff --git a/ThirdParty/SmartThreadPool/WorkItemFactory.cs b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
index dfcb54f..16ccd81 100644
--- a/ThirdParty/SmartThreadPool/WorkItemFactory.cs
+++ b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
@@ -1,148 +1,152 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
5 2
6namespace Amib.Threading.Internal 3namespace Amib.Threading.Internal
7{ 4{
8 #region WorkItemFactory class 5 #region WorkItemFactory class
9 6
10 public class WorkItemFactory 7 public class WorkItemFactory
11 { 8 {
12 /// <summary> 9 /// <summary>
13 /// Create a new work item 10 /// Create a new work item
14 /// </summary> 11 /// </summary>
12 /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
13 /// <param name="wigStartInfo">Work item group start information</param>
14 /// <param name="callback">A callback to execute</param>
15 /// <returns>Returns a work item</returns>
16 public static WorkItem CreateWorkItem(
17 IWorkItemsGroup workItemsGroup,
18 WIGStartInfo wigStartInfo,
19 WorkItemCallback callback)
20 {
21 return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null);
22 }
23
24 /// <summary>
25 /// Create a new work item
26 /// </summary>
27 /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
15 /// <param name="wigStartInfo">Work item group start information</param> 28 /// <param name="wigStartInfo">Work item group start information</param>
16 /// <param name="callback">A callback to execute</param> 29 /// <param name="callback">A callback to execute</param>
17 /// <returns>Returns a work item</returns> 30 /// <param name="workItemPriority">The priority of the work item</param>
18 public static WorkItem CreateWorkItem( 31 /// <returns>Returns a work item</returns>
19 IWorkItemsGroup workItemsGroup, 32 public static WorkItem CreateWorkItem(
20 WIGStartInfo wigStartInfo, 33 IWorkItemsGroup workItemsGroup,
21 WorkItemCallback callback) 34 WIGStartInfo wigStartInfo,
22 { 35 WorkItemCallback callback,
23 return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null); 36 WorkItemPriority workItemPriority)
24 } 37 {
25 38 return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null, workItemPriority);
26 /// <summary> 39 }
27 /// Create a new work item 40
28 /// </summary> 41 /// <summary>
29 /// <param name="wigStartInfo">Work item group start information</param> 42 /// Create a new work item
30 /// <param name="callback">A callback to execute</param> 43 /// </summary>
31 /// <param name="workItemPriority">The priority of the work item</param> 44 /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
32 /// <returns>Returns a work item</returns>
33 public static WorkItem CreateWorkItem(
34 IWorkItemsGroup workItemsGroup,
35 WIGStartInfo wigStartInfo,
36 WorkItemCallback callback,
37 WorkItemPriority workItemPriority)
38 {
39 return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null, workItemPriority);
40 }
41
42 /// <summary>
43 /// Create a new work item
44 /// </summary>
45 /// <param name="wigStartInfo">Work item group start information</param> 45 /// <param name="wigStartInfo">Work item group start information</param>
46 /// <param name="workItemInfo">Work item info</param> 46 /// <param name="workItemInfo">Work item info</param>
47 /// <param name="callback">A callback to execute</param> 47 /// <param name="callback">A callback to execute</param>
48 /// <returns>Returns a work item</returns> 48 /// <returns>Returns a work item</returns>
49 public static WorkItem CreateWorkItem( 49 public static WorkItem CreateWorkItem(
50 IWorkItemsGroup workItemsGroup, 50 IWorkItemsGroup workItemsGroup,
51 WIGStartInfo wigStartInfo, 51 WIGStartInfo wigStartInfo,
52 WorkItemInfo workItemInfo, 52 WorkItemInfo workItemInfo,
53 WorkItemCallback callback) 53 WorkItemCallback callback)
54 { 54 {
55 return CreateWorkItem( 55 return CreateWorkItem(
56 workItemsGroup, 56 workItemsGroup,
57 wigStartInfo, 57 wigStartInfo,
58 workItemInfo, 58 workItemInfo,
59 callback, 59 callback,
60 null); 60 null);
61 } 61 }
62 62
63 /// <summary> 63 /// <summary>
64 /// Create a new work item 64 /// Create a new work item
65 /// </summary> 65 /// </summary>
66 /// <param name="workItemsGroup">The WorkItemsGroup of this workitem</param>
66 /// <param name="wigStartInfo">Work item group start information</param> 67 /// <param name="wigStartInfo">Work item group start information</param>
67 /// <param name="callback">A callback to execute</param> 68 /// <param name="callback">A callback to execute</param>
68 /// <param name="state"> 69 /// <param name="state">
69 /// The context object of the work item. Used for passing arguments to the work item. 70 /// The context object of the work item. Used for passing arguments to the work item.
70 /// </param> 71 /// </param>
71 /// <returns>Returns a work item</returns> 72 /// <returns>Returns a work item</returns>
72 public static WorkItem CreateWorkItem( 73 public static WorkItem CreateWorkItem(
73 IWorkItemsGroup workItemsGroup, 74 IWorkItemsGroup workItemsGroup,
74 WIGStartInfo wigStartInfo, 75 WIGStartInfo wigStartInfo,
75 WorkItemCallback callback, 76 WorkItemCallback callback,
76 object state) 77 object state)
77 { 78 {
78 ValidateCallback(callback); 79 ValidateCallback(callback);
79 80
80 WorkItemInfo workItemInfo = new WorkItemInfo(); 81 WorkItemInfo workItemInfo = new WorkItemInfo();
81 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 82 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
82 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 83 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
83 workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback; 84 workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
84 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute; 85 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
85 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 86 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
86 87 workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
87 WorkItem workItem = new WorkItem( 88
88 workItemsGroup, 89 WorkItem workItem = new WorkItem(
89 workItemInfo, 90 workItemsGroup,
90 callback, 91 workItemInfo,
91 state); 92 callback,
92 return workItem; 93 state);
93 } 94 return workItem;
94 95 }
95 /// <summary> 96
96 /// Create a new work item 97 /// <summary>
97 /// </summary> 98 /// Create a new work item
98 /// <param name="wigStartInfo">Work item group start information</param> 99 /// </summary>
99 /// <param name="callback">A callback to execute</param> 100 /// <param name="workItemsGroup">The work items group</param>
100 /// <param name="state"> 101 /// <param name="wigStartInfo">Work item group start information</param>
101 /// The context object of the work item. Used for passing arguments to the work item. 102 /// <param name="callback">A callback to execute</param>
102 /// </param> 103 /// <param name="state">
103 /// <param name="workItemPriority">The work item priority</param> 104 /// The context object of the work item. Used for passing arguments to the work item.
104 /// <returns>Returns a work item</returns> 105 /// </param>
105 public static WorkItem CreateWorkItem( 106 /// <param name="workItemPriority">The work item priority</param>
106 IWorkItemsGroup workItemsGroup, 107 /// <returns>Returns a work item</returns>
107 WIGStartInfo wigStartInfo, 108 public static WorkItem CreateWorkItem(
108 WorkItemCallback callback, 109 IWorkItemsGroup workItemsGroup,
109 object state, 110 WIGStartInfo wigStartInfo,
110 WorkItemPriority workItemPriority) 111 WorkItemCallback callback,
111 { 112 object state,
112 ValidateCallback(callback); 113 WorkItemPriority workItemPriority)
113 114 {
114 WorkItemInfo workItemInfo = new WorkItemInfo(); 115 ValidateCallback(callback);
115 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 116
116 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 117 WorkItemInfo workItemInfo = new WorkItemInfo();
117 workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback; 118 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
118 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute; 119 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
119 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 120 workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
120 workItemInfo.WorkItemPriority = workItemPriority; 121 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
121 122 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
122 WorkItem workItem = new WorkItem( 123 workItemInfo.WorkItemPriority = workItemPriority;
123 workItemsGroup, 124
124 workItemInfo, 125 WorkItem workItem = new WorkItem(
125 callback, 126 workItemsGroup,
126 state); 127 workItemInfo,
127 128 callback,
128 return workItem; 129 state);
129 } 130
130 131 return workItem;
131 /// <summary> 132 }
132 /// Create a new work item 133
133 /// </summary> 134 /// <summary>
134 /// <param name="wigStartInfo">Work item group start information</param> 135 /// Create a new work item
135 /// <param name="workItemInfo">Work item information</param> 136 /// </summary>
136 /// <param name="callback">A callback to execute</param> 137 /// <param name="workItemsGroup">The work items group</param>
137 /// <param name="state"> 138 /// <param name="wigStartInfo">Work item group start information</param>
138 /// The context object of the work item. Used for passing arguments to the work item. 139 /// <param name="workItemInfo">Work item information</param>
139 /// </param> 140 /// <param name="callback">A callback to execute</param>
140 /// <returns>Returns a work item</returns> 141 /// <param name="state">
142 /// The context object of the work item. Used for passing arguments to the work item.
143 /// </param>
144 /// <returns>Returns a work item</returns>
141 public static WorkItem CreateWorkItem( 145 public static WorkItem CreateWorkItem(
142 IWorkItemsGroup workItemsGroup, 146 IWorkItemsGroup workItemsGroup,
143 WIGStartInfo wigStartInfo, 147 WIGStartInfo wigStartInfo,
144 WorkItemInfo workItemInfo, 148 WorkItemInfo workItemInfo,
145 WorkItemCallback callback, 149 WorkItemCallback callback,
146 object state) 150 object state)
147 { 151 {
148 ValidateCallback(callback); 152 ValidateCallback(callback);
@@ -151,183 +155,189 @@ namespace Amib.Threading.Internal
151 WorkItem workItem = new WorkItem( 155 WorkItem workItem = new WorkItem(
152 workItemsGroup, 156 workItemsGroup,
153 new WorkItemInfo(workItemInfo), 157 new WorkItemInfo(workItemInfo),
154 callback, 158 callback,
155 state); 159 state);
156 160
157 return workItem; 161 return workItem;
158 } 162 }
159 163
160 /// <summary> 164 /// <summary>
161 /// Create a new work item 165 /// Create a new work item
162 /// </summary> 166 /// </summary>
163 /// <param name="wigStartInfo">Work item group start information</param> 167 /// <param name="workItemsGroup">The work items group</param>
164 /// <param name="callback">A callback to execute</param> 168 /// <param name="wigStartInfo">Work item group start information</param>
165 /// <param name="state"> 169 /// <param name="callback">A callback to execute</param>
166 /// The context object of the work item. Used for passing arguments to the work item. 170 /// <param name="state">
167 /// </param> 171 /// The context object of the work item. Used for passing arguments to the work item.
168 /// <param name="postExecuteWorkItemCallback"> 172 /// </param>
169 /// A delegate to call after the callback completion 173 /// <param name="postExecuteWorkItemCallback">
170 /// </param> 174 /// A delegate to call after the callback completion
171 /// <returns>Returns a work item</returns> 175 /// </param>
172 public static WorkItem CreateWorkItem( 176 /// <returns>Returns a work item</returns>
173 IWorkItemsGroup workItemsGroup, 177 public static WorkItem CreateWorkItem(
174 WIGStartInfo wigStartInfo, 178 IWorkItemsGroup workItemsGroup,
175 WorkItemCallback callback, 179 WIGStartInfo wigStartInfo,
176 object state, 180 WorkItemCallback callback,
177 PostExecuteWorkItemCallback postExecuteWorkItemCallback) 181 object state,
178 { 182 PostExecuteWorkItemCallback postExecuteWorkItemCallback)
179 ValidateCallback(callback); 183 {
180 ValidateCallback(postExecuteWorkItemCallback); 184 ValidateCallback(callback);
181 185 ValidateCallback(postExecuteWorkItemCallback);
182 WorkItemInfo workItemInfo = new WorkItemInfo(); 186
183 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 187 WorkItemInfo workItemInfo = new WorkItemInfo();
184 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 188 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
185 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback; 189 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
186 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute; 190 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
187 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 191 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
188 192 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
189 WorkItem workItem = new WorkItem( 193 workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
190 workItemsGroup, 194
191 workItemInfo, 195 WorkItem workItem = new WorkItem(
192 callback, 196 workItemsGroup,
193 state); 197 workItemInfo,
194 198 callback,
195 return workItem; 199 state);
196 } 200
197 201 return workItem;
198 /// <summary> 202 }
199 /// Create a new work item 203
200 /// </summary> 204 /// <summary>
201 /// <param name="wigStartInfo">Work item group start information</param> 205 /// Create a new work item
202 /// <param name="callback">A callback to execute</param> 206 /// </summary>
203 /// <param name="state"> 207 /// <param name="workItemsGroup">The work items group</param>
204 /// The context object of the work item. Used for passing arguments to the work item. 208 /// <param name="wigStartInfo">Work item group start information</param>
205 /// </param> 209 /// <param name="callback">A callback to execute</param>
206 /// <param name="postExecuteWorkItemCallback"> 210 /// <param name="state">
207 /// A delegate to call after the callback completion 211 /// The context object of the work item. Used for passing arguments to the work item.
208 /// </param> 212 /// </param>
209 /// <param name="workItemPriority">The work item priority</param> 213 /// <param name="postExecuteWorkItemCallback">
210 /// <returns>Returns a work item</returns> 214 /// A delegate to call after the callback completion
211 public static WorkItem CreateWorkItem( 215 /// </param>
212 IWorkItemsGroup workItemsGroup, 216 /// <param name="workItemPriority">The work item priority</param>
213 WIGStartInfo wigStartInfo, 217 /// <returns>Returns a work item</returns>
214 WorkItemCallback callback, 218 public static WorkItem CreateWorkItem(
215 object state, 219 IWorkItemsGroup workItemsGroup,
216 PostExecuteWorkItemCallback postExecuteWorkItemCallback, 220 WIGStartInfo wigStartInfo,
217 WorkItemPriority workItemPriority) 221 WorkItemCallback callback,
218 { 222 object state,
219 ValidateCallback(callback); 223 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
220 ValidateCallback(postExecuteWorkItemCallback); 224 WorkItemPriority workItemPriority)
221 225 {
222 WorkItemInfo workItemInfo = new WorkItemInfo(); 226 ValidateCallback(callback);
223 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 227 ValidateCallback(postExecuteWorkItemCallback);
224 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 228
225 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback; 229 WorkItemInfo workItemInfo = new WorkItemInfo();
226 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute; 230 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
227 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 231 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
228 workItemInfo.WorkItemPriority = workItemPriority; 232 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
229 233 workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
230 WorkItem workItem = new WorkItem( 234 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
231 workItemsGroup, 235 workItemInfo.WorkItemPriority = workItemPriority;
232 workItemInfo, 236
233 callback, 237 WorkItem workItem = new WorkItem(
234 state); 238 workItemsGroup,
235 239 workItemInfo,
236 return workItem; 240 callback,
237 } 241 state);
238 242
239 /// <summary> 243 return workItem;
240 /// Create a new work item 244 }
241 /// </summary> 245
242 /// <param name="wigStartInfo">Work item group start information</param> 246 /// <summary>
243 /// <param name="callback">A callback to execute</param> 247 /// Create a new work item
244 /// <param name="state"> 248 /// </summary>
245 /// The context object of the work item. Used for passing arguments to the work item. 249 /// <param name="workItemsGroup">The work items group</param>
246 /// </param> 250 /// <param name="wigStartInfo">Work item group start information</param>
247 /// <param name="postExecuteWorkItemCallback"> 251 /// <param name="callback">A callback to execute</param>
248 /// A delegate to call after the callback completion 252 /// <param name="state">
249 /// </param> 253 /// The context object of the work item. Used for passing arguments to the work item.
250 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param> 254 /// </param>
251 /// <returns>Returns a work item</returns> 255 /// <param name="postExecuteWorkItemCallback">
252 public static WorkItem CreateWorkItem( 256 /// A delegate to call after the callback completion
253 IWorkItemsGroup workItemsGroup, 257 /// </param>
254 WIGStartInfo wigStartInfo, 258 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
255 WorkItemCallback callback, 259 /// <returns>Returns a work item</returns>
256 object state, 260 public static WorkItem CreateWorkItem(
257 PostExecuteWorkItemCallback postExecuteWorkItemCallback, 261 IWorkItemsGroup workItemsGroup,
258 CallToPostExecute callToPostExecute) 262 WIGStartInfo wigStartInfo,
259 { 263 WorkItemCallback callback,
260 ValidateCallback(callback); 264 object state,
261 ValidateCallback(postExecuteWorkItemCallback); 265 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
262 266 CallToPostExecute callToPostExecute)
263 WorkItemInfo workItemInfo = new WorkItemInfo(); 267 {
264 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 268 ValidateCallback(callback);
265 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 269 ValidateCallback(postExecuteWorkItemCallback);
266 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback; 270
267 workItemInfo.CallToPostExecute = callToPostExecute; 271 WorkItemInfo workItemInfo = new WorkItemInfo();
268 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 272 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
269 273 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
270 WorkItem workItem = new WorkItem( 274 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
271 workItemsGroup, 275 workItemInfo.CallToPostExecute = callToPostExecute;
272 workItemInfo, 276 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
273 callback, 277 workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
274 state); 278
275 279 WorkItem workItem = new WorkItem(
276 return workItem; 280 workItemsGroup,
277 } 281 workItemInfo,
278 282 callback,
279 /// <summary> 283 state);
280 /// Create a new work item 284
281 /// </summary> 285 return workItem;
282 /// <param name="wigStartInfo">Work item group start information</param> 286 }
283 /// <param name="callback">A callback to execute</param> 287
284 /// <param name="state"> 288 /// <summary>
285 /// The context object of the work item. Used for passing arguments to the work item. 289 /// Create a new work item
286 /// </param> 290 /// </summary>
287 /// <param name="postExecuteWorkItemCallback"> 291 /// <param name="workItemsGroup">The work items group</param>
288 /// A delegate to call after the callback completion 292 /// <param name="wigStartInfo">Work item group start information</param>
289 /// </param> 293 /// <param name="callback">A callback to execute</param>
290 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param> 294 /// <param name="state">
291 /// <param name="workItemPriority">The work item priority</param> 295 /// The context object of the work item. Used for passing arguments to the work item.
292 /// <returns>Returns a work item</returns> 296 /// </param>
293 public static WorkItem CreateWorkItem( 297 /// <param name="postExecuteWorkItemCallback">
294 IWorkItemsGroup workItemsGroup, 298 /// A delegate to call after the callback completion
295 WIGStartInfo wigStartInfo, 299 /// </param>
296 WorkItemCallback callback, 300 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
297 object state, 301 /// <param name="workItemPriority">The work item priority</param>
298 PostExecuteWorkItemCallback postExecuteWorkItemCallback, 302 /// <returns>Returns a work item</returns>
299 CallToPostExecute callToPostExecute, 303 public static WorkItem CreateWorkItem(
300 WorkItemPriority workItemPriority) 304 IWorkItemsGroup workItemsGroup,
301 { 305 WIGStartInfo wigStartInfo,
302 306 WorkItemCallback callback,
303 ValidateCallback(callback); 307 object state,
304 ValidateCallback(postExecuteWorkItemCallback); 308 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
305 309 CallToPostExecute callToPostExecute,
306 WorkItemInfo workItemInfo = new WorkItemInfo(); 310 WorkItemPriority workItemPriority)
307 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext; 311 {
308 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext; 312
309 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback; 313 ValidateCallback(callback);
310 workItemInfo.CallToPostExecute = callToPostExecute; 314 ValidateCallback(postExecuteWorkItemCallback);
311 workItemInfo.WorkItemPriority = workItemPriority; 315
312 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects; 316 WorkItemInfo workItemInfo = new WorkItemInfo();
313 317 workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
314 WorkItem workItem = new WorkItem( 318 workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
315 workItemsGroup, 319 workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
316 workItemInfo, 320 workItemInfo.CallToPostExecute = callToPostExecute;
317 callback, 321 workItemInfo.WorkItemPriority = workItemPriority;
318 state); 322 workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
319 323
320 return workItem; 324 WorkItem workItem = new WorkItem(
321 } 325 workItemsGroup,
322 326 workItemInfo,
323 private static void ValidateCallback(Delegate callback) 327 callback,
324 { 328 state);
325 if(callback.GetInvocationList().Length > 1) 329
326 { 330 return workItem;
327 throw new NotSupportedException("SmartThreadPool doesn't support delegates chains"); 331 }
328 } 332
329 } 333 private static void ValidateCallback(Delegate callback)
330 } 334 {
331 335 if (callback != null && callback.GetInvocationList().Length > 1)
332 #endregion 336 {
337 throw new NotSupportedException("SmartThreadPool doesn't support delegates chains");
338 }
339 }
340 }
341
342 #endregion
333} 343}
diff --git a/ThirdParty/SmartThreadPool/WorkItemInfo.cs b/ThirdParty/SmartThreadPool/WorkItemInfo.cs
index c259339..0d7fc85 100644
--- a/ThirdParty/SmartThreadPool/WorkItemInfo.cs
+++ b/ThirdParty/SmartThreadPool/WorkItemInfo.cs
@@ -1,102 +1,69 @@
1// Ami Bar
2// amibar@gmail.com
3
4namespace Amib.Threading 1namespace Amib.Threading
5{ 2{
6 #region WorkItemInfo class 3 #region WorkItemInfo class
7
8 /// <summary>
9 /// Summary description for WorkItemInfo.
10 /// </summary>
11 public class WorkItemInfo
12 {
13 /// <summary>
14 /// Use the caller's security context
15 /// </summary>
16 private bool _useCallerCallContext;
17
18 /// <summary>
19 /// Use the caller's security context
20 /// </summary>
21 private bool _useCallerHttpContext;
22
23 /// <summary>
24 /// Dispose of the state object of a work item
25 /// </summary>
26 private bool _disposeOfStateObjects;
27
28 /// <summary>
29 /// The option to run the post execute
30 /// </summary>
31 private CallToPostExecute _callToPostExecute;
32 4
33 /// <summary> 5 /// <summary>
34 /// A post execute callback to call when none is provided in 6 /// Summary description for WorkItemInfo.
35 /// the QueueWorkItem method. 7 /// </summary>
36 /// </summary> 8 public class WorkItemInfo
37 private PostExecuteWorkItemCallback _postExecuteWorkItemCallback; 9 {
38 10 public WorkItemInfo()
39 /// <summary> 11 {
40 /// The priority of the work item 12 UseCallerCallContext = SmartThreadPool.DefaultUseCallerCallContext;
41 /// </summary> 13 UseCallerHttpContext = SmartThreadPool.DefaultUseCallerHttpContext;
42 private WorkItemPriority _workItemPriority; 14 DisposeOfStateObjects = SmartThreadPool.DefaultDisposeOfStateObjects;
15 CallToPostExecute = SmartThreadPool.DefaultCallToPostExecute;
16 PostExecuteWorkItemCallback = SmartThreadPool.DefaultPostExecuteWorkItemCallback;
17 WorkItemPriority = SmartThreadPool.DefaultWorkItemPriority;
18 }
43 19
44 public WorkItemInfo() 20 public WorkItemInfo(WorkItemInfo workItemInfo)
45 { 21 {
46 _useCallerCallContext = SmartThreadPool.DefaultUseCallerCallContext; 22 UseCallerCallContext = workItemInfo.UseCallerCallContext;
47 _useCallerHttpContext = SmartThreadPool.DefaultUseCallerHttpContext; 23 UseCallerHttpContext = workItemInfo.UseCallerHttpContext;
48 _disposeOfStateObjects = SmartThreadPool.DefaultDisposeOfStateObjects; 24 DisposeOfStateObjects = workItemInfo.DisposeOfStateObjects;
49 _callToPostExecute = SmartThreadPool.DefaultCallToPostExecute; 25 CallToPostExecute = workItemInfo.CallToPostExecute;
50 _postExecuteWorkItemCallback = SmartThreadPool.DefaultPostExecuteWorkItemCallback; 26 PostExecuteWorkItemCallback = workItemInfo.PostExecuteWorkItemCallback;
51 _workItemPriority = SmartThreadPool.DefaultWorkItemPriority; 27 WorkItemPriority = workItemInfo.WorkItemPriority;
52 } 28 Timeout = workItemInfo.Timeout;
29 }
53 30
54 public WorkItemInfo(WorkItemInfo workItemInfo) 31 /// <summary>
55 { 32 /// Get/Set if to use the caller's security context
56 _useCallerCallContext = workItemInfo._useCallerCallContext; 33 /// </summary>
57 _useCallerHttpContext = workItemInfo._useCallerHttpContext; 34 public bool UseCallerCallContext { get; set; }
58 _disposeOfStateObjects = workItemInfo._disposeOfStateObjects;
59 _callToPostExecute = workItemInfo._callToPostExecute;
60 _postExecuteWorkItemCallback = workItemInfo._postExecuteWorkItemCallback;
61 _workItemPriority = workItemInfo._workItemPriority;
62 }
63 35
64 public bool UseCallerCallContext 36 /// <summary>
65 { 37 /// Get/Set if to use the caller's HTTP context
66 get { return _useCallerCallContext; } 38 /// </summary>
67 set { _useCallerCallContext = value; } 39 public bool UseCallerHttpContext { get; set; }
68 }
69 40
70 public bool UseCallerHttpContext 41 /// <summary>
71 { 42 /// Get/Set if to dispose of the state object of a work item
72 get { return _useCallerHttpContext; } 43 /// </summary>
73 set { _useCallerHttpContext = value; } 44 public bool DisposeOfStateObjects { get; set; }
74 }
75 45
76 public bool DisposeOfStateObjects 46 /// <summary>
77 { 47 /// Get/Set the run the post execute options
78 get { return _disposeOfStateObjects; } 48 /// </summary>
79 set { _disposeOfStateObjects = value; } 49 public CallToPostExecute CallToPostExecute { get; set; }
80 }
81 50
82 public CallToPostExecute CallToPostExecute 51 /// <summary>
83 { 52 /// Get/Set the post execute callback
84 get { return _callToPostExecute; } 53 /// </summary>
85 set { _callToPostExecute = value; } 54 public PostExecuteWorkItemCallback PostExecuteWorkItemCallback { get; set; }
86 }
87 55
88 public PostExecuteWorkItemCallback PostExecuteWorkItemCallback 56 /// <summary>
89 { 57 /// Get/Set the work item's priority
90 get { return _postExecuteWorkItemCallback; } 58 /// </summary>
91 set { _postExecuteWorkItemCallback = value; } 59 public WorkItemPriority WorkItemPriority { get; set; }
92 }
93 60
94 public WorkItemPriority WorkItemPriority 61 /// <summary>
95 { 62 /// Get/Set the work item's timout in milliseconds.
96 get { return _workItemPriority; } 63 /// This is a passive timout. When the timout expires the work item won't be actively aborted!
97 set { _workItemPriority = value; } 64 /// </summary>
98 } 65 public long Timeout { get; set; }
99 } 66 }
100 67
101 #endregion 68 #endregion
102} 69}
diff --git a/ThirdParty/SmartThreadPool/WorkItemResultTWrapper.cs b/ThirdParty/SmartThreadPool/WorkItemResultTWrapper.cs
new file mode 100644
index 0000000..d1eff95
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/WorkItemResultTWrapper.cs
@@ -0,0 +1,128 @@
1using System;
2using System.Threading;
3
4namespace Amib.Threading.Internal
5{
6 #region WorkItemResultTWrapper class
7
8 internal class WorkItemResultTWrapper<TResult> : IWorkItemResult<TResult>, IInternalWaitableResult
9 {
10 private readonly IWorkItemResult _workItemResult;
11
12 public WorkItemResultTWrapper(IWorkItemResult workItemResult)
13 {
14 _workItemResult = workItemResult;
15 }
16
17 #region IWorkItemResult<TResult> Members
18
19 public TResult GetResult()
20 {
21 return (TResult)_workItemResult.GetResult();
22 }
23
24 public TResult GetResult(int millisecondsTimeout, bool exitContext)
25 {
26 return (TResult)_workItemResult.GetResult(millisecondsTimeout, exitContext);
27 }
28
29 public TResult GetResult(TimeSpan timeout, bool exitContext)
30 {
31 return (TResult)_workItemResult.GetResult(timeout, exitContext);
32 }
33
34 public TResult GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle)
35 {
36 return (TResult)_workItemResult.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle);
37 }
38
39 public TResult GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle)
40 {
41 return (TResult)_workItemResult.GetResult(timeout, exitContext, cancelWaitHandle);
42 }
43
44 public TResult GetResult(out Exception e)
45 {
46 return (TResult)_workItemResult.GetResult(out e);
47 }
48
49 public TResult GetResult(int millisecondsTimeout, bool exitContext, out Exception e)
50 {
51 return (TResult)_workItemResult.GetResult(millisecondsTimeout, exitContext, out e);
52 }
53
54 public TResult GetResult(TimeSpan timeout, bool exitContext, out Exception e)
55 {
56 return (TResult)_workItemResult.GetResult(timeout, exitContext, out e);
57 }
58
59 public TResult GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
60 {
61 return (TResult)_workItemResult.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e);
62 }
63
64 public TResult GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
65 {
66 return (TResult)_workItemResult.GetResult(timeout, exitContext, cancelWaitHandle, out e);
67 }
68
69 public bool IsCompleted
70 {
71 get { return _workItemResult.IsCompleted; }
72 }
73
74 public bool IsCanceled
75 {
76 get { return _workItemResult.IsCanceled; }
77 }
78
79 public object State
80 {
81 get { return _workItemResult.State; }
82 }
83
84 public bool Cancel()
85 {
86 return _workItemResult.Cancel();
87 }
88
89 public bool Cancel(bool abortExecution)
90 {
91 return _workItemResult.Cancel(abortExecution);
92 }
93
94 public WorkItemPriority WorkItemPriority
95 {
96 get { return _workItemResult.WorkItemPriority; }
97 }
98
99 public TResult Result
100 {
101 get { return (TResult)_workItemResult.Result; }
102 }
103
104 public object Exception
105 {
106 get { return (TResult)_workItemResult.Exception; }
107 }
108
109 #region IInternalWorkItemResult Members
110
111 public IWorkItemResult GetWorkItemResult()
112 {
113 return _workItemResult.GetWorkItemResult();
114 }
115
116 public IWorkItemResult<TRes> GetWorkItemResultT<TRes>()
117 {
118 return (IWorkItemResult<TRes>)this;
119 }
120
121 #endregion
122
123 #endregion
124 }
125
126 #endregion
127
128}
diff --git a/ThirdParty/SmartThreadPool/WorkItemsGroup.cs b/ThirdParty/SmartThreadPool/WorkItemsGroup.cs
index 01ac8dd..d9d34ac 100644
--- a/ThirdParty/SmartThreadPool/WorkItemsGroup.cs
+++ b/ThirdParty/SmartThreadPool/WorkItemsGroup.cs
@@ -1,6 +1,3 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
5using System.Threading; 2using System.Threading;
6using System.Runtime.CompilerServices; 3using System.Runtime.CompilerServices;
@@ -8,505 +5,357 @@ using System.Diagnostics;
8 5
9namespace Amib.Threading.Internal 6namespace Amib.Threading.Internal
10{ 7{
11 #region WorkItemsGroup class
12
13 /// <summary>
14 /// Summary description for WorkItemsGroup.
15 /// </summary>
16 public class WorkItemsGroup : IWorkItemsGroup
17 {
18 #region Private members
19
20 private object _lock = new object();
21 /// <summary>
22 /// Contains the name of this instance of SmartThreadPool.
23 /// Can be changed by the user.
24 /// </summary>
25 private string _name = "WorkItemsGroup";
26
27 /// <summary>
28 /// A reference to the SmartThreadPool instance that created this
29 /// WorkItemsGroup.
30 /// </summary>
31 private SmartThreadPool _stp;
32
33 /// <summary>
34 /// The OnIdle event
35 /// </summary>
36 private event WorkItemsGroupIdleHandler _onIdle;
37 8
38 /// <summary> 9 #region WorkItemsGroup class
39 /// Defines how many work items of this WorkItemsGroup can run at once.
40 /// </summary>
41 private int _concurrency;
42 10
43 /// <summary> 11 /// <summary>
44 /// Priority queue to hold work items before they are passed 12 /// Summary description for WorkItemsGroup.
45 /// to the SmartThreadPool. 13 /// </summary>
46 /// </summary> 14 public class WorkItemsGroup : WorkItemsGroupBase
47 private PriorityQueue _workItemsQueue; 15 {
16 #region Private members
48 17
49 /// <summary> 18 private readonly object _lock = new object();
50 /// Indicate how many work items are waiting in the SmartThreadPool
51 /// queue.
52 /// This value is used to apply the concurrency.
53 /// </summary>
54 private int _workItemsInStpQueue;
55 19
56 /// <summary> 20 /// <summary>
57 /// Indicate how many work items are currently running in the SmartThreadPool. 21 /// A reference to the SmartThreadPool instance that created this
58 /// This value is used with the Cancel, to calculate if we can send new 22 /// WorkItemsGroup.
59 /// work items to the STP. 23 /// </summary>
60 /// </summary> 24 private readonly SmartThreadPool _stp;
61 private int _workItemsExecutingInStp = 0;
62 25
63 /// <summary> 26 /// <summary>
64 /// WorkItemsGroup start information 27 /// The OnIdle event
65 /// </summary> 28 /// </summary>
66 private WIGStartInfo _workItemsGroupStartInfo; 29 private event WorkItemsGroupIdleHandler _onIdle;
67 30
68 /// <summary> 31 /// <summary>
69 /// Signaled when all of the WorkItemsGroup's work item completed. 32 /// A flag to indicate if the Work Items Group is now suspended.
70 /// </summary> 33 /// </summary>
71 private ManualResetEvent _isIdleWaitHandle = new ManualResetEvent(true); 34 private bool _isSuspended;
72 35
73 /// <summary> 36 /// <summary>
74 /// A common object for all the work items that this work items group 37 /// Defines how many work items of this WorkItemsGroup can run at once.
75 /// generate so we can mark them to cancel in O(1) 38 /// </summary>
76 /// </summary> 39 private int _concurrency;
77 private CanceledWorkItemsGroup _canceledWorkItemsGroup = new CanceledWorkItemsGroup(); 40
78 41 /// <summary>
79 #endregion 42 /// Priority queue to hold work items before they are passed
80 43 /// to the SmartThreadPool.
81 #region Construction 44 /// </summary>
82 45 private readonly PriorityQueue _workItemsQueue;
83 public WorkItemsGroup( 46
84 SmartThreadPool stp, 47 /// <summary>
85 int concurrency, 48 /// Indicate how many work items are waiting in the SmartThreadPool
86 WIGStartInfo wigStartInfo) 49 /// queue.
50 /// This value is used to apply the concurrency.
51 /// </summary>
52 private int _workItemsInStpQueue;
53
54 /// <summary>
55 /// Indicate how many work items are currently running in the SmartThreadPool.
56 /// This value is used with the Cancel, to calculate if we can send new
57 /// work items to the STP.
58 /// </summary>
59 private int _workItemsExecutingInStp = 0;
60
61 /// <summary>
62 /// WorkItemsGroup start information
63 /// </summary>
64 private readonly WIGStartInfo _workItemsGroupStartInfo;
65
66 /// <summary>
67 /// Signaled when all of the WorkItemsGroup's work item completed.
68 /// </summary>
69 //private readonly ManualResetEvent _isIdleWaitHandle = new ManualResetEvent(true);
70 private readonly ManualResetEvent _isIdleWaitHandle = EventWaitHandleFactory.CreateManualResetEvent(true);
71
72 /// <summary>
73 /// A common object for all the work items that this work items group
74 /// generate so we can mark them to cancel in O(1)
75 /// </summary>
76 private CanceledWorkItemsGroup _canceledWorkItemsGroup = new CanceledWorkItemsGroup();
77
78 #endregion
79
80 #region Construction
81
82 public WorkItemsGroup(
83 SmartThreadPool stp,
84 int concurrency,
85 WIGStartInfo wigStartInfo)
86 {
87 if (concurrency <= 0)
88 {
89 throw new ArgumentOutOfRangeException(
90 "concurrency",
91#if !(_WINDOWS_CE) && !(_SILVERLIGHT) && !(WINDOWS_PHONE)
92 concurrency,
93#endif
94 "concurrency must be greater than zero");
95 }
96 _stp = stp;
97 _concurrency = concurrency;
98 _workItemsGroupStartInfo = new WIGStartInfo(wigStartInfo).AsReadOnly();
99 _workItemsQueue = new PriorityQueue();
100 Name = "WorkItemsGroup";
101
102 // The _workItemsInStpQueue gets the number of currently executing work items,
103 // because once a work item is executing, it cannot be cancelled.
104 _workItemsInStpQueue = _workItemsExecutingInStp;
105
106 _isSuspended = _workItemsGroupStartInfo.StartSuspended;
107 }
108
109 #endregion
110
111 #region WorkItemsGroupBase Overrides
112
113 public override int Concurrency
87 { 114 {
88 if (concurrency <= 0) 115 get { return _concurrency; }
89 {
90 throw new ArgumentOutOfRangeException("concurrency", concurrency, "concurrency must be greater than zero");
91 }
92 _stp = stp;
93 _concurrency = concurrency;
94 _workItemsGroupStartInfo = new WIGStartInfo(wigStartInfo);
95 _workItemsQueue = new PriorityQueue();
96
97 // The _workItemsInStpQueue gets the number of currently executing work items,
98 // because once a work item is executing, it cannot be cancelled.
99 _workItemsInStpQueue = _workItemsExecutingInStp;
100 }
101
102 #endregion
103
104 #region IWorkItemsGroup implementation
105
106 /// <summary>
107 /// Get/Set the name of the SmartThreadPool instance
108 /// </summary>
109 public string Name
110 {
111 get
112 {
113 return _name;
114 }
115
116 set 116 set
117 { 117 {
118 _name = value; 118 Debug.Assert(value > 0);
119 }
120 }
121
122 /// <summary>
123 /// Queue a work item
124 /// </summary>
125 /// <param name="callback">A callback to execute</param>
126 /// <returns>Returns a work item result</returns>
127 public IWorkItemResult QueueWorkItem(WorkItemCallback callback)
128 {
129 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback);
130 EnqueueToSTPNextWorkItem(workItem);
131 return workItem.GetWorkItemResult();
132 }
133 119
134 /// <summary> 120 int diff = value - _concurrency;
135 /// Queue a work item 121 _concurrency = value;
136 /// </summary> 122 if (diff > 0)
137 /// <param name="callback">A callback to execute</param> 123 {
138 /// <param name="workItemPriority">The priority of the work item</param> 124 EnqueueToSTPNextNWorkItem(diff);
139 /// <returns>Returns a work item result</returns> 125 }
140 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority) 126 }
141 {
142 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, workItemPriority);
143 EnqueueToSTPNextWorkItem(workItem);
144 return workItem.GetWorkItemResult();
145 }
146
147 /// <summary>
148 /// Queue a work item
149 /// </summary>
150 /// <param name="workItemInfo">Work item info</param>
151 /// <param name="callback">A callback to execute</param>
152 /// <returns>Returns a work item result</returns>
153 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback)
154 {
155 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, workItemInfo, callback);
156 EnqueueToSTPNextWorkItem(workItem);
157 return workItem.GetWorkItemResult();
158 }
159
160 /// <summary>
161 /// Queue a work item
162 /// </summary>
163 /// <param name="callback">A callback to execute</param>
164 /// <param name="state">
165 /// The context object of the work item. Used for passing arguments to the work item.
166 /// </param>
167 /// <returns>Returns a work item result</returns>
168 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state)
169 {
170 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state);
171 EnqueueToSTPNextWorkItem(workItem);
172 return workItem.GetWorkItemResult();
173 }
174
175 /// <summary>
176 /// Queue a work item
177 /// </summary>
178 /// <param name="callback">A callback to execute</param>
179 /// <param name="state">
180 /// The context object of the work item. Used for passing arguments to the work item.
181 /// </param>
182 /// <param name="workItemPriority">The work item priority</param>
183 /// <returns>Returns a work item result</returns>
184 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority)
185 {
186 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, workItemPriority);
187 EnqueueToSTPNextWorkItem(workItem);
188 return workItem.GetWorkItemResult();
189 }
190
191 /// <summary>
192 /// Queue a work item
193 /// </summary>
194 /// <param name="workItemInfo">Work item information</param>
195 /// <param name="callback">A callback to execute</param>
196 /// <param name="state">
197 /// The context object of the work item. Used for passing arguments to the work item.
198 /// </param>
199 /// <returns>Returns a work item result</returns>
200 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
201 {
202 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, workItemInfo, callback, state);
203 EnqueueToSTPNextWorkItem(workItem);
204 return workItem.GetWorkItemResult();
205 }
206
207 /// <summary>
208 /// Queue a work item
209 /// </summary>
210 /// <param name="callback">A callback to execute</param>
211 /// <param name="state">
212 /// The context object of the work item. Used for passing arguments to the work item.
213 /// </param>
214 /// <param name="postExecuteWorkItemCallback">
215 /// A delegate to call after the callback completion
216 /// </param>
217 /// <returns>Returns a work item result</returns>
218 public IWorkItemResult QueueWorkItem(
219 WorkItemCallback callback,
220 object state,
221 PostExecuteWorkItemCallback postExecuteWorkItemCallback)
222 {
223 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback);
224 EnqueueToSTPNextWorkItem(workItem);
225 return workItem.GetWorkItemResult();
226 }
227
228 /// <summary>
229 /// Queue a work item
230 /// </summary>
231 /// <param name="callback">A callback to execute</param>
232 /// <param name="state">
233 /// The context object of the work item. Used for passing arguments to the work item.
234 /// </param>
235 /// <param name="postExecuteWorkItemCallback">
236 /// A delegate to call after the callback completion
237 /// </param>
238 /// <param name="workItemPriority">The work item priority</param>
239 /// <returns>Returns a work item result</returns>
240 public IWorkItemResult QueueWorkItem(
241 WorkItemCallback callback,
242 object state,
243 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
244 WorkItemPriority workItemPriority)
245 {
246 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback, workItemPriority);
247 EnqueueToSTPNextWorkItem(workItem);
248 return workItem.GetWorkItemResult();
249 }
250
251 /// <summary>
252 /// Queue a work item
253 /// </summary>
254 /// <param name="callback">A callback to execute</param>
255 /// <param name="state">
256 /// The context object of the work item. Used for passing arguments to the work item.
257 /// </param>
258 /// <param name="postExecuteWorkItemCallback">
259 /// A delegate to call after the callback completion
260 /// </param>
261 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
262 /// <returns>Returns a work item result</returns>
263 public IWorkItemResult QueueWorkItem(
264 WorkItemCallback callback,
265 object state,
266 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
267 CallToPostExecute callToPostExecute)
268 {
269 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute);
270 EnqueueToSTPNextWorkItem(workItem);
271 return workItem.GetWorkItemResult();
272 } 127 }
273 128
274 /// <summary> 129 public override int WaitingCallbacks
275 /// Queue a work item
276 /// </summary>
277 /// <param name="callback">A callback to execute</param>
278 /// <param name="state">
279 /// The context object of the work item. Used for passing arguments to the work item.
280 /// </param>
281 /// <param name="postExecuteWorkItemCallback">
282 /// A delegate to call after the callback completion
283 /// </param>
284 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
285 /// <param name="workItemPriority">The work item priority</param>
286 /// <returns>Returns a work item result</returns>
287 public IWorkItemResult QueueWorkItem(
288 WorkItemCallback callback,
289 object state,
290 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
291 CallToPostExecute callToPostExecute,
292 WorkItemPriority workItemPriority)
293 { 130 {
294 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, _workItemsGroupStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority); 131 get { return _workItemsQueue.Count; }
295 EnqueueToSTPNextWorkItem(workItem);
296 return workItem.GetWorkItemResult();
297 } 132 }
298 133
299 /// <summary> 134 public override object[] GetStates()
300 /// Wait for the thread pool to be idle
301 /// </summary>
302 public void WaitForIdle()
303 { 135 {
304 WaitForIdle(Timeout.Infinite); 136 lock (_lock)
137 {
138 object[] states = new object[_workItemsQueue.Count];
139 int i = 0;
140 foreach (WorkItem workItem in _workItemsQueue)
141 {
142 states[i] = workItem.GetWorkItemResult().State;
143 ++i;
144 }
145 return states;
146 }
305 } 147 }
306 148
307 /// <summary> 149 /// <summary>
308 /// Wait for the thread pool to be idle 150 /// WorkItemsGroup start information
309 /// </summary> 151 /// </summary>
310 public bool WaitForIdle(TimeSpan timeout) 152 public override WIGStartInfo WIGStartInfo
311 { 153 {
312 return WaitForIdle((int)timeout.TotalMilliseconds); 154 get { return _workItemsGroupStartInfo; }
313 } 155 }
314 156
315 /// <summary> 157 /// <summary>
158 /// Start the Work Items Group if it was started suspended
159 /// </summary>
160 public override void Start()
161 {
162 // If the Work Items Group already started then quit
163 if (!_isSuspended)
164 {
165 return;
166 }
167 _isSuspended = false;
168
169 EnqueueToSTPNextNWorkItem(Math.Min(_workItemsQueue.Count, _concurrency));
170 }
171
172 public override void Cancel(bool abortExecution)
173 {
174 lock (_lock)
175 {
176 _canceledWorkItemsGroup.IsCanceled = true;
177 _workItemsQueue.Clear();
178 _workItemsInStpQueue = 0;
179 _canceledWorkItemsGroup = new CanceledWorkItemsGroup();
180 }
181
182 if (abortExecution)
183 {
184 _stp.CancelAbortWorkItemsGroup(this);
185 }
186 }
187
188 /// <summary>
316 /// Wait for the thread pool to be idle 189 /// Wait for the thread pool to be idle
317 /// </summary> 190 /// </summary>
318 public bool WaitForIdle(int millisecondsTimeout) 191 public override bool WaitForIdle(int millisecondsTimeout)
319 { 192 {
320 _stp.ValidateWorkItemsGroupWaitForIdle(this); 193 SmartThreadPool.ValidateWorkItemsGroupWaitForIdle(this);
321 return _isIdleWaitHandle.WaitOne(millisecondsTimeout, false); 194 return STPEventWaitHandle.WaitOne(_isIdleWaitHandle, millisecondsTimeout, false);
322 } 195 }
323 196
324 public int WaitingCallbacks 197 public override event WorkItemsGroupIdleHandler OnIdle
325 { 198 {
326 get 199 add { _onIdle += value; }
327 { 200 remove { _onIdle -= value; }
328 return _workItemsQueue.Count; 201 }
329 }
330 }
331 202
332 public event WorkItemsGroupIdleHandler OnIdle 203 #endregion
333 {
334 add
335 {
336 _onIdle += value;
337 }
338 remove
339 {
340 _onIdle -= value;
341 }
342 }
343 204
344 public void Cancel() 205 #region Private methods
345 {
346 lock(_lock)
347 {
348 _canceledWorkItemsGroup.IsCanceled = true;
349 _workItemsQueue.Clear();
350 _workItemsInStpQueue = 0;
351 _canceledWorkItemsGroup = new CanceledWorkItemsGroup();
352 }
353 }
354 206
355 public void Start() 207 private void RegisterToWorkItemCompletion(IWorkItemResult wir)
356 { 208 {
357 lock (this) 209 IInternalWorkItemResult iwir = (IInternalWorkItemResult)wir;
358 { 210 iwir.OnWorkItemStarted += OnWorkItemStartedCallback;
359 if (!_workItemsGroupStartInfo.StartSuspended) 211 iwir.OnWorkItemCompleted += OnWorkItemCompletedCallback;
360 { 212 }
361 return;
362 }
363 _workItemsGroupStartInfo.StartSuspended = false;
364 }
365
366 for(int i = 0; i < _concurrency; ++i)
367 {
368 EnqueueToSTPNextWorkItem(null, false);
369 }
370 }
371
372 #endregion
373 213
374 #region Private methods 214 public void OnSTPIsStarting()
375 215 {
376 private void RegisterToWorkItemCompletion(IWorkItemResult wir) 216 if (_isSuspended)
377 {
378 IInternalWorkItemResult iwir = wir as IInternalWorkItemResult;
379 iwir.OnWorkItemStarted += new WorkItemStateCallback(OnWorkItemStartedCallback);
380 iwir.OnWorkItemCompleted += new WorkItemStateCallback(OnWorkItemCompletedCallback);
381 }
382
383 public void OnSTPIsStarting()
384 {
385 lock (this)
386 {
387 if (_workItemsGroupStartInfo.StartSuspended)
388 {
389 return;
390 }
391 }
392
393 for(int i = 0; i < _concurrency; ++i)
394 {
395 EnqueueToSTPNextWorkItem(null, false);
396 }
397 }
398
399 private object FireOnIdle(object state)
400 {
401 FireOnIdleImpl(_onIdle);
402 return null;
403 }
404
405 [MethodImpl(MethodImplOptions.NoInlining)]
406 private void FireOnIdleImpl(WorkItemsGroupIdleHandler onIdle)
407 {
408 if(null == onIdle)
409 { 217 {
410 return; 218 return;
411 } 219 }
220
221 EnqueueToSTPNextNWorkItem(_concurrency);
222 }
412 223
413 Delegate[] delegates = onIdle.GetInvocationList(); 224 public void EnqueueToSTPNextNWorkItem(int count)
414 foreach(WorkItemsGroupIdleHandler eh in delegates)
415 {
416 try
417 {
418 eh(this);
419 }
420 // Ignore exceptions
421 catch{}
422 }
423 }
424
425 private void OnWorkItemStartedCallback(WorkItem workItem)
426 { 225 {
427 lock(_lock) 226 for (int i = 0; i < count; ++i)
428 { 227 {
429 ++_workItemsExecutingInStp; 228 EnqueueToSTPNextWorkItem(null, false);
430 } 229 }
431 } 230 }
432 231
433 private void OnWorkItemCompletedCallback(WorkItem workItem) 232 private object FireOnIdle(object state)
434 { 233 {
435 EnqueueToSTPNextWorkItem(null, true); 234 FireOnIdleImpl(_onIdle);
436 } 235 return null;
437 236 }
438 private void EnqueueToSTPNextWorkItem(WorkItem workItem) 237
238 [MethodImpl(MethodImplOptions.NoInlining)]
239 private void FireOnIdleImpl(WorkItemsGroupIdleHandler onIdle)
240 {
241 if(null == onIdle)
242 {
243 return;
244 }
245
246 Delegate[] delegates = onIdle.GetInvocationList();
247 foreach(WorkItemsGroupIdleHandler eh in delegates)
248 {
249 try
250 {
251 eh(this);
252 }
253 catch { } // Suppress exceptions
254 }
255 }
256
257 private void OnWorkItemStartedCallback(WorkItem workItem)
258 {
259 lock(_lock)
260 {
261 ++_workItemsExecutingInStp;
262 }
263 }
264
265 private void OnWorkItemCompletedCallback(WorkItem workItem)
266 {
267 EnqueueToSTPNextWorkItem(null, true);
268 }
269
270 internal override void Enqueue(WorkItem workItem)
439 { 271 {
440 EnqueueToSTPNextWorkItem(workItem, false); 272 EnqueueToSTPNextWorkItem(workItem);
441 } 273 }
442 274
443 private void EnqueueToSTPNextWorkItem(WorkItem workItem, bool decrementWorkItemsInStpQueue) 275 private void EnqueueToSTPNextWorkItem(WorkItem workItem)
444 { 276 {
445 lock(_lock) 277 EnqueueToSTPNextWorkItem(workItem, false);
446 { 278 }
447 // Got here from OnWorkItemCompletedCallback() 279
448 if (decrementWorkItemsInStpQueue) 280 private void EnqueueToSTPNextWorkItem(WorkItem workItem, bool decrementWorkItemsInStpQueue)
449 { 281 {
450 --_workItemsInStpQueue; 282 lock(_lock)
451 283 {
452 if(_workItemsInStpQueue < 0) 284 // Got here from OnWorkItemCompletedCallback()
453 { 285 if (decrementWorkItemsInStpQueue)
454 _workItemsInStpQueue = 0; 286 {
455 } 287 --_workItemsInStpQueue;
456 288
457 --_workItemsExecutingInStp; 289 if(_workItemsInStpQueue < 0)
458 290 {
459 if(_workItemsExecutingInStp < 0) 291 _workItemsInStpQueue = 0;
460 { 292 }
461 _workItemsExecutingInStp = 0; 293
462 } 294 --_workItemsExecutingInStp;
463 } 295
464 296 if(_workItemsExecutingInStp < 0)
465 // If the work item is not null then enqueue it 297 {
466 if (null != workItem) 298 _workItemsExecutingInStp = 0;
467 { 299 }
468 workItem.CanceledWorkItemsGroup = _canceledWorkItemsGroup; 300 }
469 301
470 RegisterToWorkItemCompletion(workItem.GetWorkItemResult()); 302 // If the work item is not null then enqueue it
471 _workItemsQueue.Enqueue(workItem); 303 if (null != workItem)
472 //_stp.IncrementWorkItemsCount(); 304 {
473 305 workItem.CanceledWorkItemsGroup = _canceledWorkItemsGroup;
474 if ((1 == _workItemsQueue.Count) && 306
475 (0 == _workItemsInStpQueue)) 307 RegisterToWorkItemCompletion(workItem.GetWorkItemResult());
476 { 308 _workItemsQueue.Enqueue(workItem);
477 _stp.RegisterWorkItemsGroup(this); 309 //_stp.IncrementWorkItemsCount();
478 Trace.WriteLine("WorkItemsGroup " + Name + " is NOT idle"); 310
311 if ((1 == _workItemsQueue.Count) &&
312 (0 == _workItemsInStpQueue))
313 {
314 _stp.RegisterWorkItemsGroup(this);
315 IsIdle = false;
479 _isIdleWaitHandle.Reset(); 316 _isIdleWaitHandle.Reset();
480 } 317 }
481 } 318 }
482 319
483 // If the work items queue of the group is empty than quit 320 // If the work items queue of the group is empty than quit
484 if (0 == _workItemsQueue.Count) 321 if (0 == _workItemsQueue.Count)
485 { 322 {
486 if (0 == _workItemsInStpQueue) 323 if (0 == _workItemsInStpQueue)
487 { 324 {
488 _stp.UnregisterWorkItemsGroup(this); 325 _stp.UnregisterWorkItemsGroup(this);
489 Trace.WriteLine("WorkItemsGroup " + Name + " is idle"); 326 IsIdle = true;
490 _isIdleWaitHandle.Set(); 327 _isIdleWaitHandle.Set();
491 _stp.QueueWorkItem(new WorkItemCallback(this.FireOnIdle)); 328 if (decrementWorkItemsInStpQueue && _onIdle != null && _onIdle.GetInvocationList().Length > 0)
492 } 329 {
493 return; 330 _stp.QueueWorkItem(new WorkItemCallback(FireOnIdle));
494 } 331 }
495 332 }
496 if (!_workItemsGroupStartInfo.StartSuspended) 333 return;
497 { 334 }
498 if (_workItemsInStpQueue < _concurrency) 335
499 { 336 if (!_isSuspended)
500 WorkItem nextWorkItem = _workItemsQueue.Dequeue() as WorkItem; 337 {
501 _stp.Enqueue(nextWorkItem, true); 338 if (_workItemsInStpQueue < _concurrency)
502 ++_workItemsInStpQueue; 339 {
503 } 340 WorkItem nextWorkItem = _workItemsQueue.Dequeue() as WorkItem;
504 } 341 try
505 } 342 {
506 } 343 _stp.Enqueue(nextWorkItem);
507 344 }
508 #endregion 345 catch (ObjectDisposedException e)
346 {
347 e.GetHashCode();
348 // The STP has been shutdown
349 }
350
351 ++_workItemsInStpQueue;
352 }
353 }
354 }
355 }
356
357 #endregion
509 } 358 }
510 359
511 #endregion 360 #endregion
512} 361}
diff --git a/ThirdParty/SmartThreadPool/WorkItemsGroupBase.cs b/ThirdParty/SmartThreadPool/WorkItemsGroupBase.cs
new file mode 100644
index 0000000..27fae5e
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/WorkItemsGroupBase.cs
@@ -0,0 +1,471 @@
1using System;
2using System.Threading;
3
4namespace Amib.Threading.Internal
5{
6 public abstract class WorkItemsGroupBase : IWorkItemsGroup
7 {
8 #region Private Fields
9
10 /// <summary>
11 /// Contains the name of this instance of SmartThreadPool.
12 /// Can be changed by the user.
13 /// </summary>
14 private string _name = "WorkItemsGroupBase";
15
16 public WorkItemsGroupBase()
17 {
18 IsIdle = true;
19 }
20
21 #endregion
22
23 #region IWorkItemsGroup Members
24
25 #region Public Methods
26
27 /// <summary>
28 /// Get/Set the name of the SmartThreadPool/WorkItemsGroup instance
29 /// </summary>
30 public string Name
31 {
32 get { return _name; }
33 set { _name = value; }
34 }
35
36 #endregion
37
38 #region Abstract Methods
39
40 public abstract int Concurrency { get; set; }
41 public abstract int WaitingCallbacks { get; }
42 public abstract object[] GetStates();
43 public abstract WIGStartInfo WIGStartInfo { get; }
44 public abstract void Start();
45 public abstract void Cancel(bool abortExecution);
46 public abstract bool WaitForIdle(int millisecondsTimeout);
47 public abstract event WorkItemsGroupIdleHandler OnIdle;
48
49 internal abstract void Enqueue(WorkItem workItem);
50 internal virtual void PreQueueWorkItem() { }
51
52 #endregion
53
54 #region Common Base Methods
55
56 /// <summary>
57 /// Cancel all the work items.
58 /// Same as Cancel(false)
59 /// </summary>
60 public virtual void Cancel()
61 {
62 Cancel(false);
63 }
64
65 /// <summary>
66 /// Wait for the SmartThreadPool/WorkItemsGroup to be idle
67 /// </summary>
68 public void WaitForIdle()
69 {
70 WaitForIdle(Timeout.Infinite);
71 }
72
73 /// <summary>
74 /// Wait for the SmartThreadPool/WorkItemsGroup to be idle
75 /// </summary>
76 public bool WaitForIdle(TimeSpan timeout)
77 {
78 return WaitForIdle((int)timeout.TotalMilliseconds);
79 }
80
81 /// <summary>
82 /// IsIdle is true when there are no work items running or queued.
83 /// </summary>
84 public bool IsIdle { get; protected set; }
85
86 #endregion
87
88 #region QueueWorkItem
89
90 /// <summary>
91 /// Queue a work item
92 /// </summary>
93 /// <param name="callback">A callback to execute</param>
94 /// <returns>Returns a work item result</returns>
95 public IWorkItemResult QueueWorkItem(WorkItemCallback callback)
96 {
97 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback);
98 Enqueue(workItem);
99 return workItem.GetWorkItemResult();
100 }
101
102 /// <summary>
103 /// Queue a work item
104 /// </summary>
105 /// <param name="callback">A callback to execute</param>
106 /// <param name="workItemPriority">The priority of the work item</param>
107 /// <returns>Returns a work item result</returns>
108 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority)
109 {
110 PreQueueWorkItem();
111 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, workItemPriority);
112 Enqueue(workItem);
113 return workItem.GetWorkItemResult();
114 }
115
116 /// <summary>
117 /// Queue a work item
118 /// </summary>
119 /// <param name="workItemInfo">Work item info</param>
120 /// <param name="callback">A callback to execute</param>
121 /// <returns>Returns a work item result</returns>
122 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback)
123 {
124 PreQueueWorkItem();
125 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, workItemInfo, callback);
126 Enqueue(workItem);
127 return workItem.GetWorkItemResult();
128 }
129
130 /// <summary>
131 /// Queue a work item
132 /// </summary>
133 /// <param name="callback">A callback to execute</param>
134 /// <param name="state">
135 /// The context object of the work item. Used for passing arguments to the work item.
136 /// </param>
137 /// <returns>Returns a work item result</returns>
138 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state)
139 {
140 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state);
141 Enqueue(workItem);
142 return workItem.GetWorkItemResult();
143 }
144
145 /// <summary>
146 /// Queue a work item
147 /// </summary>
148 /// <param name="callback">A callback to execute</param>
149 /// <param name="state">
150 /// The context object of the work item. Used for passing arguments to the work item.
151 /// </param>
152 /// <param name="workItemPriority">The work item priority</param>
153 /// <returns>Returns a work item result</returns>
154 public IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority)
155 {
156 PreQueueWorkItem();
157 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, workItemPriority);
158 Enqueue(workItem);
159 return workItem.GetWorkItemResult();
160 }
161
162 /// <summary>
163 /// Queue a work item
164 /// </summary>
165 /// <param name="workItemInfo">Work item information</param>
166 /// <param name="callback">A callback to execute</param>
167 /// <param name="state">
168 /// The context object of the work item. Used for passing arguments to the work item.
169 /// </param>
170 /// <returns>Returns a work item result</returns>
171 public IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state)
172 {
173 PreQueueWorkItem();
174 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, workItemInfo, callback, state);
175 Enqueue(workItem);
176 return workItem.GetWorkItemResult();
177 }
178
179 /// <summary>
180 /// Queue a work item
181 /// </summary>
182 /// <param name="callback">A callback to execute</param>
183 /// <param name="state">
184 /// The context object of the work item. Used for passing arguments to the work item.
185 /// </param>
186 /// <param name="postExecuteWorkItemCallback">
187 /// A delegate to call after the callback completion
188 /// </param>
189 /// <returns>Returns a work item result</returns>
190 public IWorkItemResult QueueWorkItem(
191 WorkItemCallback callback,
192 object state,
193 PostExecuteWorkItemCallback postExecuteWorkItemCallback)
194 {
195 PreQueueWorkItem();
196 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, postExecuteWorkItemCallback);
197 Enqueue(workItem);
198 return workItem.GetWorkItemResult();
199 }
200
201 /// <summary>
202 /// Queue a work item
203 /// </summary>
204 /// <param name="callback">A callback to execute</param>
205 /// <param name="state">
206 /// The context object of the work item. Used for passing arguments to the work item.
207 /// </param>
208 /// <param name="postExecuteWorkItemCallback">
209 /// A delegate to call after the callback completion
210 /// </param>
211 /// <param name="workItemPriority">The work item priority</param>
212 /// <returns>Returns a work item result</returns>
213 public IWorkItemResult QueueWorkItem(
214 WorkItemCallback callback,
215 object state,
216 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
217 WorkItemPriority workItemPriority)
218 {
219 PreQueueWorkItem();
220 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, postExecuteWorkItemCallback, workItemPriority);
221 Enqueue(workItem);
222 return workItem.GetWorkItemResult();
223 }
224
225 /// <summary>
226 /// Queue a work item
227 /// </summary>
228 /// <param name="callback">A callback to execute</param>
229 /// <param name="state">
230 /// The context object of the work item. Used for passing arguments to the work item.
231 /// </param>
232 /// <param name="postExecuteWorkItemCallback">
233 /// A delegate to call after the callback completion
234 /// </param>
235 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
236 /// <returns>Returns a work item result</returns>
237 public IWorkItemResult QueueWorkItem(
238 WorkItemCallback callback,
239 object state,
240 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
241 CallToPostExecute callToPostExecute)
242 {
243 PreQueueWorkItem();
244 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute);
245 Enqueue(workItem);
246 return workItem.GetWorkItemResult();
247 }
248
249 /// <summary>
250 /// Queue a work item
251 /// </summary>
252 /// <param name="callback">A callback to execute</param>
253 /// <param name="state">
254 /// The context object of the work item. Used for passing arguments to the work item.
255 /// </param>
256 /// <param name="postExecuteWorkItemCallback">
257 /// A delegate to call after the callback completion
258 /// </param>
259 /// <param name="callToPostExecute">Indicates on which cases to call to the post execute callback</param>
260 /// <param name="workItemPriority">The work item priority</param>
261 /// <returns>Returns a work item result</returns>
262 public IWorkItemResult QueueWorkItem(
263 WorkItemCallback callback,
264 object state,
265 PostExecuteWorkItemCallback postExecuteWorkItemCallback,
266 CallToPostExecute callToPostExecute,
267 WorkItemPriority workItemPriority)
268 {
269 PreQueueWorkItem();
270 WorkItem workItem = WorkItemFactory.CreateWorkItem(this, WIGStartInfo, callback, state, postExecuteWorkItemCallback, callToPostExecute, workItemPriority);
271 Enqueue(workItem);
272 return workItem.GetWorkItemResult();
273 }
274
275 #endregion
276
277 #region QueueWorkItem(Action<...>)
278
279 public IWorkItemResult QueueWorkItem(Action action)
280 {
281 return QueueWorkItem (action, SmartThreadPool.DefaultWorkItemPriority);
282 }
283
284 public IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority)
285 {
286 PreQueueWorkItem ();
287 WorkItem workItem = WorkItemFactory.CreateWorkItem (
288 this,
289 WIGStartInfo,
290 delegate
291 {
292 action.Invoke ();
293 return null;
294 }, priority);
295 Enqueue (workItem);
296 return workItem.GetWorkItemResult ();
297 }
298
299 public IWorkItemResult QueueWorkItem<T>(Action<T> action, T arg)
300 {
301 return QueueWorkItem<T> (action, arg, SmartThreadPool.DefaultWorkItemPriority);
302 }
303
304 public IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg, WorkItemPriority priority)
305 {
306 PreQueueWorkItem ();
307 WorkItem workItem = WorkItemFactory.CreateWorkItem (
308 this,
309 WIGStartInfo,
310 state =>
311 {
312 action.Invoke (arg);
313 return null;
314 },
315 WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null, priority);
316 Enqueue (workItem);
317 return workItem.GetWorkItemResult ();
318 }
319
320 public IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2)
321 {
322 return QueueWorkItem<T1, T2> (action, arg1, arg2, SmartThreadPool.DefaultWorkItemPriority);
323 }
324
325 public IWorkItemResult QueueWorkItem<T1, T2> (Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority)
326 {
327 PreQueueWorkItem ();
328 WorkItem workItem = WorkItemFactory.CreateWorkItem (
329 this,
330 WIGStartInfo,
331 state =>
332 {
333 action.Invoke (arg1, arg2);
334 return null;
335 },
336 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null, priority);
337 Enqueue (workItem);
338 return workItem.GetWorkItemResult ();
339 }
340
341 public IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3)
342 {
343 return QueueWorkItem<T1, T2, T3> (action, arg1, arg2, arg3, SmartThreadPool.DefaultWorkItemPriority);
344 ;
345 }
346
347 public IWorkItemResult QueueWorkItem<T1, T2, T3> (Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority)
348 {
349 PreQueueWorkItem ();
350 WorkItem workItem = WorkItemFactory.CreateWorkItem (
351 this,
352 WIGStartInfo,
353 state =>
354 {
355 action.Invoke (arg1, arg2, arg3);
356 return null;
357 },
358 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null, priority);
359 Enqueue (workItem);
360 return workItem.GetWorkItemResult ();
361 }
362
363 public IWorkItemResult QueueWorkItem<T1, T2, T3, T4>(
364 Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
365 {
366 return QueueWorkItem<T1, T2, T3, T4> (action, arg1, arg2, arg3, arg4,
367 SmartThreadPool.DefaultWorkItemPriority);
368 }
369
370 public IWorkItemResult QueueWorkItem<T1, T2, T3, T4> (
371 Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority)
372 {
373 PreQueueWorkItem ();
374 WorkItem workItem = WorkItemFactory.CreateWorkItem (
375 this,
376 WIGStartInfo,
377 state =>
378 {
379 action.Invoke (arg1, arg2, arg3, arg4);
380 return null;
381 },
382 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null, priority);
383 Enqueue (workItem);
384 return workItem.GetWorkItemResult ();
385 }
386
387 #endregion
388
389 #region QueueWorkItem(Func<...>)
390
391 public IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func)
392 {
393 PreQueueWorkItem();
394 WorkItem workItem = WorkItemFactory.CreateWorkItem(
395 this,
396 WIGStartInfo,
397 state =>
398 {
399 return func.Invoke();
400 });
401 Enqueue(workItem);
402 return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
403 }
404
405 public IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg)
406 {
407 PreQueueWorkItem();
408 WorkItem workItem = WorkItemFactory.CreateWorkItem(
409 this,
410 WIGStartInfo,
411 state =>
412 {
413 return func.Invoke(arg);
414 },
415 WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null);
416 Enqueue(workItem);
417 return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
418 }
419
420 public IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2)
421 {
422 PreQueueWorkItem();
423 WorkItem workItem = WorkItemFactory.CreateWorkItem(
424 this,
425 WIGStartInfo,
426 state =>
427 {
428 return func.Invoke(arg1, arg2);
429 },
430 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null);
431 Enqueue(workItem);
432 return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
433 }
434
435 public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>(
436 Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3)
437 {
438 PreQueueWorkItem();
439 WorkItem workItem = WorkItemFactory.CreateWorkItem(
440 this,
441 WIGStartInfo,
442 state =>
443 {
444 return func.Invoke(arg1, arg2, arg3);
445 },
446 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null);
447 Enqueue(workItem);
448 return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
449 }
450
451 public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>(
452 Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
453 {
454 PreQueueWorkItem();
455 WorkItem workItem = WorkItemFactory.CreateWorkItem(
456 this,
457 WIGStartInfo,
458 state =>
459 {
460 return func.Invoke(arg1, arg2, arg3, arg4);
461 },
462 WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null);
463 Enqueue(workItem);
464 return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
465 }
466
467 #endregion
468
469 #endregion
470 }
471} \ No newline at end of file
diff --git a/ThirdParty/SmartThreadPool/WorkItemsQueue.cs b/ThirdParty/SmartThreadPool/WorkItemsQueue.cs
index af5af07..e0bc916 100644
--- a/ThirdParty/SmartThreadPool/WorkItemsQueue.cs
+++ b/ThirdParty/SmartThreadPool/WorkItemsQueue.cs
@@ -1,109 +1,151 @@
1// Ami Bar
2// amibar@gmail.com
3
4using System; 1using System;
2using System.Collections.Generic;
5using System.Threading; 3using System.Threading;
6 4
7namespace Amib.Threading.Internal 5namespace Amib.Threading.Internal
8{ 6{
9 #region WorkItemsQueue class 7 #region WorkItemsQueue class
10 8
11 /// <summary> 9 /// <summary>
12 /// WorkItemsQueue class. 10 /// WorkItemsQueue class.
13 /// </summary> 11 /// </summary>
14 public class WorkItemsQueue : IDisposable 12 public class WorkItemsQueue : IDisposable
15 { 13 {
16 #region Member variables 14 #region Member variables
17 15
18 /// <summary> 16 /// <summary>
19 /// Waiters queue (implemented as stack). 17 /// Waiters queue (implemented as stack).
20 /// </summary> 18 /// </summary>
21 private WaiterEntry _headWaiterEntry = new WaiterEntry(); 19 private readonly WaiterEntry _headWaiterEntry = new WaiterEntry();
22 20
23 /// <summary> 21 /// <summary>
24 /// Waiters count 22 /// Waiters count
25 /// </summary> 23 /// </summary>
26 private int _waitersCount = 0; 24 private int _waitersCount = 0;
27 25
28 /// <summary> 26 /// <summary>
29 /// Work items queue 27 /// Work items queue
30 /// </summary> 28 /// </summary>
31 private PriorityQueue _workItems = new PriorityQueue(); 29 private readonly PriorityQueue _workItems = new PriorityQueue();
32 30
33 /// <summary> 31 /// <summary>
34 /// Indicate that work items are allowed to be queued 32 /// Indicate that work items are allowed to be queued
35 /// </summary> 33 /// </summary>
36 private bool _isWorkItemsQueueActive = true; 34 private bool _isWorkItemsQueueActive = true;
37 35
38 /// <summary>
39 /// Each thread in the thread pool keeps its own waiter entry.
40 /// </summary>
41 [ThreadStatic]
42 private static WaiterEntry _waiterEntry;
43 36
44 /// <summary> 37#if (WINDOWS_PHONE)
45 /// A flag that indicates if the WorkItemsQueue has been disposed. 38 private static readonly Dictionary<int, WaiterEntry> _waiterEntries = new Dictionary<int, WaiterEntry>();
46 /// </summary> 39#elif (_WINDOWS_CE)
47 private bool _isDisposed = false; 40 private static LocalDataStoreSlot _waiterEntrySlot = Thread.AllocateDataSlot();
41#else
48 42
49 #endregion 43 [ThreadStatic]
44 private static WaiterEntry _waiterEntry;
45#endif
50 46
51 #region Public properties
52 47
53 /// <summary> 48 /// <summary>
54 /// Returns the current number of work items in the queue 49 /// Each thread in the thread pool keeps its own waiter entry.
55 /// </summary> 50 /// </summary>
56 public int Count 51 private static WaiterEntry CurrentWaiterEntry
57 { 52 {
53#if (WINDOWS_PHONE)
58 get 54 get
59 { 55 {
60 lock(this) 56 lock (_waiterEntries)
61 { 57 {
62 ValidateNotDisposed(); 58 WaiterEntry waiterEntry;
63 return _workItems.Count; 59 if (_waiterEntries.TryGetValue(Thread.CurrentThread.ManagedThreadId, out waiterEntry))
60 {
61 return waiterEntry;
62 }
64 } 63 }
64 return null;
65 } 65 }
66 } 66 set
67
68 /// <summary>
69 /// Returns the current number of waiters
70 /// </summary>
71 public int WaitersCount
72 {
73 get
74 { 67 {
75 lock(this) 68 lock (_waiterEntries)
76 { 69 {
77 ValidateNotDisposed(); 70 _waiterEntries[Thread.CurrentThread.ManagedThreadId] = value;
78 return _waitersCount;
79 } 71 }
80 } 72 }
73#elif (_WINDOWS_CE)
74 get
75 {
76 return Thread.GetData(_waiterEntrySlot) as WaiterEntry;
77 }
78 set
79 {
80 Thread.SetData(_waiterEntrySlot, value);
81 }
82#else
83 get
84 {
85 return _waiterEntry;
86 }
87 set
88 {
89 _waiterEntry = value;
90 }
91#endif
81 } 92 }
82 93
94 /// <summary>
95 /// A flag that indicates if the WorkItemsQueue has been disposed.
96 /// </summary>
97 private bool _isDisposed = false;
83 98
84 #endregion 99 #endregion
85 100
86 #region Public methods 101 #region Public properties
87 102
88 /// <summary> 103 /// <summary>
89 /// Enqueue a work item to the queue. 104 /// Returns the current number of work items in the queue
90 /// </summary> 105 /// </summary>
91 public bool EnqueueWorkItem(WorkItem workItem) 106 public int Count
92 { 107 {
93 // A work item cannot be null, since null is used in the 108 get
94 // WaitForWorkItem() method to indicate timeout or cancel 109 {
95 if (null == workItem) 110 return _workItems.Count;
96 { 111 }
97 throw new ArgumentNullException("workItem" , "workItem cannot be null"); 112 }
98 } 113
114 /// <summary>
115 /// Returns the current number of waiters
116 /// </summary>
117 public int WaitersCount
118 {
119 get
120 {
121 return _waitersCount;
122 }
123 }
99 124
100 bool enqueue = true;
101 125
102 // First check if there is a waiter waiting for work item. During 126 #endregion
103 // the check, timed out waiters are ignored. If there is no 127
104 // waiter then the work item is queued. 128 #region Public methods
105 lock(this) 129
106 { 130 /// <summary>
131 /// Enqueue a work item to the queue.
132 /// </summary>
133 public bool EnqueueWorkItem(WorkItem workItem)
134 {
135 // A work item cannot be null, since null is used in the
136 // WaitForWorkItem() method to indicate timeout or cancel
137 if (null == workItem)
138 {
139 throw new ArgumentNullException("workItem" , "workItem cannot be null");
140 }
141
142 bool enqueue = true;
143
144 // First check if there is a waiter waiting for work item. During
145 // the check, timed out waiters are ignored. If there is no
146 // waiter then the work item is queued.
147 lock(this)
148 {
107 ValidateNotDisposed(); 149 ValidateNotDisposed();
108 150
109 if (!_isWorkItemsQueueActive) 151 if (!_isWorkItemsQueueActive)
@@ -111,56 +153,55 @@ namespace Amib.Threading.Internal
111 return false; 153 return false;
112 } 154 }
113 155
114 while(_waitersCount > 0) 156 while(_waitersCount > 0)
115 { 157 {
116 // Dequeue a waiter. 158 // Dequeue a waiter.
117 WaiterEntry waiterEntry = PopWaiter(); 159 WaiterEntry waiterEntry = PopWaiter();
118 160
119 // Signal the waiter. On success break the loop 161 // Signal the waiter. On success break the loop
120 if (waiterEntry.Signal(workItem)) 162 if (waiterEntry.Signal(workItem))
121 { 163 {
122 enqueue = false; 164 enqueue = false;
123 break; 165 break;
124 } 166 }
125 } 167 }
126 168
127 if (enqueue) 169 if (enqueue)
128 { 170 {
129 // Enqueue the work item 171 // Enqueue the work item
130 _workItems.Enqueue(workItem); 172 _workItems.Enqueue(workItem);
131 } 173 }
132 } 174 }
133 return true; 175 return true;
134 } 176 }
135 177
136 178
137 /// <summary> 179 /// <summary>
138 /// Waits for a work item or exits on timeout or cancel 180 /// Waits for a work item or exits on timeout or cancel
139 /// </summary> 181 /// </summary>
140 /// <param name="millisecondsTimeout">Timeout in milliseconds</param> 182 /// <param name="millisecondsTimeout">Timeout in milliseconds</param>
141 /// <param name="cancelEvent">Cancel wait handle</param> 183 /// <param name="cancelEvent">Cancel wait handle</param>
142 /// <returns>Returns true if the resource was granted</returns> 184 /// <returns>Returns true if the resource was granted</returns>
143 public WorkItem DequeueWorkItem( 185 public WorkItem DequeueWorkItem(
144 int millisecondsTimeout, 186 int millisecondsTimeout,
145 WaitHandle cancelEvent) 187 WaitHandle cancelEvent)
146 { 188 {
147 /// This method cause the caller to wait for a work item. 189 // This method cause the caller to wait for a work item.
148 /// If there is at least one waiting work item then the 190 // If there is at least one waiting work item then the
149 /// method returns immidiately with true. 191 // method returns immidiately with it.
150 /// 192 //
151 /// If there are no waiting work items then the caller 193 // If there are no waiting work items then the caller
152 /// is queued between other waiters for a work item to arrive. 194 // is queued between other waiters for a work item to arrive.
153 /// 195 //
154 /// If a work item didn't come within millisecondsTimeout or 196 // If a work item didn't come within millisecondsTimeout or
155 /// the user canceled the wait by signaling the cancelEvent 197 // the user canceled the wait by signaling the cancelEvent
156 /// then the method returns false to indicate that the caller 198 // then the method returns null to indicate that the caller
157 /// didn't get a work item. 199 // didn't get a work item.
158 200
159 WaiterEntry waiterEntry = null; 201 WaiterEntry waiterEntry;
160 WorkItem workItem = null; 202 WorkItem workItem = null;
161 203 lock (this)
162 lock(this) 204 {
163 {
164 ValidateNotDisposed(); 205 ValidateNotDisposed();
165 206
166 // If there are waiting work items then take one and return. 207 // If there are waiting work items then take one and return.
@@ -169,80 +210,79 @@ namespace Amib.Threading.Internal
169 workItem = _workItems.Dequeue() as WorkItem; 210 workItem = _workItems.Dequeue() as WorkItem;
170 return workItem; 211 return workItem;
171 } 212 }
172 // No waiting work items ...
173 else
174 {
175 // Get the wait entry for the waiters queue
176 waiterEntry = GetThreadWaiterEntry();
177
178 // Put the waiter with the other waiters
179 PushWaiter(waiterEntry);
180 }
181 }
182
183 // Prepare array of wait handle for the WaitHandle.WaitAny()
184 WaitHandle [] waitHandles = new WaitHandle [] {
185 waiterEntry.WaitHandle,
186 cancelEvent };
187
188 // Wait for an available resource, cancel event, or timeout.
189 213
190 // During the wait we are supposes to exit the synchronization 214 // No waiting work items ...
191 // domain. (Placing true as the third argument of the WaitAny()) 215
192 // It just doesn't work, I don't know why, so I have lock(this) 216 // Get the waiter entry for the waiters queue
193 // statments insted of one. 217 waiterEntry = GetThreadWaiterEntry();
194 218
195 int index = WaitHandle.WaitAny( 219 // Put the waiter with the other waiters
196 waitHandles, 220 PushWaiter(waiterEntry);
197 millisecondsTimeout, 221 }
198 true); 222
199 223 // Prepare array of wait handle for the WaitHandle.WaitAny()
200 lock(this) 224 WaitHandle [] waitHandles = new WaitHandle[] {
201 { 225 waiterEntry.WaitHandle,
202 // success is true if it got a work item. 226 cancelEvent };
203 bool success = (0 == index); 227
204 228 // Wait for an available resource, cancel event, or timeout.
205 // The timeout variable is used only for readability. 229
206 // (We treat cancel as timeout) 230 // During the wait we are supposes to exit the synchronization
207 bool timeout = !success; 231 // domain. (Placing true as the third argument of the WaitAny())
208 232 // It just doesn't work, I don't know why, so I have two lock(this)
209 // On timeout update the waiterEntry that it is timed out 233 // statments instead of one.
210 if (timeout) 234
211 { 235 int index = STPEventWaitHandle.WaitAny(
212 // The Timeout() fails if the waiter has already been signaled 236 waitHandles,
213 timeout = waiterEntry.Timeout(); 237 millisecondsTimeout,
214 238 true);
215 // On timeout remove the waiter from the queue. 239
216 // Note that the complexity is O(1). 240 lock(this)
217 if(timeout) 241 {
218 { 242 // success is true if it got a work item.
219 RemoveWaiter(waiterEntry, false); 243 bool success = (0 == index);
220 } 244
221 245 // The timeout variable is used only for readability.
222 // Again readability 246 // (We treat cancel as timeout)
223 success = !timeout; 247 bool timeout = !success;
224 } 248
225 249 // On timeout update the waiterEntry that it is timed out
226 // On success return the work item 250 if (timeout)
227 if (success) 251 {
228 { 252 // The Timeout() fails if the waiter has already been signaled
229 workItem = waiterEntry.WorkItem; 253 timeout = waiterEntry.Timeout();
230 254
231 if (null == workItem) 255 // On timeout remove the waiter from the queue.
232 { 256 // Note that the complexity is O(1).
233 workItem = _workItems.Dequeue() as WorkItem; 257 if(timeout)
234 } 258 {
235 } 259 RemoveWaiter(waiterEntry, false);
236 } 260 }
237 // On failure return null. 261
238 return workItem; 262 // Again readability
239 } 263 success = !timeout;
264 }
265
266 // On success return the work item
267 if (success)
268 {
269 workItem = waiterEntry.WorkItem;
270
271 if (null == workItem)
272 {
273 workItem = _workItems.Dequeue() as WorkItem;
274 }
275 }
276 }
277 // On failure return null.
278 return workItem;
279 }
240 280
241 /// <summary> 281 /// <summary>
242 /// Cleanup the work items queue, hence no more work 282 /// Cleanup the work items queue, hence no more work
243 /// items are allowed to be queue 283 /// items are allowed to be queue
244 /// </summary> 284 /// </summary>
245 protected virtual void Cleanup() 285 private void Cleanup()
246 { 286 {
247 lock(this) 287 lock(this)
248 { 288 {
@@ -271,301 +311,312 @@ namespace Amib.Threading.Internal
271 // Tell the waiters that they were timed out. 311 // Tell the waiters that they were timed out.
272 // It won't signal them to exit, but to ignore their 312 // It won't signal them to exit, but to ignore their
273 // next work item. 313 // next work item.
274 while(_waitersCount > 0) 314 while(_waitersCount > 0)
275 { 315 {
276 WaiterEntry waiterEntry = PopWaiter(); 316 WaiterEntry waiterEntry = PopWaiter();
277 waiterEntry.Timeout(); 317 waiterEntry.Timeout();
278 } 318 }
279 } 319 }
280 } 320 }
281 321
282 #endregion 322 public object[] GetStates()
283
284 #region Private methods
285
286 /// <summary>
287 /// Returns the WaiterEntry of the current thread
288 /// </summary>
289 /// <returns></returns>
290 /// In order to avoid creation and destuction of WaiterEntry
291 /// objects each thread has its own WaiterEntry object.
292 private WaiterEntry GetThreadWaiterEntry()
293 { 323 {
294 if (null == _waiterEntry) 324 lock (this)
295 { 325 {
296 _waiterEntry = new WaiterEntry(); 326 object[] states = new object[_workItems.Count];
327 int i = 0;
328 foreach (WorkItem workItem in _workItems)
329 {
330 states[i] = workItem.GetWorkItemResult().State;
331 ++i;
332 }
333 return states;
297 } 334 }
298 _waiterEntry.Reset();
299 return _waiterEntry;
300 } 335 }
301 336
302 #region Waiters stack methods 337 #endregion
303 338
304 /// <summary> 339 #region Private methods
305 /// Push a new waiter into the waiter's stack 340
306 /// </summary> 341 /// <summary>
307 /// <param name="newWaiterEntry">A waiter to put in the stack</param> 342 /// Returns the WaiterEntry of the current thread
308 public void PushWaiter(WaiterEntry newWaiterEntry) 343 /// </summary>
309 { 344 /// <returns></returns>
310 // Remove the waiter if it is already in the stack and 345 /// In order to avoid creation and destuction of WaiterEntry
311 // update waiter's count as needed 346 /// objects each thread has its own WaiterEntry object.
312 RemoveWaiter(newWaiterEntry, false); 347 private static WaiterEntry GetThreadWaiterEntry()
313 348 {
314 // If the stack is empty then newWaiterEntry is the new head of the stack 349 if (null == CurrentWaiterEntry)
315 if (null == _headWaiterEntry._nextWaiterEntry) 350 {
316 { 351 CurrentWaiterEntry = new WaiterEntry();
317 _headWaiterEntry._nextWaiterEntry = newWaiterEntry; 352 }
318 newWaiterEntry._prevWaiterEntry = _headWaiterEntry; 353 CurrentWaiterEntry.Reset();
319 354 return CurrentWaiterEntry;
320 } 355 }
321 // If the stack is not empty then put newWaiterEntry as the new head 356
322 // of the stack. 357 #region Waiters stack methods
323 else 358
324 { 359 /// <summary>
325 // Save the old first waiter entry 360 /// Push a new waiter into the waiter's stack
326 WaiterEntry oldFirstWaiterEntry = _headWaiterEntry._nextWaiterEntry; 361 /// </summary>
362 /// <param name="newWaiterEntry">A waiter to put in the stack</param>
363 public void PushWaiter(WaiterEntry newWaiterEntry)
364 {
365 // Remove the waiter if it is already in the stack and
366 // update waiter's count as needed
367 RemoveWaiter(newWaiterEntry, false);
368
369 // If the stack is empty then newWaiterEntry is the new head of the stack
370 if (null == _headWaiterEntry._nextWaiterEntry)
371 {
372 _headWaiterEntry._nextWaiterEntry = newWaiterEntry;
373 newWaiterEntry._prevWaiterEntry = _headWaiterEntry;
374
375 }
376 // If the stack is not empty then put newWaiterEntry as the new head
377 // of the stack.
378 else
379 {
380 // Save the old first waiter entry
381 WaiterEntry oldFirstWaiterEntry = _headWaiterEntry._nextWaiterEntry;
327 382
328 // Update the links 383 // Update the links
329 _headWaiterEntry._nextWaiterEntry = newWaiterEntry; 384 _headWaiterEntry._nextWaiterEntry = newWaiterEntry;
330 newWaiterEntry._nextWaiterEntry = oldFirstWaiterEntry; 385 newWaiterEntry._nextWaiterEntry = oldFirstWaiterEntry;
331 newWaiterEntry._prevWaiterEntry = _headWaiterEntry; 386 newWaiterEntry._prevWaiterEntry = _headWaiterEntry;
332 oldFirstWaiterEntry._prevWaiterEntry = newWaiterEntry; 387 oldFirstWaiterEntry._prevWaiterEntry = newWaiterEntry;
333 } 388 }
334 389
335 // Increment the number of waiters 390 // Increment the number of waiters
336 ++_waitersCount; 391 ++_waitersCount;
337 } 392 }
338 393
339 /// <summary> 394 /// <summary>
340 /// Pop a waiter from the waiter's stack 395 /// Pop a waiter from the waiter's stack
341 /// </summary> 396 /// </summary>
342 /// <returns>Returns the first waiter in the stack</returns> 397 /// <returns>Returns the first waiter in the stack</returns>
343 private WaiterEntry PopWaiter() 398 private WaiterEntry PopWaiter()
344 { 399 {
345 // Store the current stack head 400 // Store the current stack head
346 WaiterEntry oldFirstWaiterEntry = _headWaiterEntry._nextWaiterEntry; 401 WaiterEntry oldFirstWaiterEntry = _headWaiterEntry._nextWaiterEntry;
347 402
348 // Store the new stack head 403 // Store the new stack head
349 WaiterEntry newHeadWaiterEntry = oldFirstWaiterEntry._nextWaiterEntry; 404 WaiterEntry newHeadWaiterEntry = oldFirstWaiterEntry._nextWaiterEntry;
350 405
351 // Update the old stack head list links and decrement the number 406 // Update the old stack head list links and decrement the number
352 // waiters. 407 // waiters.
353 RemoveWaiter(oldFirstWaiterEntry, true); 408 RemoveWaiter(oldFirstWaiterEntry, true);
354 409
355 // Update the new stack head 410 // Update the new stack head
356 _headWaiterEntry._nextWaiterEntry = newHeadWaiterEntry; 411 _headWaiterEntry._nextWaiterEntry = newHeadWaiterEntry;
357 if (null != newHeadWaiterEntry) 412 if (null != newHeadWaiterEntry)
358 { 413 {
359 newHeadWaiterEntry._prevWaiterEntry = _headWaiterEntry; 414 newHeadWaiterEntry._prevWaiterEntry = _headWaiterEntry;
360 } 415 }
361 416
362 // Return the old stack head 417 // Return the old stack head
363 return oldFirstWaiterEntry; 418 return oldFirstWaiterEntry;
364 } 419 }
365 420
366 /// <summary> 421 /// <summary>
367 /// Remove a waiter from the stack 422 /// Remove a waiter from the stack
368 /// </summary> 423 /// </summary>
369 /// <param name="waiterEntry">A waiter entry to remove</param> 424 /// <param name="waiterEntry">A waiter entry to remove</param>
370 /// <param name="popDecrement">If true the waiter count is always decremented</param> 425 /// <param name="popDecrement">If true the waiter count is always decremented</param>
371 private void RemoveWaiter(WaiterEntry waiterEntry, bool popDecrement) 426 private void RemoveWaiter(WaiterEntry waiterEntry, bool popDecrement)
372 { 427 {
373 // Store the prev entry in the list 428 // Store the prev entry in the list
374 WaiterEntry prevWaiterEntry = waiterEntry._prevWaiterEntry; 429 WaiterEntry prevWaiterEntry = waiterEntry._prevWaiterEntry;
375 430
376 // Store the next entry in the list 431 // Store the next entry in the list
377 WaiterEntry nextWaiterEntry = waiterEntry._nextWaiterEntry; 432 WaiterEntry nextWaiterEntry = waiterEntry._nextWaiterEntry;
378 433
379 // A flag to indicate if we need to decrement the waiters count. 434 // A flag to indicate if we need to decrement the waiters count.
380 // If we got here from PopWaiter then we must decrement. 435 // If we got here from PopWaiter then we must decrement.
381 // If we got here from PushWaiter then we decrement only if 436 // If we got here from PushWaiter then we decrement only if
382 // the waiter was already in the stack. 437 // the waiter was already in the stack.
383 bool decrementCounter = popDecrement; 438 bool decrementCounter = popDecrement;
384 439
385 // Null the waiter's entry links 440 // Null the waiter's entry links
386 waiterEntry._prevWaiterEntry = null; 441 waiterEntry._prevWaiterEntry = null;
387 waiterEntry._nextWaiterEntry = null; 442 waiterEntry._nextWaiterEntry = null;
388 443
389 // If the waiter entry had a prev link then update it. 444 // If the waiter entry had a prev link then update it.
390 // It also means that the waiter is already in the list and we 445 // It also means that the waiter is already in the list and we
391 // need to decrement the waiters count. 446 // need to decrement the waiters count.
392 if (null != prevWaiterEntry) 447 if (null != prevWaiterEntry)
393 { 448 {
394 prevWaiterEntry._nextWaiterEntry = nextWaiterEntry; 449 prevWaiterEntry._nextWaiterEntry = nextWaiterEntry;
395 decrementCounter = true; 450 decrementCounter = true;
396 } 451 }
397 452
398 // If the waiter entry had a next link then update it. 453 // If the waiter entry had a next link then update it.
399 // It also means that the waiter is already in the list and we 454 // It also means that the waiter is already in the list and we
400 // need to decrement the waiters count. 455 // need to decrement the waiters count.
401 if (null != nextWaiterEntry) 456 if (null != nextWaiterEntry)
402 { 457 {
403 nextWaiterEntry._prevWaiterEntry = prevWaiterEntry; 458 nextWaiterEntry._prevWaiterEntry = prevWaiterEntry;
404 decrementCounter = true; 459 decrementCounter = true;
405 } 460 }
406 461
407 // Decrement the waiters count if needed 462 // Decrement the waiters count if needed
408 if (decrementCounter) 463 if (decrementCounter)
409 { 464 {
410 --_waitersCount; 465 --_waitersCount;
411 } 466 }
412 } 467 }
413 468
414 #endregion 469 #endregion
415 470
416 #endregion 471 #endregion
417 472
418 #region WaiterEntry class 473 #region WaiterEntry class
419 474
420 // A waiter entry in the _waiters queue. 475 // A waiter entry in the _waiters queue.
421 public class WaiterEntry : IDisposable 476 public sealed class WaiterEntry : IDisposable
422 { 477 {
423 #region Member variables 478 #region Member variables
424 479
425 /// <summary> 480 /// <summary>
426 /// Event to signal the waiter that it got the work item. 481 /// Event to signal the waiter that it got the work item.
427 /// </summary> 482 /// </summary>
428 private AutoResetEvent _waitHandle = new AutoResetEvent(false); 483 //private AutoResetEvent _waitHandle = new AutoResetEvent(false);
429 484 private AutoResetEvent _waitHandle = EventWaitHandleFactory.CreateAutoResetEvent();
430 /// <summary> 485
431 /// Flag to know if this waiter already quited from the queue 486 /// <summary>
432 /// because of a timeout. 487 /// Flag to know if this waiter already quited from the queue
433 /// </summary> 488 /// because of a timeout.
434 private bool _isTimedout = false; 489 /// </summary>
435 490 private bool _isTimedout = false;
436 /// <summary> 491
437 /// Flag to know if the waiter was signaled and got a work item. 492 /// <summary>
438 /// </summary> 493 /// Flag to know if the waiter was signaled and got a work item.
439 private bool _isSignaled = false; 494 /// </summary>
495 private bool _isSignaled = false;
440 496
441 /// <summary> 497 /// <summary>
442 /// A work item that passed directly to the waiter withou going 498 /// A work item that passed directly to the waiter withou going
443 /// through the queue 499 /// through the queue
444 /// </summary> 500 /// </summary>
445 private WorkItem _workItem = null; 501 private WorkItem _workItem = null;
446 502
447 private bool _isDisposed = false; 503 private bool _isDisposed = false;
448 504
449 // Linked list members 505 // Linked list members
450 internal WaiterEntry _nextWaiterEntry = null; 506 internal WaiterEntry _nextWaiterEntry = null;
451 internal WaiterEntry _prevWaiterEntry = null; 507 internal WaiterEntry _prevWaiterEntry = null;
452 508
453 #endregion 509 #endregion
454 510
455 #region Construction 511 #region Construction
456 512
457 public WaiterEntry() 513 public WaiterEntry()
458 { 514 {
459 Reset(); 515 Reset();
460 } 516 }
461 517
462 #endregion 518 #endregion
463 519
464 #region Public methods 520 #region Public methods
465 521
466 public WaitHandle WaitHandle 522 public WaitHandle WaitHandle
467 { 523 {
468 get { return _waitHandle; } 524 get { return _waitHandle; }
469 } 525 }
470 526
471 public WorkItem WorkItem 527 public WorkItem WorkItem
472 { 528 {
473 get 529 get
474 { 530 {
475 lock(this) 531 return _workItem;
476 { 532 }
477 return _workItem; 533 }
478 } 534
479 } 535 /// <summary>
480 } 536 /// Signal the waiter that it got a work item.
481 537 /// </summary>
482 /// <summary> 538 /// <returns>Return true on success</returns>
483 /// Signal the waiter that it got a work item. 539 /// The method fails if Timeout() preceded its call
484 /// </summary> 540 public bool Signal(WorkItem workItem)
485 /// <returns>Return true on success</returns> 541 {
486 /// The method fails if Timeout() preceded its call 542 lock(this)
487 public bool Signal(WorkItem workItem) 543 {
488 { 544 if (!_isTimedout)
489 lock(this) 545 {
490 { 546 _workItem = workItem;
491 if (!_isTimedout) 547 _isSignaled = true;
492 { 548 _waitHandle.Set();
493 _workItem = workItem; 549 return true;
494 _isSignaled = true; 550 }
495 _waitHandle.Set(); 551 }
496 return true; 552 return false;
497 } 553 }
498 } 554
499 return false; 555 /// <summary>
500 } 556 /// Mark the wait entry that it has been timed out
501 557 /// </summary>
502 /// <summary> 558 /// <returns>Return true on success</returns>
503 /// Mark the wait entry that it has been timed out 559 /// The method fails if Signal() preceded its call
504 /// </summary> 560 public bool Timeout()
505 /// <returns>Return true on success</returns> 561 {
506 /// The method fails if Signal() preceded its call 562 lock(this)
507 public bool Timeout() 563 {
508 { 564 // Time out can happen only if the waiter wasn't marked as
509 lock(this) 565 // signaled
566 if (!_isSignaled)
567 {
568 // We don't remove the waiter from the queue, the DequeueWorkItem
569 // method skips _waiters that were timed out.
570 _isTimedout = true;
571 return true;
572 }
573 }
574 return false;
575 }
576
577 /// <summary>
578 /// Reset the wait entry so it can be used again
579 /// </summary>
580 public void Reset()
581 {
582 _workItem = null;
583 _isTimedout = false;
584 _isSignaled = false;
585 _waitHandle.Reset();
586 }
587
588 /// <summary>
589 /// Free resources
590 /// </summary>
591 public void Close()
592 {
593 if (null != _waitHandle)
594 {
595 _waitHandle.Close();
596 _waitHandle = null;
597 }
598 }
599
600 #endregion
601
602 #region IDisposable Members
603
604 public void Dispose()
605 {
606 lock (this)
510 { 607 {
511 // Time out can happen only if the waiter wasn't marked as 608 if (!_isDisposed)
512 // signaled
513 if (!_isSignaled)
514 { 609 {
515 // We don't remove the waiter from the queue, the DequeueWorkItem 610 Close();
516 // method skips _waiters that were timed out.
517 _isTimedout = true;
518 return true;
519 } 611 }
520 }
521 return false;
522 }
523
524 /// <summary>
525 /// Reset the wait entry so it can be used again
526 /// </summary>
527 public void Reset()
528 {
529 _workItem = null;
530 _isTimedout = false;
531 _isSignaled = false;
532 _waitHandle.Reset();
533 }
534
535 /// <summary>
536 /// Free resources
537 /// </summary>
538 public void Close()
539 {
540 if (null != _waitHandle)
541 {
542 _waitHandle.Close();
543 _waitHandle = null;
544 }
545 }
546
547 #endregion
548
549 #region IDisposable Members
550
551 public void Dispose()
552 {
553 if (!_isDisposed)
554 {
555 Close();
556 _isDisposed = true; 612 _isDisposed = true;
557 } 613 }
558 } 614 }
559 615
560 ~WaiterEntry() 616 #endregion
561 { 617 }
562 Dispose();
563 }
564 618
565 #endregion 619 #endregion
566 }
567
568 #endregion
569 620
570 #region IDisposable Members 621 #region IDisposable Members
571 622
@@ -574,14 +625,8 @@ namespace Amib.Threading.Internal
574 if (!_isDisposed) 625 if (!_isDisposed)
575 { 626 {
576 Cleanup(); 627 Cleanup();
577 _isDisposed = true;
578 GC.SuppressFinalize(this);
579 } 628 }
580 } 629 _isDisposed = true;
581
582 ~WorkItemsQueue()
583 {
584 Cleanup();
585 } 630 }
586 631
587 private void ValidateNotDisposed() 632 private void ValidateNotDisposed()
@@ -595,6 +640,6 @@ namespace Amib.Threading.Internal
595 #endregion 640 #endregion
596 } 641 }
597 642
598 #endregion 643 #endregion
599} 644}
600 645
diff --git a/bin/OpenMetaverse.Http.XML b/bin/OpenMetaverse.Http.XML
deleted file mode 100644
index 23173ae..0000000
--- a/bin/OpenMetaverse.Http.XML
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0"?>
2<doc>
3 <assembly>
4 <name>OpenMetaverse.Http</name>
5 </assembly>
6 <members>
7 <member name="F:OpenMetaverse.Http.EventQueueServer.CONNECTION_TIMEOUT">
8 <summary>The number of milliseconds to wait before the connection times out
9 and an empty response is sent to the client. This value should be higher
10 than BATCH_WAIT_INTERVAL for the timeout to function properly</summary>
11 </member>
12 <member name="F:OpenMetaverse.Http.EventQueueServer.BATCH_WAIT_INTERVAL">
13 <summary>This interval defines the amount of time to wait, in milliseconds,
14 for new events to show up on the queue before sending a response to the
15 client and completing the HTTP request. The interval also specifies the
16 maximum time that can pass before the queue shuts down after Stop() or the
17 class destructor is called</summary>
18 </member>
19 <member name="F:OpenMetaverse.Http.EventQueueServer.MAX_EVENTS_PER_RESPONSE">
20 <summary>Since multiple events can be batched together and sent in the same
21 response, this prevents the event queue thread from infinitely dequeueing
22 events and never sending a response if there is a constant stream of new
23 events</summary>
24 </member>
25 <member name="T:OpenMetaverse.Http.Logger">
26 <summary>
27 Singleton logging class for the entire library
28 </summary>
29 </member>
30 <member name="F:OpenMetaverse.Http.Logger.Log">
31 <summary>log4net logging engine</summary>
32 </member>
33 <member name="F:OpenMetaverse.Http.log4netLogWriter.Instance">
34 <summary>
35 Singleton instance of this class
36 </summary>
37 </member>
38 <member name="T:OpenMetaverse.Http.CapsRequestCallback">
39 <summary>
40 Delegate for handling incoming HTTP requests through a capability
41 </summary>
42 <param name="context">Client context</param>
43 <param name="request">HTTP request</param>
44 <param name="response">HTTP response</param>
45 <param name="state">User-defined state object</param>
46 </member>
47 <member name="F:OpenMetaverse.Http.EventQueueClient.REQUEST_TIMEOUT">
48 <summary>=</summary>
49 </member>
50 <member name="F:OpenMetaverse.Http.EventQueueClient._errorCount">
51 <summary>Number of times we've received an unknown CAPS exception in series.</summary>
52 </member>
53 <member name="F:OpenMetaverse.Http.EventQueueClient._random">
54 <summary>For exponential backoff on error.</summary>
55 </member>
56 </members>
57</doc>
diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
index 30b9c7b..100916c 100755
--- a/bin/OpenMetaverse.Rendering.Meshmerizer.dll
+++ b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
Binary files differ
diff --git a/bin/OpenMetaverse.StructuredData.XML b/bin/OpenMetaverse.StructuredData.XML
index d6c31df..789ad5b 100644
--- a/bin/OpenMetaverse.StructuredData.XML
+++ b/bin/OpenMetaverse.StructuredData.XML
@@ -1,63 +1,55 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<doc> 2<doc>
3 <assembly> 3 <assembly>
4 <name>/home/root/libomv-0.9.1-source/bin/OpenMetaverse.StructuredData</name> 4 <name>OpenMetaverse.StructuredData</name>
5 </assembly> 5 </assembly>
6 <members> 6 <members>
7 <member name="T:OpenMetaverse.StructuredData.OSDType"> 7 <member name="T:OpenMetaverse.StructuredData.OSDType">
8 <summary> 8 <summary>
9
9 </summary> 10 </summary>
10 </member> 11 </member>
11 <member name="F:OpenMetaverse.StructuredData.OSDType.Unknown"> 12 <member name="F:OpenMetaverse.StructuredData.OSDType.Unknown">
12 <summary> 13 <summary></summary>
13 </summary>
14 </member> 14 </member>
15 <member name="F:OpenMetaverse.StructuredData.OSDType.Boolean"> 15 <member name="F:OpenMetaverse.StructuredData.OSDType.Boolean">
16 <summary> 16 <summary></summary>
17 </summary>
18 </member> 17 </member>
19 <member name="F:OpenMetaverse.StructuredData.OSDType.Integer"> 18 <member name="F:OpenMetaverse.StructuredData.OSDType.Integer">
20 <summary> 19 <summary></summary>
21 </summary>
22 </member> 20 </member>
23 <member name="F:OpenMetaverse.StructuredData.OSDType.Real"> 21 <member name="F:OpenMetaverse.StructuredData.OSDType.Real">
24 <summary> 22 <summary></summary>
25 </summary>
26 </member> 23 </member>
27 <member name="F:OpenMetaverse.StructuredData.OSDType.String"> 24 <member name="F:OpenMetaverse.StructuredData.OSDType.String">
28 <summary> 25 <summary></summary>
29 </summary>
30 </member> 26 </member>
31 <member name="F:OpenMetaverse.StructuredData.OSDType.UUID"> 27 <member name="F:OpenMetaverse.StructuredData.OSDType.UUID">
32 <summary> 28 <summary></summary>
33 </summary>
34 </member> 29 </member>
35 <member name="F:OpenMetaverse.StructuredData.OSDType.Date"> 30 <member name="F:OpenMetaverse.StructuredData.OSDType.Date">
36 <summary> 31 <summary></summary>
37 </summary>
38 </member> 32 </member>
39 <member name="F:OpenMetaverse.StructuredData.OSDType.URI"> 33 <member name="F:OpenMetaverse.StructuredData.OSDType.URI">
40 <summary> 34 <summary></summary>
41 </summary>
42 </member> 35 </member>
43 <member name="F:OpenMetaverse.StructuredData.OSDType.Binary"> 36 <member name="F:OpenMetaverse.StructuredData.OSDType.Binary">
44 <summary> 37 <summary></summary>
45 </summary>
46 </member> 38 </member>
47 <member name="F:OpenMetaverse.StructuredData.OSDType.Map"> 39 <member name="F:OpenMetaverse.StructuredData.OSDType.Map">
48 <summary> 40 <summary></summary>
49 </summary>
50 </member> 41 </member>
51 <member name="F:OpenMetaverse.StructuredData.OSDType.Array"> 42 <member name="F:OpenMetaverse.StructuredData.OSDType.Array">
52 <summary> 43 <summary></summary>
53 </summary>
54 </member> 44 </member>
55 <member name="T:OpenMetaverse.StructuredData.OSDException"> 45 <member name="T:OpenMetaverse.StructuredData.OSDException">
56 <summary> 46 <summary>
47
57 </summary> 48 </summary>
58 </member> 49 </member>
59 <member name="T:OpenMetaverse.StructuredData.OSD"> 50 <member name="T:OpenMetaverse.StructuredData.OSD">
60 <summary> 51 <summary>
52
61 </summary> 53 </summary>
62 </member> 54 </member>
63 <member name="M:OpenMetaverse.StructuredData.OSD.SerializeMembers(System.Object)"> 55 <member name="M:OpenMetaverse.StructuredData.OSD.SerializeMembers(System.Object)">
@@ -81,50 +73,63 @@
81 </member> 73 </member>
82 <member name="T:OpenMetaverse.StructuredData.OSDBoolean"> 74 <member name="T:OpenMetaverse.StructuredData.OSDBoolean">
83 <summary> 75 <summary>
76
84 </summary> 77 </summary>
85 </member> 78 </member>
86 <member name="T:OpenMetaverse.StructuredData.OSDInteger"> 79 <member name="T:OpenMetaverse.StructuredData.OSDInteger">
87 <summary> 80 <summary>
81
88 </summary> 82 </summary>
89 </member> 83 </member>
90 <member name="T:OpenMetaverse.StructuredData.OSDReal"> 84 <member name="T:OpenMetaverse.StructuredData.OSDReal">
91 <summary> 85 <summary>
86
92 </summary> 87 </summary>
93 </member> 88 </member>
94 <member name="T:OpenMetaverse.StructuredData.OSDString"> 89 <member name="T:OpenMetaverse.StructuredData.OSDString">
95 <summary> 90 <summary>
91
96 </summary> 92 </summary>
97 </member> 93 </member>
98 <member name="T:OpenMetaverse.StructuredData.OSDUUID"> 94 <member name="T:OpenMetaverse.StructuredData.OSDUUID">
99 <summary> 95 <summary>
96
100 </summary> 97 </summary>
101 </member> 98 </member>
102 <member name="T:OpenMetaverse.StructuredData.OSDDate"> 99 <member name="T:OpenMetaverse.StructuredData.OSDDate">
103 <summary> 100 <summary>
101
104 </summary> 102 </summary>
105 </member> 103 </member>
106 <member name="T:OpenMetaverse.StructuredData.OSDUri"> 104 <member name="T:OpenMetaverse.StructuredData.OSDUri">
107 <summary> 105 <summary>
106
108 </summary> 107 </summary>
109 </member> 108 </member>
110 <member name="T:OpenMetaverse.StructuredData.OSDBinary"> 109 <member name="T:OpenMetaverse.StructuredData.OSDBinary">
111 <summary> 110 <summary>
111
112 </summary> 112 </summary>
113 </member> 113 </member>
114 <member name="T:OpenMetaverse.StructuredData.OSDMap"> 114 <member name="T:OpenMetaverse.StructuredData.OSDMap">
115 <summary> 115 <summary>
116
116 </summary> 117 </summary>
117 </member> 118 </member>
118 <member name="T:OpenMetaverse.StructuredData.OSDArray"> 119 <member name="T:OpenMetaverse.StructuredData.OSDArray">
119 <summary> 120 <summary>
121
120 </summary> 122 </summary>
121 </member> 123 </member>
122 <member name="T:OpenMetaverse.StructuredData.OSDParser"> 124 <member name="T:OpenMetaverse.StructuredData.OSDParser">
123 <summary> 125 <summary>
126
124 </summary> 127 </summary>
125 <summary> 128 <summary>
129
126 </summary> 130 </summary>
127 <summary> 131 <summary>
132
128 </summary> 133 </summary>
129 </member> 134 </member>
130 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDBinary(System.Byte[])"> 135 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDBinary(System.Byte[])">
@@ -153,8 +158,7 @@
153 Serializes OSD to binary format 158 Serializes OSD to binary format
154 </summary> 159 </summary>
155 <param name="osd">OSD to serialize</param> 160 <param name="osd">OSD to serialize</param>
156 <param name="prependHeader"> 161 <param name="prependHeader"></param>
157 </param>
158 <returns>Serialized data</returns> 162 <returns>Serialized data</returns>
159 </member> 163 </member>
160 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDBinaryStream(OpenMetaverse.StructuredData.OSD)"> 164 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDBinaryStream(OpenMetaverse.StructuredData.OSD)">
@@ -169,209 +173,177 @@
169 Serializes OSD to binary format 173 Serializes OSD to binary format
170 </summary> 174 </summary>
171 <param name="data">OSD to serialize</param> 175 <param name="data">OSD to serialize</param>
172 <param name="prependHeader"> 176 <param name="prependHeader"></param>
173 </param>
174 <returns>Serialized data</returns> 177 <returns>Serialized data</returns>
175 </member> 178 </member>
176 <member name="M:OpenMetaverse.StructuredData.OSDParser.SkipWhiteSpace(System.IO.Stream)"> 179 <member name="M:OpenMetaverse.StructuredData.OSDParser.SkipWhiteSpace(System.IO.Stream)">
177 <summary> 180 <summary>
181
178 </summary> 182 </summary>
179 <param name="stream"> 183 <param name="stream"></param>
180 </param>
181 </member> 184 </member>
182 <member name="M:OpenMetaverse.StructuredData.OSDParser.FindByte(System.IO.Stream,System.Byte)"> 185 <member name="M:OpenMetaverse.StructuredData.OSDParser.FindByte(System.IO.Stream,System.Byte)">
183 <summary> 186 <summary>
187
184 </summary> 188 </summary>
185 <param name="stream"> 189 <param name="stream"></param>
186 </param> 190 <param name="toFind"></param>
187 <param name="toFind"> 191 <returns></returns>
188 </param>
189 <returns>
190 </returns>
191 </member> 192 </member>
192 <member name="M:OpenMetaverse.StructuredData.OSDParser.FindString(System.IO.Stream,System.String)"> 193 <member name="M:OpenMetaverse.StructuredData.OSDParser.FindString(System.IO.Stream,System.String)">
193 <summary> 194 <summary>
195
194 </summary> 196 </summary>
195 <param name="stream"> 197 <param name="stream"></param>
196 </param> 198 <param name="toFind"></param>
197 <param name="toFind"> 199 <returns></returns>
198 </param>
199 <returns>
200 </returns>
201 </member> 200 </member>
202 <member name="M:OpenMetaverse.StructuredData.OSDParser.ConsumeBytes(System.IO.Stream,System.Int32)"> 201 <member name="M:OpenMetaverse.StructuredData.OSDParser.ConsumeBytes(System.IO.Stream,System.Int32)">
203 <summary> 202 <summary>
203
204 </summary> 204 </summary>
205 <param name="stream"> 205 <param name="stream"></param>
206 </param> 206 <param name="consumeBytes"></param>
207 <param name="consumeBytes"> 207 <returns></returns>
208 </param>
209 <returns>
210 </returns>
211 </member> 208 </member>
212 <member name="M:OpenMetaverse.StructuredData.OSDParser.NetworkToHostInt(System.Byte[])"> 209 <member name="M:OpenMetaverse.StructuredData.OSDParser.NetworkToHostInt(System.Byte[])">
213 <summary> 210 <summary>
211
214 </summary> 212 </summary>
215 <param name="binaryNetEnd"> 213 <param name="binaryNetEnd"></param>
216 </param> 214 <returns></returns>
217 <returns>
218 </returns>
219 </member> 215 </member>
220 <member name="M:OpenMetaverse.StructuredData.OSDParser.NetworkToHostDouble(System.Byte[])"> 216 <member name="M:OpenMetaverse.StructuredData.OSDParser.NetworkToHostDouble(System.Byte[])">
221 <summary> 217 <summary>
218
222 </summary> 219 </summary>
223 <param name="binaryNetEnd"> 220 <param name="binaryNetEnd"></param>
224 </param> 221 <returns></returns>
225 <returns>
226 </returns>
227 </member> 222 </member>
228 <member name="M:OpenMetaverse.StructuredData.OSDParser.HostToNetworkIntBytes(System.Int32)"> 223 <member name="M:OpenMetaverse.StructuredData.OSDParser.HostToNetworkIntBytes(System.Int32)">
229 <summary> 224 <summary>
225
230 </summary> 226 </summary>
231 <param name="intHostEnd"> 227 <param name="intHostEnd"></param>
232 </param> 228 <returns></returns>
233 <returns>
234 </returns>
235 </member> 229 </member>
236 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDNotationElement(System.IO.StringReader)"> 230 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Byte[])">
237 <summary> 231 <summary>
232
238 </summary> 233 </summary>
239 <param name="reader"> 234 <param name="xmlData"></param>
240 </param> 235 <returns></returns>
241 <returns>
242 </returns>
243 </member> 236 </member>
244 <member name="M:OpenMetaverse.StructuredData.OSDParser.PeekAndSkipWhitespace(System.IO.StringReader)"> 237 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.String)">
245 <summary> 238 <summary>
239
246 </summary> 240 </summary>
247 <param name="reader"> 241 <param name="xmlData"></param>
248 </param> 242 <returns></returns>
249 <returns>
250 </returns>
251 </member> 243 </member>
252 <member name="M:OpenMetaverse.StructuredData.OSDParser.ReadAndSkipWhitespace(System.IO.StringReader)"> 244 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Xml.XmlTextReader)">
253 <summary> 245 <summary>
246
254 </summary> 247 </summary>
255 <param name="reader"> 248 <param name="xmlData"></param>
256 </param> 249 <returns></returns>
257 <returns>
258 </returns>
259 </member> 250 </member>
260 <member name="M:OpenMetaverse.StructuredData.OSDParser.GetLengthInBrackets(System.IO.StringReader)"> 251 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlBytes(OpenMetaverse.StructuredData.OSD)">
261 <summary> 252 <summary>
253
262 </summary> 254 </summary>
263 <param name="reader"> 255 <param name="data"></param>
264 </param> 256 <returns></returns>
265 <returns>
266 </returns>
267 </member> 257 </member>
268 <member name="M:OpenMetaverse.StructuredData.OSDParser.GetStringDelimitedBy(System.IO.StringReader,System.Char)"> 258 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlString(OpenMetaverse.StructuredData.OSD)">
269 <summary> 259 <summary>
260
270 </summary> 261 </summary>
271 <param name="reader"> 262 <param name="data"></param>
272 </param> 263 <returns></returns>
273 <param name="delimiter">
274 </param>
275 <returns>
276 </returns>
277 </member> 264 </member>
278 <member name="M:OpenMetaverse.StructuredData.OSDParser.BufferCharactersEqual(System.IO.StringReader,System.Char[],System.Int32)"> 265 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlElement(System.Xml.XmlTextWriter,OpenMetaverse.StructuredData.OSD)">
279 <summary> 266 <summary>
267
280 </summary> 268 </summary>
281 <param name="reader"> 269 <param name="writer"></param>
282 </param> 270 <param name="data"></param>
283 <param name="buffer">
284 </param>
285 <param name="offset">
286 </param>
287 <returns>
288 </returns>
289 </member> 271 </member>
290 <member name="M:OpenMetaverse.StructuredData.OSDParser.UnescapeCharacter(System.String,System.Char)"> 272 <member name="M:OpenMetaverse.StructuredData.OSDParser.TryValidateLLSDXml(System.Xml.XmlTextReader,System.String@)">
291 <summary> 273 <summary>
274
292 </summary> 275 </summary>
293 <param name="s"> 276 <param name="xmlData"></param>
294 </param> 277 <param name="error"></param>
295 <param name="c"> 278 <returns></returns>
296 </param>
297 <returns>
298 </returns>
299 </member> 279 </member>
300 <member name="M:OpenMetaverse.StructuredData.OSDParser.EscapeCharacter(System.String,System.Char)"> 280 <member name="M:OpenMetaverse.StructuredData.OSDParser.ParseLLSDXmlElement(System.Xml.XmlTextReader)">
301 <summary> 281 <summary>
282
302 </summary> 283 </summary>
303 <param name="s"> 284 <param name="reader"></param>
304 </param> 285 <returns></returns>
305 <param name="c">
306 </param>
307 <returns>
308 </returns>
309 </member> 286 </member>
310 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Byte[])"> 287 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDNotationElement(System.IO.StringReader)">
311 <summary> 288 <summary>
289
312 </summary> 290 </summary>
313 <param name="xmlData"> 291 <param name="reader"></param>
314 </param> 292 <returns></returns>
315 <returns>
316 </returns>
317 </member> 293 </member>
318 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.String)"> 294 <member name="M:OpenMetaverse.StructuredData.OSDParser.PeekAndSkipWhitespace(System.IO.StringReader)">
319 <summary> 295 <summary>
296
320 </summary> 297 </summary>
321 <param name="xmlData"> 298 <param name="reader"></param>
322 </param> 299 <returns></returns>
323 <returns>
324 </returns>
325 </member> 300 </member>
326 <member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Xml.XmlTextReader)"> 301 <member name="M:OpenMetaverse.StructuredData.OSDParser.ReadAndSkipWhitespace(System.IO.StringReader)">
327 <summary> 302 <summary>
303
328 </summary> 304 </summary>
329 <param name="xmlData"> 305 <param name="reader"></param>
330 </param> 306 <returns></returns>
331 <returns>
332 </returns>
333 </member> 307 </member>
334 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlBytes(OpenMetaverse.StructuredData.OSD)"> 308 <member name="M:OpenMetaverse.StructuredData.OSDParser.GetLengthInBrackets(System.IO.StringReader)">
335 <summary> 309 <summary>
310
336 </summary> 311 </summary>
337 <param name="data"> 312 <param name="reader"></param>
338 </param> 313 <returns></returns>
339 <returns>
340 </returns>
341 </member> 314 </member>
342 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlString(OpenMetaverse.StructuredData.OSD)"> 315 <member name="M:OpenMetaverse.StructuredData.OSDParser.GetStringDelimitedBy(System.IO.StringReader,System.Char)">
343 <summary> 316 <summary>
317
344 </summary> 318 </summary>
345 <param name="data"> 319 <param name="reader"></param>
346 </param> 320 <param name="delimiter"></param>
347 <returns> 321 <returns></returns>
348 </returns>
349 </member> 322 </member>
350 <member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlElement(System.Xml.XmlTextWriter,OpenMetaverse.StructuredData.OSD)"> 323 <member name="M:OpenMetaverse.StructuredData.OSDParser.BufferCharactersEqual(System.IO.StringReader,System.Char[],System.Int32)">
351 <summary> 324 <summary>
325
352 </summary> 326 </summary>
353 <param name="writer"> 327 <param name="reader"></param>
354 </param> 328 <param name="buffer"></param>
355 <param name="data"> 329 <param name="offset"></param>
356 </param> 330 <returns></returns>
357 </member> 331 </member>
358 <member name="M:OpenMetaverse.StructuredData.OSDParser.TryValidateLLSDXml(System.Xml.XmlTextReader,System.String@)"> 332 <member name="M:OpenMetaverse.StructuredData.OSDParser.UnescapeCharacter(System.String,System.Char)">
359 <summary> 333 <summary>
334
360 </summary> 335 </summary>
361 <param name="xmlData"> 336 <param name="s"></param>
362 </param> 337 <param name="c"></param>
363 <param name="error"> 338 <returns></returns>
364 </param>
365 <returns>
366 </returns>
367 </member> 339 </member>
368 <member name="M:OpenMetaverse.StructuredData.OSDParser.ParseLLSDXmlElement(System.Xml.XmlTextReader)"> 340 <member name="M:OpenMetaverse.StructuredData.OSDParser.EscapeCharacter(System.String,System.Char)">
369 <summary> 341 <summary>
342
370 </summary> 343 </summary>
371 <param name="reader"> 344 <param name="s"></param>
372 </param> 345 <param name="c"></param>
373 <returns> 346 <returns></returns>
374 </returns>
375 </member> 347 </member>
376 </members> 348 </members>
377</doc> 349</doc>
diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll
index c7216ce..bb16ed0 100755
--- a/bin/OpenMetaverse.StructuredData.dll
+++ b/bin/OpenMetaverse.StructuredData.dll
Binary files differ
diff --git a/bin/OpenMetaverse.XML b/bin/OpenMetaverse.XML
index 81cc005..457cbe1 100644
--- a/bin/OpenMetaverse.XML
+++ b/bin/OpenMetaverse.XML
@@ -1,1829 +1,3048 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<doc> 2<doc>
3 <assembly> 3 <assembly>
4 <name>/home/root/libomv-0.9.1-source/bin/OpenMetaverse</name> 4 <name>OpenMetaverse</name>
5 </assembly> 5 </assembly>
6 <members> 6 <members>
7 <member name="T:OpenMetaverse.ScriptPermission"> 7 <member name="M:OpenMetaverse.Voice.VoiceGateway.StartDaemon(System.String,System.String)">
8 <summary> 8 <summary>
9 Permission request flags, asked when a script wants to control an Avatar 9 Starts a thread that keeps the daemon running
10 </summary> 10 </summary>
11 <param name="path"></param>
12 <param name="args"></param>
11 </member> 13 </member>
12 <member name="F:OpenMetaverse.ScriptPermission.None"> 14 <member name="M:OpenMetaverse.Voice.VoiceGateway.StopDaemon">
13 <summary>Placeholder for empty values, shouldn't ever see this</summary>
14 </member>
15 <member name="F:OpenMetaverse.ScriptPermission.Debit">
16 <summary>Script wants ability to take money from you</summary>
17 </member>
18 <member name="F:OpenMetaverse.ScriptPermission.TakeControls">
19 <summary>Script wants to take camera controls for you</summary>
20 </member>
21 <member name="F:OpenMetaverse.ScriptPermission.RemapControls">
22 <summary>Script wants to remap avatars controls</summary>
23 </member>
24 <member name="F:OpenMetaverse.ScriptPermission.TriggerAnimation">
25 <summary>Script wants to trigger avatar animations</summary>
26 <remarks>This function is not implemented on the grid</remarks>
27 </member>
28 <member name="F:OpenMetaverse.ScriptPermission.Attach">
29 <summary>Script wants to attach or detach the prim or primset to your avatar</summary>
30 </member>
31 <member name="F:OpenMetaverse.ScriptPermission.ReleaseOwnership">
32 <summary>Script wants permission to release ownership</summary>
33 <remarks>This function is not implemented on the grid
34 The concept of "public" objects does not exist anymore.</remarks>
35 </member>
36 <member name="F:OpenMetaverse.ScriptPermission.ChangeLinks">
37 <summary>Script wants ability to link/delink with other prims</summary>
38 </member>
39 <member name="F:OpenMetaverse.ScriptPermission.ChangeJoints">
40 <summary>Script wants permission to change joints</summary>
41 <remarks>This function is not implemented on the grid</remarks>
42 </member>
43 <member name="F:OpenMetaverse.ScriptPermission.ChangePermissions">
44 <summary>Script wants permissions to change permissions</summary>
45 <remarks>This function is not implemented on the grid</remarks>
46 </member>
47 <member name="F:OpenMetaverse.ScriptPermission.TrackCamera">
48 <summary>Script wants to track avatars camera position and rotation </summary>
49 </member>
50 <member name="F:OpenMetaverse.ScriptPermission.ControlCamera">
51 <summary>Script wants to control your camera</summary>
52 </member>
53 <member name="T:OpenMetaverse.InstantMessageDialog">
54 <summary> 15 <summary>
55 Special commands used in Instant Messages 16 Stops the daemon and the thread keeping it running
56 </summary> 17 </summary>
57 </member> 18 </member>
58 <member name="F:OpenMetaverse.InstantMessageDialog.MessageFromAgent"> 19 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectToDaemon(System.String,System.Int32)">
59 <summary>Indicates a regular IM from another agent</summary>
60 </member>
61 <member name="F:OpenMetaverse.InstantMessageDialog.MessageBox">
62 <summary>Simple notification box with an OK button</summary>
63 </member>
64 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitation">
65 <summary>You've been invited to join a group.</summary>
66 </member>
67 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryOffered">
68 <summary>Inventory offer</summary>
69 </member>
70 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryAccepted">
71 <summary>Accepted inventory offer</summary>
72 </member>
73 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryDeclined">
74 <summary>Declined inventory offer</summary>
75 </member>
76 <member name="F:OpenMetaverse.InstantMessageDialog.GroupVote">
77 <summary>Group vote</summary>
78 </member>
79 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryOffered">
80 <summary>An object is offering its inventory</summary>
81 </member>
82 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryAccepted">
83 <summary>Accept an inventory offer from an object</summary>
84 </member>
85 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryDeclined">
86 <summary>Decline an inventory offer from an object</summary>
87 </member>
88 <member name="F:OpenMetaverse.InstantMessageDialog.NewUserDefault">
89 <summary>Unknown</summary>
90 </member>
91 <member name="F:OpenMetaverse.InstantMessageDialog.SessionAdd">
92 <summary>Start a session, or add users to a session</summary>
93 </member>
94 <member name="F:OpenMetaverse.InstantMessageDialog.SessionOfflineAdd">
95 <summary>Start a session, but don't prune offline users</summary>
96 </member>
97 <member name="F:OpenMetaverse.InstantMessageDialog.SessionGroupStart">
98 <summary>Start a session with your group</summary>
99 </member>
100 <member name="F:OpenMetaverse.InstantMessageDialog.SessionCardlessStart">
101 <summary>Start a session without a calling card (finder or objects)</summary>
102 </member>
103 <member name="F:OpenMetaverse.InstantMessageDialog.SessionSend">
104 <summary>Send a message to a session</summary>
105 </member>
106 <member name="F:OpenMetaverse.InstantMessageDialog.SessionDrop">
107 <summary>Leave a session</summary>
108 </member>
109 <member name="F:OpenMetaverse.InstantMessageDialog.MessageFromObject">
110 <summary>Indicates that the IM is from an object</summary>
111 </member>
112 <member name="F:OpenMetaverse.InstantMessageDialog.BusyAutoResponse">
113 <summary>Sent an IM to a busy user, this is the auto response</summary>
114 </member>
115 <member name="F:OpenMetaverse.InstantMessageDialog.ConsoleAndChatHistory">
116 <summary>Shows the message in the console and chat history</summary>
117 </member>
118 <member name="F:OpenMetaverse.InstantMessageDialog.RequestTeleport">
119 <summary>Send a teleport lure</summary>
120 </member>
121 <member name="F:OpenMetaverse.InstantMessageDialog.AcceptTeleport">
122 <summary>Response sent to the agent which inititiated a teleport invitation</summary>
123 </member>
124 <member name="F:OpenMetaverse.InstantMessageDialog.DenyTeleport">
125 <summary>Response sent to the agent which inititiated a teleport invitation</summary>
126 </member>
127 <member name="F:OpenMetaverse.InstantMessageDialog.GodLikeRequestTeleport">
128 <summary>Only useful if you have Linden permissions</summary>
129 </member>
130 <member name="F:OpenMetaverse.InstantMessageDialog.CurrentlyUnused">
131 <summary>A placeholder type for future expansion, currently not
132 used</summary>
133 </member>
134 <member name="F:OpenMetaverse.InstantMessageDialog.GotoUrl">
135 <summary>IM to tell the user to go to an URL</summary>
136 </member>
137 <member name="F:OpenMetaverse.InstantMessageDialog.Session911Start">
138 <summary>IM for help</summary>
139 </member>
140 <member name="F:OpenMetaverse.InstantMessageDialog.Lure911">
141 <summary>IM sent automatically on call for help, sends a lure
142 to each Helper reached</summary>
143 </member>
144 <member name="F:OpenMetaverse.InstantMessageDialog.FromTaskAsAlert">
145 <summary>Like an IM but won't go to email</summary>
146 </member>
147 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNotice">
148 <summary>IM from a group officer to all group members</summary>
149 </member>
150 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeInventoryAccepted">
151 <summary>Unknown</summary>
152 </member>
153 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeInventoryDeclined">
154 <summary>Unknown</summary>
155 </member>
156 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitationAccept">
157 <summary>Accept a group invitation</summary>
158 </member>
159 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitationDecline">
160 <summary>Decline a group invitation</summary>
161 </member>
162 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeRequested">
163 <summary>Unknown</summary>
164 </member>
165 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipOffered">
166 <summary>An avatar is offering you friendship</summary>
167 </member>
168 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipAccepted">
169 <summary>An avatar has accepted your friendship offer</summary>
170 </member>
171 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipDeclined">
172 <summary>An avatar has declined your friendship offer</summary>
173 </member>
174 <member name="F:OpenMetaverse.InstantMessageDialog.StartTyping">
175 <summary>Indicates that a user has started typing</summary>
176 </member>
177 <member name="F:OpenMetaverse.InstantMessageDialog.StopTyping">
178 <summary>Indicates that a user has stopped typing</summary>
179 </member>
180 <member name="T:OpenMetaverse.InstantMessageOnline">
181 <summary> 20 <summary>
182 Flag in Instant Messages, whether the IM should be delivered to 21
183 offline avatars as well
184 </summary> 22 </summary>
23 <param name="address"></param>
24 <param name="port"></param>
25 <returns></returns>
185 </member> 26 </member>
186 <member name="F:OpenMetaverse.InstantMessageOnline.Online"> 27 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxGetCaptureDevices">
187 <summary>Only deliver to online avatars</summary>
188 </member>
189 <member name="F:OpenMetaverse.InstantMessageOnline.Offline">
190 <summary>If the avatar is offline the message will be held until
191 they login next, and possibly forwarded to their e-mail account</summary>
192 </member>
193 <member name="T:OpenMetaverse.ChatType">
194 <summary> 28 <summary>
195 Conversion type to denote Chat Packet types in an easier-to-understand format 29 This is used to get a list of audio devices that can be used for capture (input) of voice.
196 </summary> 30 </summary>
31 <returns></returns>
197 </member> 32 </member>
198 <member name="F:OpenMetaverse.ChatType.Whisper"> 33 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxGetRenderDevices">
199 <summary>Whisper (5m radius)</summary>
200 </member>
201 <member name="F:OpenMetaverse.ChatType.Normal">
202 <summary>Normal chat (10/20m radius), what the official viewer typically sends</summary>
203 </member>
204 <member name="F:OpenMetaverse.ChatType.Shout">
205 <summary>Shouting! (100m radius)</summary>
206 </member>
207 <member name="F:OpenMetaverse.ChatType.StartTyping">
208 <summary>Event message when an Avatar has begun to type</summary>
209 </member>
210 <member name="F:OpenMetaverse.ChatType.StopTyping">
211 <summary>Event message when an Avatar has stopped typing</summary>
212 </member>
213 <member name="F:OpenMetaverse.ChatType.Debug">
214 <summary>Send the message to the debug channel</summary>
215 </member>
216 <member name="F:OpenMetaverse.ChatType.OwnerSay">
217 <summary>Event message when an object uses llOwnerSay</summary>
218 </member>
219 <member name="F:OpenMetaverse.ChatType.RegionSay">
220 <summary>Special value to support llRegionSay, never sent to the client</summary>
221 </member>
222 <member name="T:OpenMetaverse.ChatSourceType">
223 <summary> 34 <summary>
224 Identifies the source of a chat message 35 This is used to get a list of audio devices that can be used for render (playback) of voice.
225 </summary> 36 </summary>
226 </member> 37 </member>
227 <member name="F:OpenMetaverse.ChatSourceType.System"> 38 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetRenderDevice(System.String)">
228 <summary>Chat from the grid or simulator</summary>
229 </member>
230 <member name="F:OpenMetaverse.ChatSourceType.Agent">
231 <summary>Chat from another avatar</summary>
232 </member>
233 <member name="F:OpenMetaverse.ChatSourceType.Object">
234 <summary>Chat from an object</summary>
235 </member>
236 <member name="T:OpenMetaverse.ChatAudibleLevel">
237 <summary> 39 <summary>
40 This command is used to select the render device.
238 </summary> 41 </summary>
42 <param name="RenderDeviceSpecifier">The name of the device as returned by the Aux.GetRenderDevices command.</param>
239 </member> 43 </member>
240 <member name="F:OpenMetaverse.ChatAudibleLevel.Not"> 44 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetCaptureDevice(System.String)">
241 <summary> 45 <summary>
46 This command is used to select the capture device.
242 </summary> 47 </summary>
48 <param name="CaptureDeviceSpecifier">The name of the device as returned by the Aux.GetCaptureDevices command.</param>
243 </member> 49 </member>
244 <member name="F:OpenMetaverse.ChatAudibleLevel.Barely"> 50 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxCaptureAudioStart(System.Int32)">
245 <summary> 51 <summary>
52 This command is used to start the audio capture process which will cause
53 AuxAudioProperty Events to be raised. These events can be used to display a
54 microphone VU meter for the currently selected capture device. This command
55 should not be issued if the user is on a call.
246 </summary> 56 </summary>
57 <param name="Duration">(unused but required)</param>
58 <returns></returns>
247 </member> 59 </member>
248 <member name="F:OpenMetaverse.ChatAudibleLevel.Fully"> 60 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxCaptureAudioStop">
249 <summary> 61 <summary>
62 This command is used to stop the audio capture process.
250 </summary> 63 </summary>
64 <returns></returns>
251 </member> 65 </member>
252 <member name="T:OpenMetaverse.EffectType"> 66 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetMicLevel(System.Int32)">
253 <summary> 67 <summary>
254 Effect type used in ViewerEffect packets 68 This command is used to set the mic volume while in the audio tuning process.
69 Once an acceptable mic level is attained, the application must issue a
70 connector set mic volume command to have that level be used while on voice
71 calls.
255 </summary> 72 </summary>
73 <param name="Level">the microphone volume (-100 to 100 inclusive)</param>
74 <returns></returns>
256 </member> 75 </member>
257 <member name="F:OpenMetaverse.EffectType.Text"> 76 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetSpeakerLevel(System.Int32)">
258 <summary> 77 <summary>
78 This command is used to set the speaker volume while in the audio tuning
79 process. Once an acceptable speaker level is attained, the application must
80 issue a connector set speaker volume command to have that level be used while
81 on voice calls.
259 </summary> 82 </summary>
83 <param name="Level">the speaker volume (-100 to 100 inclusive)</param>
84 <returns></returns>
260 </member> 85 </member>
261 <member name="F:OpenMetaverse.EffectType.Icon"> 86 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionCreate(System.String,System.String,System.String,System.String,System.Boolean,System.Boolean,System.String)">
262 <summary> 87 <summary>
88 Create a Session
89 Sessions typically represent a connection to a media session with one or more
90 participants. This is used to generate an ‘outbound’ call to another user or
91 channel. The specifics depend on the media types involved. A session handle is
92 required to control the local user functions within the session (or remote
93 users if the current account has rights to do so). Currently creating a
94 session automatically connects to the audio media, there is no need to call
95 Session.Connect at this time, this is reserved for future use.
263 </summary> 96 </summary>
97 <param name="AccountHandle">Handle returned from successful Connector ‘create’ request</param>
98 <param name="URI">This is the URI of the terminating point of the session (ie who/what is being called)</param>
99 <param name="Name">This is the display name of the entity being called (user or channel)</param>
100 <param name="Password">Only needs to be supplied when the target URI is password protected</param>
101 <param name="PasswordHashAlgorithm">This indicates the format of the password as passed in. This can either be
102 “ClearText†or “SHA1UserNameâ€. If this element does not exist, it is assumed to be “ClearTextâ€. If it is
103 “SHA1UserNameâ€, the password as passed in is the SHA1 hash of the password and username concatenated together,
104 then base64 encoded, with the final “=†character stripped off.</param>
105 <param name="JoinAudio"></param>
106 <param name="JoinText"></param>
107 <returns></returns>
264 </member> 108 </member>
265 <member name="F:OpenMetaverse.EffectType.Connector"> 109 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionConnect(System.String,System.String)">
266 <summary> 110 <summary>
111 Used to accept a call
267 </summary> 112 </summary>
113 <param name="SessionHandle">SessionHandle such as received from SessionNewEvent</param>
114 <param name="AudioMedia">"default"</param>
115 <returns></returns>
268 </member> 116 </member>
269 <member name="F:OpenMetaverse.EffectType.FlexibleObject"> 117 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionRenderAudioStart(System.String,System.Boolean)">
270 <summary> 118 <summary>
119 This command is used to start the audio render process, which will then play
120 the passed in file through the selected audio render device. This command
121 should not be issued if the user is on a call.
271 </summary> 122 </summary>
123 <param name="SoundFilePath">The fully qualified path to the sound file.</param>
124 <param name="Loop">True if the file is to be played continuously and false if it is should be played once.</param>
125 <returns></returns>
272 </member> 126 </member>
273 <member name="F:OpenMetaverse.EffectType.AnimalControls"> 127 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionRenderAudioStop(System.String)">
274 <summary> 128 <summary>
129 This command is used to stop the audio render process.
275 </summary> 130 </summary>
131 <param name="SoundFilePath">The fully qualified path to the sound file issued in the start render command.</param>
132 <returns></returns>
276 </member> 133 </member>
277 <member name="F:OpenMetaverse.EffectType.AnimationObject"> 134 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionTerminate(System.String)">
278 <summary> 135 <summary>
136 This is used to ‘end’ an established session (i.e. hang-up or disconnect).
279 </summary> 137 </summary>
138 <param name="SessionHandle">Handle returned from successful Session ‘create’ request or a SessionNewEvent</param>
139 <returns></returns>
280 </member> 140 </member>
281 <member name="F:OpenMetaverse.EffectType.Cloth"> 141 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionSet3DPosition(System.String,OpenMetaverse.Voice.VoicePosition,OpenMetaverse.Voice.VoicePosition)">
282 <summary> 142 <summary>
143 Set the combined speaking and listening position in 3D space.
283 </summary> 144 </summary>
145 <param name="SessionHandle">Handle returned from successful Session ‘create’ request or a SessionNewEvent</param>
146 <param name="SpeakerPosition">Speaking position</param>
147 <param name="ListenerPosition">Listening position</param>
148 <returns></returns>
284 </member> 149 </member>
285 <member name="F:OpenMetaverse.EffectType.Beam"> 150 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionSetParticipantVolumeForMe(System.String,System.String,System.Int32)">
286 <summary>Project a beam from a source to a destination, such as
287 the one used when editing an object</summary>
288 </member>
289 <member name="F:OpenMetaverse.EffectType.Glow">
290 <summary> 151 <summary>
152 Set User Volume for a particular user. Does not affect how other users hear that user.
291 </summary> 153 </summary>
154 <param name="SessionHandle">Handle returned from successful Session ‘create’ request or a SessionNewEvent</param>
155 <param name="ParticipantURI"></param>
156 <param name="Volume">The level of the audio, a number between -100 and 100 where 0 represents ‘normal’ speaking volume</param>
157 <returns></returns>
292 </member> 158 </member>
293 <member name="F:OpenMetaverse.EffectType.Point"> 159 <member name="M:OpenMetaverse.Voice.VoiceGateway.Start">
294 <summary> 160 <summary>
161 Start up the Voice service.
295 </summary> 162 </summary>
296 </member> 163 </member>
297 <member name="F:OpenMetaverse.EffectType.Trail"> 164 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnVoiceResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceResponseEventArgs)">
298 <summary> 165 <summary>
166 Handle miscellaneous request status
299 </summary> 167 </summary>
168 <param name="sender"></param>
169 <param name="e"></param>
170 ///<remarks>If something goes wrong, we log it.</remarks>
300 </member> 171 </member>
301 <member name="F:OpenMetaverse.EffectType.Sphere"> 172 <member name="M:OpenMetaverse.Voice.VoiceGateway.Dispose">
302 <summary>Create a swirl of particles around an object</summary>
303 </member>
304 <member name="F:OpenMetaverse.EffectType.Spiral">
305 <summary> 173 <summary>
174 Cleanup oject resources
306 </summary> 175 </summary>
307 </member> 176 </member>
308 <member name="F:OpenMetaverse.EffectType.Edit"> 177 <member name="M:OpenMetaverse.Voice.VoiceGateway.Network_EventQueueRunning(System.Object,OpenMetaverse.EventQueueRunningEventArgs)">
309 <summary> 178 <summary>
179 Request voice cap when changing regions
310 </summary> 180 </summary>
311 </member> 181 </member>
312 <member name="F:OpenMetaverse.EffectType.LookAt"> 182 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnSessionStateChangeEvent(System.Object,OpenMetaverse.Voice.VoiceGateway.SessionStateChangeEventArgs)">
313 <summary>Cause an avatar to look at an object</summary>
314 </member>
315 <member name="F:OpenMetaverse.EffectType.PointAt">
316 <summary>Cause an avatar to point at an object</summary>
317 </member>
318 <member name="T:OpenMetaverse.LookAtType">
319 <summary> 183 <summary>
320 The action an avatar is doing when looking at something, used in 184 Handle a change in session state
321 ViewerEffect packets for the LookAt effect
322 </summary> 185 </summary>
323 </member> 186 </member>
324 <member name="F:OpenMetaverse.LookAtType.None"> 187 <member name="M:OpenMetaverse.Voice.VoiceGateway.CloseSession(System.String)">
325 <summary> 188 <summary>
189 Close a voice session
326 </summary> 190 </summary>
191 <param name="sessionHandle"></param>
327 </member> 192 </member>
328 <member name="F:OpenMetaverse.LookAtType.Idle"> 193 <member name="M:OpenMetaverse.Voice.VoiceGateway.FindSession(System.String,System.Boolean)">
329 <summary> 194 <summary>
195 Locate a Session context from its handle
330 </summary> 196 </summary>
197 <remarks>Creates the session context if it does not exist.</remarks>
331 </member> 198 </member>
332 <member name="F:OpenMetaverse.LookAtType.AutoListen"> 199 <member name="M:OpenMetaverse.Voice.VoiceGateway.cClient_OnComplete(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)">
333 <summary> 200 <summary>
201 Handle completion of main voice cap request.
334 </summary> 202 </summary>
203 <param name="client"></param>
204 <param name="result"></param>
205 <param name="error"></param>
335 </member> 206 </member>
336 <member name="F:OpenMetaverse.LookAtType.FreeLook"> 207 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnDaemonRunning">
337 <summary> 208 <summary>
209 Daemon has started so connect to it.
338 </summary> 210 </summary>
339 </member> 211 </member>
340 <member name="F:OpenMetaverse.LookAtType.Respond"> 212 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnDaemonConnected">
341 <summary> 213 <summary>
214 The daemon TCP connection is open.
342 </summary> 215 </summary>
343 </member> 216 </member>
344 <member name="F:OpenMetaverse.LookAtType.Hover"> 217 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnConnectorCreateResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceConnectorEventArgs)">
345 <summary> 218 <summary>
219 Handle creation of the Connector.
346 </summary> 220 </summary>
347 </member> 221 </member>
348 <member name="F:OpenMetaverse.LookAtType.Conversation"> 222 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnAuxGetRenderDevicesResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceDevicesEventArgs)">
349 <summary>Deprecated</summary>
350 </member>
351 <member name="F:OpenMetaverse.LookAtType.Select">
352 <summary> 223 <summary>
224 Handle response to audio output device query
353 </summary> 225 </summary>
354 </member> 226 </member>
355 <member name="F:OpenMetaverse.LookAtType.Focus"> 227 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnAuxGetCaptureDevicesResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceDevicesEventArgs)">
356 <summary> 228 <summary>
229 Handle response to audio input device query
357 </summary> 230 </summary>
358 </member> 231 </member>
359 <member name="F:OpenMetaverse.LookAtType.Mouselook"> 232 <member name="M:OpenMetaverse.Voice.VoiceGateway.ParcelChanged">
233 <summary>
234 Set voice channel for new parcel
235 </summary>
236
237 </member>
238 <member name="M:OpenMetaverse.Voice.VoiceGateway.RequestParcelInfo(System.Uri)">
360 <summary> 239 <summary>
240 Request info from a parcel capability Uri.
361 </summary> 241 </summary>
242 <param name="cap"></param>
362 </member> 243 </member>
363 <member name="F:OpenMetaverse.LookAtType.Clear"> 244 <member name="M:OpenMetaverse.Voice.VoiceGateway.pCap_OnComplete(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)">
364 <summary> 245 <summary>
246 Receive parcel voice cap
365 </summary> 247 </summary>
248 <param name="client"></param>
249 <param name="result"></param>
250 <param name="error"></param>
366 </member> 251 </member>
367 <member name="T:OpenMetaverse.PointAtType"> 252 <member name="M:OpenMetaverse.Voice.VoiceGateway.UpdatePosition(OpenMetaverse.AgentManager)">
368 <summary> 253 <summary>
369 The action an avatar is doing when pointing at something, used in 254 Tell Vivox where we are standing
370 ViewerEffect packets for the PointAt effect
371 </summary> 255 </summary>
256 <remarks>This has to be called when we move or turn.</remarks>
372 </member> 257 </member>
373 <member name="F:OpenMetaverse.PointAtType.None"> 258 <member name="M:OpenMetaverse.Voice.VoiceGateway.PosUpdating(System.Boolean)">
374 <summary> 259 <summary>
260 Start and stop updating out position.
375 </summary> 261 </summary>
262 <param name="go"></param>
376 </member> 263 </member>
377 <member name="F:OpenMetaverse.PointAtType.Select"> 264 <member name="M:OpenMetaverse.Voice.VoiceGateway.AccountLogin(System.String,System.String,System.String,System.String,System.String,System.Int32,System.Boolean)">
378 <summary> 265 <summary>
266 This is used to login a specific user account(s). It may only be called after
267 Connector initialization has completed successfully
379 </summary> 268 </summary>
269 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
270 <param name="AccountName">User's account name</param>
271 <param name="AccountPassword">User's account password</param>
272 <param name="AudioSessionAnswerMode">Values may be “AutoAnswer†or “VerifyAnswerâ€</param>
273 <param name="AccountURI">""</param>
274 <param name="ParticipantPropertyFrequency">This is an integer that specifies how often
275 the daemon will send participant property events while in a channel. If this is not set
276 the default will be “on state changeâ€, which means that the events will be sent when
277 the participant starts talking, stops talking, is muted, is unmuted.
278 The valid values are:
279 0 – Never
280 5 – 10 times per second
281 10 – 5 times per second
282 50 – 1 time per second
283 100 – on participant state change (this is the default)</param>
284 <param name="EnableBuddiesAndPresence">false</param>
285 <returns></returns>
380 </member> 286 </member>
381 <member name="F:OpenMetaverse.PointAtType.Grab"> 287 <member name="M:OpenMetaverse.Voice.VoiceGateway.AccountLogout(System.String)">
382 <summary> 288 <summary>
289 This is used to logout a user session. It should only be called with a valid AccountHandle.
383 </summary> 290 </summary>
291 <param name="AccountHandle">Handle returned from successful Connector ‘login’ request</param>
292 <returns></returns>
384 </member> 293 </member>
385 <member name="F:OpenMetaverse.PointAtType.Clear"> 294 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorCreate(System.String,System.String,System.UInt16,System.UInt16,OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings)">
386 <summary> 295 <summary>
296 This is used to initialize and stop the Connector as a whole. The Connector
297 Create call must be completed successfully before any other requests are made
298 (typically during application initialization). The shutdown should be called
299 when the application is shutting down to gracefully release resources
387 </summary> 300 </summary>
301 <param name="ClientName">A string value indicting the Application name</param>
302 <param name="AccountManagementServer">URL for the management server</param>
303 <param name="Logging">LoggingSettings</param>
304 <param name="MaximumPort"></param>
305 <param name="MinimumPort"></param>
388 </member> 306 </member>
389 <member name="T:OpenMetaverse.MoneyTransactionType"> 307 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorInitiateShutdown(System.String)">
390 <summary> 308 <summary>
391 Money transaction types 309 Shutdown Connector -- Should be called when the application is shutting down
310 to gracefully release resources
392 </summary> 311 </summary>
312 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
393 </member> 313 </member>
394 <member name="F:OpenMetaverse.MoneyTransactionType.None"> 314 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorMuteLocalMic(System.String,System.Boolean)">
395 <summary> 315 <summary>
316 Mute or unmute the microphone
396 </summary> 317 </summary>
318 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
319 <param name="Mute">true (mute) or false (unmute)</param>
397 </member> 320 </member>
398 <member name="F:OpenMetaverse.MoneyTransactionType.FailSimulatorTimeout"> 321 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorMuteLocalSpeaker(System.String,System.Boolean)">
399 <summary> 322 <summary>
323 Mute or unmute the speaker
400 </summary> 324 </summary>
325 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
326 <param name="Mute">true (mute) or false (unmute)</param>
401 </member> 327 </member>
402 <member name="F:OpenMetaverse.MoneyTransactionType.FailDataserverTimeout"> 328 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorSetLocalMicVolume(System.String,System.Int32)">
403 <summary> 329 <summary>
330 Set microphone volume
404 </summary> 331 </summary>
332 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
333 <param name="Value">The level of the audio, a number between -100 and 100 where
334 0 represents ‘normal’ speaking volume</param>
405 </member> 335 </member>
406 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectClaim"> 336 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorSetLocalSpeakerVolume(System.String,System.Int32)">
407 <summary> 337 <summary>
338 Set local speaker volume
408 </summary> 339 </summary>
340 <param name="ConnectorHandle">Handle returned from successful Connector ‘create’ request</param>
341 <param name="Value">The level of the audio, a number between -100 and 100 where
342 0 represents ‘normal’ speaking volume</param>
409 </member> 343 </member>
410 <member name="F:OpenMetaverse.MoneyTransactionType.LandClaim"> 344 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnVoiceResponse">
411 <summary> 345 <summary>
346 Event for most mundane request reposnses.
412 </summary> 347 </summary>
413 </member> 348 </member>
414 <member name="F:OpenMetaverse.MoneyTransactionType.GroupCreate"> 349 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnConnectorCreateResponse">
350 <summary>Response to Connector.Create request</summary>
351 </member>
352 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxGetCaptureDevicesResponse">
353 <summary>Response to Aux.GetCaptureDevices request</summary>
354 </member>
355 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxGetRenderDevicesResponse">
356 <summary>Response to Aux.GetRenderDevices request</summary>
357 </member>
358 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxAudioPropertiesEvent">
359 <summary>Audio Properties Events are sent after audio capture is started.
360 These events are used to display a microphone VU meter</summary>
361 </member>
362 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAccountLoginResponse">
363 <summary>Response to Account.Login request</summary>
364 </member>
365 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAccountLoginStateChangeEvent">
366 <summary>This event message is sent whenever the login state of the
367 particular Account has transitioned from one value to another</summary>
368 </member>
369 <member name="P:OpenMetaverse.Voice.VoiceGateway.CaptureDevices">
415 <summary> 370 <summary>
371 List of audio input devices
416 </summary> 372 </summary>
417 </member> 373 </member>
418 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicClaim"> 374 <member name="P:OpenMetaverse.Voice.VoiceGateway.PlaybackDevices">
419 <summary> 375 <summary>
376 List of audio output devices
420 </summary> 377 </summary>
421 </member> 378 </member>
422 <member name="F:OpenMetaverse.MoneyTransactionType.GroupJoin"> 379 <member name="P:OpenMetaverse.Voice.VoiceGateway.TestMode">
423 <summary> 380 <summary>
381 Set audio test mode
424 </summary> 382 </summary>
425 </member> 383 </member>
426 <member name="F:OpenMetaverse.MoneyTransactionType.TeleportCharge"> 384 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.Enabled">
385 <summary>Enable logging</summary>
386 </member>
387 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.Folder">
388 <summary>The folder where any logs will be created</summary>
389 </member>
390 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.FileNamePrefix">
391 <summary>This will be prepended to beginning of each log file</summary>
392 </member>
393 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.FileNameSuffix">
394 <summary>The suffix or extension to be appended to each log file</summary>
395 </member>
396 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.LogLevel">
427 <summary> 397 <summary>
398 0: NONE - No logging
399 1: ERROR - Log errors only
400 2: WARNING - Log errors and warnings
401 3: INFO - Log errors, warnings and info
402 4: DEBUG - Log errors, warnings, info and debug
428 </summary> 403 </summary>
429 </member> 404 </member>
430 <member name="F:OpenMetaverse.MoneyTransactionType.UploadCharge"> 405 <member name="M:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.#ctor">
431 <summary> 406 <summary>
407 Constructor for default logging settings
432 </summary> 408 </summary>
433 </member> 409 </member>
434 <member name="F:OpenMetaverse.MoneyTransactionType.LandAuction"> 410 <member name="T:OpenMetaverse.Voice.VoiceGateway.AudioPropertiesEventArgs">
411 Audio Properties Events are sent after audio capture is started. These events are used to display a microphone VU meter
412 </member>
413 <member name="T:OpenMetaverse.LoginStatus">
435 <summary> 414 <summary>
415
436 </summary> 416 </summary>
437 </member> 417 </member>
438 <member name="F:OpenMetaverse.MoneyTransactionType.ClassifiedCharge"> 418 <member name="F:OpenMetaverse.LoginStatus.Failed">
419 <summary></summary>
420 </member>
421 <member name="F:OpenMetaverse.LoginStatus.None">
422 <summary></summary>
423 </member>
424 <member name="F:OpenMetaverse.LoginStatus.ConnectingToLogin">
425 <summary></summary>
426 </member>
427 <member name="F:OpenMetaverse.LoginStatus.ReadingResponse">
428 <summary></summary>
429 </member>
430 <member name="F:OpenMetaverse.LoginStatus.ConnectingToSim">
431 <summary></summary>
432 </member>
433 <member name="F:OpenMetaverse.LoginStatus.Redirecting">
434 <summary></summary>
435 </member>
436 <member name="F:OpenMetaverse.LoginStatus.Success">
437 <summary></summary>
438 </member>
439 <member name="T:OpenMetaverse.LastExecStatus">
439 <summary> 440 <summary>
441 Status of the last application run.
442 Used for error reporting to the grid login service for statistical purposes.
440 </summary> 443 </summary>
441 </member> 444 </member>
442 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectTax"> 445 <member name="F:OpenMetaverse.LastExecStatus.Normal">
446 <summary> Application exited normally </summary>
447 </member>
448 <member name="F:OpenMetaverse.LastExecStatus.Froze">
449 <summary> Application froze </summary>
450 </member>
451 <member name="F:OpenMetaverse.LastExecStatus.ForcedCrash">
452 <summary> Application detected error and exited abnormally </summary>
453 </member>
454 <member name="F:OpenMetaverse.LastExecStatus.OtherCrash">
455 <summary> Other crash </summary>
456 </member>
457 <member name="F:OpenMetaverse.LastExecStatus.LogoutFroze">
458 <summary> Application froze during logout </summary>
459 </member>
460 <member name="F:OpenMetaverse.LastExecStatus.LogoutCrash">
461 <summary> Application crashed during logout </summary>
462 </member>
463 <member name="T:OpenMetaverse.LoginParams">
443 <summary> 464 <summary>
465 Login Request Parameters
444 </summary> 466 </summary>
445 </member> 467 </member>
446 <member name="F:OpenMetaverse.MoneyTransactionType.LandTax"> 468 <member name="F:OpenMetaverse.LoginParams.URI">
469 <summary>The URL of the Login Server</summary>
470 </member>
471 <member name="F:OpenMetaverse.LoginParams.Timeout">
472 <summary>The number of milliseconds to wait before a login is considered
473 failed due to timeout</summary>
474 </member>
475 <member name="F:OpenMetaverse.LoginParams.MethodName">
476 <summary>The request method</summary>
477 <remarks>login_to_simulator is currently the only supported method</remarks>
478 </member>
479 <member name="F:OpenMetaverse.LoginParams.FirstName">
480 <summary>The Agents First name</summary>
481 </member>
482 <member name="F:OpenMetaverse.LoginParams.LastName">
483 <summary>The Agents Last name</summary>
484 </member>
485 <member name="F:OpenMetaverse.LoginParams.Password">
486 <summary>A md5 hashed password</summary>
487 <remarks>plaintext password will be automatically hashed</remarks>
488 </member>
489 <member name="F:OpenMetaverse.LoginParams.Start">
490 <summary>The agents starting location once logged in</summary>
491 <remarks>Either "last", "home", or a string encoded URI
492 containing the simulator name and x/y/z coordinates e.g: uri:hooper&amp;128&amp;152&amp;17</remarks>
493 </member>
494 <member name="F:OpenMetaverse.LoginParams.Channel">
495 <summary>A string containing the client software channel information</summary>
496 <example>Second Life Release</example>
497 </member>
498 <member name="F:OpenMetaverse.LoginParams.Version">
499 <summary>The client software version information</summary>
500 <remarks>The official viewer uses: Second Life Release n.n.n.n
501 where n is replaced with the current version of the viewer</remarks>
502 </member>
503 <member name="F:OpenMetaverse.LoginParams.Platform">
504 <summary>A string containing the platform information the agent is running on</summary>
505 </member>
506 <member name="F:OpenMetaverse.LoginParams.MAC">
507 <summary>A string hash of the network cards Mac Address</summary>
508 </member>
509 <member name="F:OpenMetaverse.LoginParams.ViewerDigest">
510 <summary>Unknown or deprecated</summary>
511 </member>
512 <member name="F:OpenMetaverse.LoginParams.ID0">
513 <summary>A string hash of the first disk drives ID used to identify this clients uniqueness</summary>
514 </member>
515 <member name="F:OpenMetaverse.LoginParams.UserAgent">
516 <summary>A string containing the viewers Software, this is not directly sent to the login server but
517 instead is used to generate the Version string</summary>
518 </member>
519 <member name="F:OpenMetaverse.LoginParams.Author">
520 <summary>A string representing the software creator. This is not directly sent to the login server but
521 is used by the library to generate the Version information</summary>
522 </member>
523 <member name="F:OpenMetaverse.LoginParams.AgreeToTos">
524 <summary>If true, this agent agrees to the Terms of Service of the grid its connecting to</summary>
525 </member>
526 <member name="F:OpenMetaverse.LoginParams.ReadCritical">
527 <summary>Unknown</summary>
528 </member>
529 <member name="F:OpenMetaverse.LoginParams.LastExecEvent">
530 <summary>Status of the last application run sent to the grid login server for statistical purposes</summary>
531 </member>
532 <member name="F:OpenMetaverse.LoginParams.Options">
533 <summary>An array of string sent to the login server to enable various options</summary>
534 </member>
535 <member name="F:OpenMetaverse.LoginParams.LoginID">
536 <summary>A randomly generated ID to distinguish between login attempts. This value is only used
537 internally in the library and is never sent over the wire</summary>
538 </member>
539 <member name="M:OpenMetaverse.LoginParams.#ctor">
447 <summary> 540 <summary>
541 Default constuctor, initializes sane default values
448 </summary> 542 </summary>
449 </member> 543 </member>
450 <member name="F:OpenMetaverse.MoneyTransactionType.LightTax"> 544 <member name="M:OpenMetaverse.LoginParams.#ctor(OpenMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String)">
451 <summary> 545 <summary>
546 Instantiates new LoginParams object and fills in the values
452 </summary> 547 </summary>
548 <param name="client">Instance of GridClient to read settings from</param>
549 <param name="firstName">Login first name</param>
550 <param name="lastName">Login last name</param>
551 <param name="password">Password</param>
552 <param name="channel">Login channnel (application name)</param>
553 <param name="version">Client version, should be application name + version number</param>
453 </member> 554 </member>
454 <member name="F:OpenMetaverse.MoneyTransactionType.ParcelDirFee"> 555 <member name="M:OpenMetaverse.LoginParams.#ctor(OpenMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String,System.String)">
455 <summary> 556 <summary>
557 Instantiates new LoginParams object and fills in the values
456 </summary> 558 </summary>
559 <param name="client">Instance of GridClient to read settings from</param>
560 <param name="firstName">Login first name</param>
561 <param name="lastName">Login last name</param>
562 <param name="password">Password</param>
563 <param name="channel">Login channnel (application name)</param>
564 <param name="version">Client version, should be application name + version number</param>
565 <param name="loginURI">URI of the login server</param>
457 </member> 566 </member>
458 <member name="F:OpenMetaverse.MoneyTransactionType.GroupTax"> 567 <member name="T:OpenMetaverse.LoginResponseData">
459 <summary> 568 <summary>
569 The decoded data returned from the login server after a successful login
460 </summary> 570 </summary>
461 </member> 571 </member>
462 <member name="F:OpenMetaverse.MoneyTransactionType.ClassifiedRenew"> 572 <member name="F:OpenMetaverse.LoginResponseData.Login">
573 <summary>true, false, indeterminate</summary>
574 </member>
575 <member name="F:OpenMetaverse.LoginResponseData.Message">
576 <summary>Login message of the day</summary>
577 </member>
578 <member name="F:OpenMetaverse.LoginResponseData.AgentAccess">
579 <summary>M or PG, also agent_region_access and agent_access_max</summary>
580 </member>
581 <member name="M:OpenMetaverse.LoginResponseData.Parse(OpenMetaverse.StructuredData.OSDMap)">
463 <summary> 582 <summary>
583 Parse LLSD Login Reply Data
464 </summary> 584 </summary>
585 <param name="reply">An <seealso cref="T:OpenMetaverse.StructuredData.OSDMap"/>
586 contaning the login response data</param>
587 <remarks>XML-RPC logins do not require this as XML-RPC.NET
588 automatically populates the struct properly using attributes</remarks>
465 </member> 589 </member>
466 <member name="F:OpenMetaverse.MoneyTransactionType.GiveInventory"> 590 <member name="T:OpenMetaverse.NetworkManager">
467 <summary> 591 <summary>
592 Login Routines
468 </summary> 593 </summary>
469 </member>
470 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectSale">
471 <summary> 594 <summary>
595 NetworkManager is responsible for managing the network layer of
596 OpenMetaverse. It tracks all the server connections, serializes
597 outgoing traffic and deserializes incoming traffic, and provides
598 instances of delegates for network-related events.
472 </summary> 599 </summary>
473 </member> 600 </member>
474 <member name="F:OpenMetaverse.MoneyTransactionType.Gift"> 601 <member name="F:OpenMetaverse.NetworkManager.m_LoginProgress">
602 <summary>The event subscribers, null of no subscribers</summary>
603 </member>
604 <member name="M:OpenMetaverse.NetworkManager.OnLoginProgress(OpenMetaverse.LoginProgressEventArgs)">
605 <summary>Raises the LoginProgress Event</summary>
606 <param name="e">A LoginProgressEventArgs object containing
607 the data sent from the simulator</param>
608 </member>
609 <member name="F:OpenMetaverse.NetworkManager.m_LoginProgressLock">
610 <summary>Thread sync lock object</summary>
611 </member>
612 <member name="F:OpenMetaverse.NetworkManager.LoginSeedCapability">
613 <summary>Seed CAPS URL returned from the login server</summary>
614 </member>
615 <member name="F:OpenMetaverse.NetworkManager.MaxAgentGroups">
616 <summary>Maximum number of groups an agent can belong to, -1 for unlimited</summary>
617 </member>
618 <member name="F:OpenMetaverse.NetworkManager.AgentAppearanceServiceURL">
619 <summary>Server side baking service URL</summary>
620 </member>
621 <member name="F:OpenMetaverse.NetworkManager.UDPBlacklist">
622 <summary>A list of packets obtained during the login process which
623 networkmanager will log but not process</summary>
624 </member>
625 <member name="M:OpenMetaverse.NetworkManager.DefaultLoginParams(System.String,System.String,System.String,System.String,System.String)">
475 <summary> 626 <summary>
627 Generate sane default values for a login request
476 </summary> 628 </summary>
629 <param name="firstName">Account first name</param>
630 <param name="lastName">Account last name</param>
631 <param name="password">Account password</param>
632 <param name="channel">Client application name (channel)</param>
633 <param name="version">Client application name + version</param>
634 <returns>A populated <seealso cref="T:OpenMetaverse.LoginParams"/> struct containing
635 sane defaults</returns>
477 </member> 636 </member>
478 <member name="F:OpenMetaverse.MoneyTransactionType.LandSale"> 637 <member name="M:OpenMetaverse.NetworkManager.Login(System.String,System.String,System.String,System.String,System.String)">
479 <summary> 638 <summary>
639 Simplified login that takes the most common and required fields
480 </summary> 640 </summary>
641 <param name="firstName">Account first name</param>
642 <param name="lastName">Account last name</param>
643 <param name="password">Account password</param>
644 <param name="channel">Client application name (channel)</param>
645 <param name="version">Client application name + version</param>
646 <returns>Whether the login was successful or not. On failure the
647 LoginErrorKey string will contain the error code and LoginMessage
648 will contain a description of the error</returns>
481 </member> 649 </member>
482 <member name="F:OpenMetaverse.MoneyTransactionType.ReferBonus"> 650 <member name="M:OpenMetaverse.NetworkManager.Login(System.String,System.String,System.String,System.String,System.String,System.String)">
483 <summary> 651 <summary>
652 Simplified login that takes the most common fields along with a
653 starting location URI, and can accept an MD5 string instead of a
654 plaintext password
484 </summary> 655 </summary>
656 <param name="firstName">Account first name</param>
657 <param name="lastName">Account last name</param>
658 <param name="password">Account password or MD5 hash of the password
659 such as $1$1682a1e45e9f957dcdf0bb56eb43319c</param>
660 <param name="channel">Client application name (channel)</param>
661 <param name="start">Starting location URI that can be built with
662 StartLocation()</param>
663 <param name="version">Client application name + version</param>
664 <returns>Whether the login was successful or not. On failure the
665 LoginErrorKey string will contain the error code and LoginMessage
666 will contain a description of the error</returns>
485 </member> 667 </member>
486 <member name="F:OpenMetaverse.MoneyTransactionType.InventorySale"> 668 <member name="M:OpenMetaverse.NetworkManager.Login(OpenMetaverse.LoginParams)">
487 <summary> 669 <summary>
670 Login that takes a struct of all the values that will be passed to
671 the login server
488 </summary> 672 </summary>
673 <param name="loginParams">The values that will be passed to the login
674 server, all fields must be set even if they are String.Empty</param>
675 <returns>Whether the login was successful or not. On failure the
676 LoginErrorKey string will contain the error code and LoginMessage
677 will contain a description of the error</returns>
489 </member> 678 </member>
490 <member name="F:OpenMetaverse.MoneyTransactionType.RefundPurchase"> 679 <member name="M:OpenMetaverse.NetworkManager.StartLocation(System.String,System.Int32,System.Int32,System.Int32)">
491 <summary> 680 <summary>
681 Build a start location URI for passing to the Login function
492 </summary> 682 </summary>
683 <param name="sim">Name of the simulator to start in</param>
684 <param name="x">X coordinate to start at</param>
685 <param name="y">Y coordinate to start at</param>
686 <param name="z">Z coordinate to start at</param>
687 <returns>String with a URI that can be used to login to a specified
688 location</returns>
493 </member> 689 </member>
494 <member name="F:OpenMetaverse.MoneyTransactionType.LandPassSale"> 690 <member name="M:OpenMetaverse.NetworkManager.RemoteLoginHandler(OpenMetaverse.LoginResponseData,OpenMetaverse.LoginParams)">
495 <summary> 691 <summary>
692 LoginParams and the initial login XmlRpcRequest were made on a remote machine.
693 This method now initializes libomv with the results.
496 </summary> 694 </summary>
497 </member> 695 </member>
498 <member name="F:OpenMetaverse.MoneyTransactionType.DwellBonus"> 696 <member name="M:OpenMetaverse.NetworkManager.LoginReplyXmlRpcHandler(Nwc.XmlRpc.XmlRpcResponse,OpenMetaverse.LoginParams)">
499 <summary> 697 <summary>
698 Handles response from XML-RPC login replies
500 </summary> 699 </summary>
501 </member> 700 </member>
502 <member name="F:OpenMetaverse.MoneyTransactionType.PayObject"> 701 <member name="M:OpenMetaverse.NetworkManager.LoginReplyXmlRpcHandler(OpenMetaverse.LoginResponseData,OpenMetaverse.LoginParams)">
503 <summary> 702 <summary>
703 Handles response from XML-RPC login replies with already parsed LoginResponseData
504 </summary> 704 </summary>
505 </member> 705 </member>
506 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPays"> 706 <member name="M:OpenMetaverse.NetworkManager.LoginReplyLLSDHandler(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)">
507 <summary> 707 <summary>
708 Handle response from LLSD login replies
508 </summary> 709 </summary>
710 <param name="client"></param>
711 <param name="result"></param>
712 <param name="error"></param>
509 </member> 713 </member>
510 <member name="F:OpenMetaverse.MoneyTransactionType.GroupLandDeed"> 714 <member name="M:OpenMetaverse.NetworkManager.GetPlatform">
511 <summary> 715 <summary>
716 Get current OS
512 </summary> 717 </summary>
718 <returns>Either "Win" or "Linux"</returns>
513 </member> 719 </member>
514 <member name="F:OpenMetaverse.MoneyTransactionType.GroupObjectDeed"> 720 <member name="M:OpenMetaverse.NetworkManager.GetMAC">
515 <summary> 721 <summary>
722 Get clients default Mac Address
516 </summary> 723 </summary>
724 <returns>A string containing the first found Mac Address</returns>
517 </member> 725 </member>
518 <member name="F:OpenMetaverse.MoneyTransactionType.GroupLiability"> 726 <member name="F:OpenMetaverse.NetworkManager.m_PacketSent">
727 <summary>The event subscribers, null of no subscribers</summary>
728 </member>
729 <member name="M:OpenMetaverse.NetworkManager.OnPacketSent(OpenMetaverse.PacketSentEventArgs)">
730 <summary>Raises the PacketSent Event</summary>
731 <param name="e">A PacketSentEventArgs object containing
732 the data sent from the simulator</param>
733 </member>
734 <member name="F:OpenMetaverse.NetworkManager.m_PacketSentLock">
735 <summary>Thread sync lock object</summary>
736 </member>
737 <member name="F:OpenMetaverse.NetworkManager.m_LoggedOut">
738 <summary>The event subscribers, null of no subscribers</summary>
739 </member>
740 <member name="M:OpenMetaverse.NetworkManager.OnLoggedOut(OpenMetaverse.LoggedOutEventArgs)">
741 <summary>Raises the LoggedOut Event</summary>
742 <param name="e">A LoggedOutEventArgs object containing
743 the data sent from the simulator</param>
744 </member>
745 <member name="F:OpenMetaverse.NetworkManager.m_LoggedOutLock">
746 <summary>Thread sync lock object</summary>
747 </member>
748 <member name="F:OpenMetaverse.NetworkManager.m_SimConnecting">
749 <summary>The event subscribers, null of no subscribers</summary>
750 </member>
751 <member name="M:OpenMetaverse.NetworkManager.OnSimConnecting(OpenMetaverse.SimConnectingEventArgs)">
752 <summary>Raises the SimConnecting Event</summary>
753 <param name="e">A SimConnectingEventArgs object containing
754 the data sent from the simulator</param>
755 </member>
756 <member name="F:OpenMetaverse.NetworkManager.m_SimConnectingLock">
757 <summary>Thread sync lock object</summary>
758 </member>
759 <member name="F:OpenMetaverse.NetworkManager.m_SimConnected">
760 <summary>The event subscribers, null of no subscribers</summary>
761 </member>
762 <member name="M:OpenMetaverse.NetworkManager.OnSimConnected(OpenMetaverse.SimConnectedEventArgs)">
763 <summary>Raises the SimConnected Event</summary>
764 <param name="e">A SimConnectedEventArgs object containing
765 the data sent from the simulator</param>
766 </member>
767 <member name="F:OpenMetaverse.NetworkManager.m_SimConnectedLock">
768 <summary>Thread sync lock object</summary>
769 </member>
770 <member name="F:OpenMetaverse.NetworkManager.m_SimDisconnected">
771 <summary>The event subscribers, null of no subscribers</summary>
772 </member>
773 <member name="M:OpenMetaverse.NetworkManager.OnSimDisconnected(OpenMetaverse.SimDisconnectedEventArgs)">
774 <summary>Raises the SimDisconnected Event</summary>
775 <param name="e">A SimDisconnectedEventArgs object containing
776 the data sent from the simulator</param>
777 </member>
778 <member name="F:OpenMetaverse.NetworkManager.m_SimDisconnectedLock">
779 <summary>Thread sync lock object</summary>
780 </member>
781 <member name="F:OpenMetaverse.NetworkManager.m_Disconnected">
782 <summary>The event subscribers, null of no subscribers</summary>
783 </member>
784 <member name="M:OpenMetaverse.NetworkManager.OnDisconnected(OpenMetaverse.DisconnectedEventArgs)">
785 <summary>Raises the Disconnected Event</summary>
786 <param name="e">A DisconnectedEventArgs object containing
787 the data sent from the simulator</param>
788 </member>
789 <member name="F:OpenMetaverse.NetworkManager.m_DisconnectedLock">
790 <summary>Thread sync lock object</summary>
791 </member>
792 <member name="F:OpenMetaverse.NetworkManager.m_SimChanged">
793 <summary>The event subscribers, null of no subscribers</summary>
794 </member>
795 <member name="M:OpenMetaverse.NetworkManager.OnSimChanged(OpenMetaverse.SimChangedEventArgs)">
796 <summary>Raises the SimChanged Event</summary>
797 <param name="e">A SimChangedEventArgs object containing
798 the data sent from the simulator</param>
799 </member>
800 <member name="F:OpenMetaverse.NetworkManager.m_SimChangedLock">
801 <summary>Thread sync lock object</summary>
802 </member>
803 <member name="F:OpenMetaverse.NetworkManager.m_EventQueueRunning">
804 <summary>The event subscribers, null of no subscribers</summary>
805 </member>
806 <member name="M:OpenMetaverse.NetworkManager.OnEventQueueRunning(OpenMetaverse.EventQueueRunningEventArgs)">
807 <summary>Raises the EventQueueRunning Event</summary>
808 <param name="e">A EventQueueRunningEventArgs object containing
809 the data sent from the simulator</param>
810 </member>
811 <member name="F:OpenMetaverse.NetworkManager.m_EventQueueRunningLock">
812 <summary>Thread sync lock object</summary>
813 </member>
814 <member name="F:OpenMetaverse.NetworkManager.Simulators">
815 <summary>All of the simulators we are currently connected to</summary>
816 </member>
817 <member name="F:OpenMetaverse.NetworkManager.CapsEvents">
818 <summary>Handlers for incoming capability events</summary>
819 </member>
820 <member name="F:OpenMetaverse.NetworkManager.PacketEvents">
821 <summary>Handlers for incoming packets</summary>
822 </member>
823 <member name="F:OpenMetaverse.NetworkManager.PacketInbox">
824 <summary>Incoming packets that are awaiting handling</summary>
825 </member>
826 <member name="F:OpenMetaverse.NetworkManager.PacketOutbox">
827 <summary>Outgoing packets that are awaiting handling</summary>
828 </member>
829 <member name="M:OpenMetaverse.NetworkManager.#ctor(OpenMetaverse.GridClient)">
519 <summary> 830 <summary>
831 Default constructor
520 </summary> 832 </summary>
833 <param name="client">Reference to the GridClient object</param>
521 </member> 834 </member>
522 <member name="F:OpenMetaverse.MoneyTransactionType.GroupDividend"> 835 <member name="M:OpenMetaverse.NetworkManager.RegisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})">
523 <summary> 836 <summary>
837 Register an event handler for a packet. This is a low level event
838 interface and should only be used if you are doing something not
839 supported in the library
524 </summary> 840 </summary>
841 <param name="type">Packet type to trigger events for</param>
842 <param name="callback">Callback to fire when a packet of this type
843 is received</param>
525 </member> 844 </member>
526 <member name="F:OpenMetaverse.MoneyTransactionType.GroupMembershipDues"> 845 <member name="M:OpenMetaverse.NetworkManager.RegisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs},System.Boolean)">
527 <summary> 846 <summary>
847 Register an event handler for a packet. This is a low level event
848 interface and should only be used if you are doing something not
849 supported in the library
528 </summary> 850 </summary>
851 <param name="type">Packet type to trigger events for</param>
852 <param name="callback">Callback to fire when a packet of this type
853 is received</param>
854 <param name="isAsync">True if the callback should be ran
855 asynchronously. Only set this to false (synchronous for callbacks
856 that will always complete quickly)</param>
857 <remarks>If any callback for a packet type is marked as
858 asynchronous, all callbacks for that packet type will be fired
859 asynchronously</remarks>
529 </member> 860 </member>
530 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectRelease"> 861 <member name="M:OpenMetaverse.NetworkManager.UnregisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})">
531 <summary> 862 <summary>
863 Unregister an event handler for a packet. This is a low level event
864 interface and should only be used if you are doing something not
865 supported in the library
532 </summary> 866 </summary>
867 <param name="type">Packet type this callback is registered with</param>
868 <param name="callback">Callback to stop firing events for</param>
533 </member> 869 </member>
534 <member name="F:OpenMetaverse.MoneyTransactionType.LandRelease"> 870 <member name="M:OpenMetaverse.NetworkManager.RegisterEventCallback(System.String,OpenMetaverse.Caps.EventQueueCallback)">
535 <summary> 871 <summary>
872 Register a CAPS event handler. This is a low level event interface
873 and should only be used if you are doing something not supported in
874 the library
536 </summary> 875 </summary>
876 <param name="capsEvent">Name of the CAPS event to register a handler for</param>
877 <param name="callback">Callback to fire when a CAPS event is received</param>
537 </member> 878 </member>
538 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectDelete"> 879 <member name="M:OpenMetaverse.NetworkManager.UnregisterEventCallback(System.String,OpenMetaverse.Caps.EventQueueCallback)">
539 <summary> 880 <summary>
881 Unregister a CAPS event handler. This is a low level event interface
882 and should only be used if you are doing something not supported in
883 the library
540 </summary> 884 </summary>
885 <param name="capsEvent">Name of the CAPS event this callback is
886 registered with</param>
887 <param name="callback">Callback to stop firing events for</param>
541 </member> 888 </member>
542 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicDecay"> 889 <member name="M:OpenMetaverse.NetworkManager.SendPacket(OpenMetaverse.Packets.Packet)">
543 <summary> 890 <summary>
891 Send a packet to the simulator the avatar is currently occupying
544 </summary> 892 </summary>
893 <param name="packet">Packet to send</param>
545 </member> 894 </member>
546 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicDelete"> 895 <member name="M:OpenMetaverse.NetworkManager.SendPacket(OpenMetaverse.Packets.Packet,OpenMetaverse.Simulator)">
547 <summary> 896 <summary>
897 Send a packet to a specified simulator
548 </summary> 898 </summary>
899 <param name="packet">Packet to send</param>
900 <param name="simulator">Simulator to send the packet to</param>
549 </member> 901 </member>
550 <member name="F:OpenMetaverse.MoneyTransactionType.LindenAdjustment"> 902 <member name="M:OpenMetaverse.NetworkManager.Connect(System.Net.IPAddress,System.UInt16,System.UInt64,System.Boolean,System.String)">
551 <summary> 903 <summary>
904 Connect to a simulator
552 </summary> 905 </summary>
906 <param name="ip">IP address to connect to</param>
907 <param name="port">Port to connect to</param>
908 <param name="handle">Handle for this simulator, to identify its
909 location in the grid</param>
910 <param name="setDefault">Whether to set CurrentSim to this new
911 connection, use this if the avatar is moving in to this simulator</param>
912 <param name="seedcaps">URL of the capabilities server to use for
913 this sim connection</param>
914 <returns>A Simulator object on success, otherwise null</returns>
553 </member> 915 </member>
554 <member name="F:OpenMetaverse.MoneyTransactionType.LindenGrant"> 916 <member name="M:OpenMetaverse.NetworkManager.Connect(System.Net.IPEndPoint,System.UInt64,System.Boolean,System.String)">
555 <summary> 917 <summary>
918 Connect to a simulator
556 </summary> 919 </summary>
920 <param name="endPoint">IP address and port to connect to</param>
921 <param name="handle">Handle for this simulator, to identify its
922 location in the grid</param>
923 <param name="setDefault">Whether to set CurrentSim to this new
924 connection, use this if the avatar is moving in to this simulator</param>
925 <param name="seedcaps">URL of the capabilities server to use for
926 this sim connection</param>
927 <returns>A Simulator object on success, otherwise null</returns>
557 </member> 928 </member>
558 <member name="F:OpenMetaverse.MoneyTransactionType.LindenPenalty"> 929 <member name="M:OpenMetaverse.NetworkManager.Logout">
559 <summary> 930 <summary>
931 Initiate a blocking logout request. This will return when the logout
932 handshake has completed or when <code>Settings.LOGOUT_TIMEOUT</code>
933 has expired and the network layer is manually shut down
560 </summary> 934 </summary>
561 </member> 935 </member>
562 <member name="F:OpenMetaverse.MoneyTransactionType.EventFee"> 936 <member name="M:OpenMetaverse.NetworkManager.RequestLogout">
563 <summary> 937 <summary>
938 Initiate the logout process. Check if logout succeeded with the
939 <code>OnLogoutReply</code> event, and if this does not fire the
940 <code>Shutdown()</code> function needs to be manually called
564 </summary> 941 </summary>
565 </member> 942 </member>
566 <member name="F:OpenMetaverse.MoneyTransactionType.EventPrize"> 943 <member name="M:OpenMetaverse.NetworkManager.DisconnectSim(OpenMetaverse.Simulator,System.Boolean)">
567 <summary> 944 <summary>
945 Close a connection to the given simulator
568 </summary> 946 </summary>
947 <param name="simulator"></param>
948 <param name="sendCloseCircuit"></param>
569 </member> 949 </member>
570 <member name="F:OpenMetaverse.MoneyTransactionType.StipendBasic"> 950 <member name="M:OpenMetaverse.NetworkManager.Shutdown(OpenMetaverse.NetworkManager.DisconnectType)">
571 <summary> 951 <summary>
952 Shutdown will disconnect all the sims except for the current sim
953 first, and then kill the connection to CurrentSim. This should only
954 be called if the logout process times out on <code>RequestLogout</code>
572 </summary> 955 </summary>
956 <param name="type">Type of shutdown</param>
573 </member> 957 </member>
574 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDeveloper"> 958 <member name="M:OpenMetaverse.NetworkManager.Shutdown(OpenMetaverse.NetworkManager.DisconnectType,System.String)">
575 <summary> 959 <summary>
960 Shutdown will disconnect all the sims except for the current sim
961 first, and then kill the connection to CurrentSim. This should only
962 be called if the logout process times out on <code>RequestLogout</code>
576 </summary> 963 </summary>
964 <param name="type">Type of shutdown</param>
965 <param name="message">Shutdown message</param>
577 </member> 966 </member>
578 <member name="F:OpenMetaverse.MoneyTransactionType.StipendAlways"> 967 <member name="M:OpenMetaverse.NetworkManager.FindSimulator(System.Net.IPEndPoint)">
579 <summary> 968 <summary>
969 Searches through the list of currently connected simulators to find
970 one attached to the given IPEndPoint
580 </summary> 971 </summary>
972 <param name="endPoint">IPEndPoint of the Simulator to search for</param>
973 <returns>A Simulator reference on success, otherwise null</returns>
581 </member> 974 </member>
582 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDaily"> 975 <member name="M:OpenMetaverse.NetworkManager.RaiseConnectedEvent(OpenMetaverse.Simulator)">
583 <summary> 976 <summary>
977 Fire an event when an event queue connects for capabilities
584 </summary> 978 </summary>
979 <param name="simulator">Simulator the event queue is attached to</param>
585 </member> 980 </member>
586 <member name="F:OpenMetaverse.MoneyTransactionType.StipendRating"> 981 <member name="M:OpenMetaverse.NetworkManager.LogoutReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
982 <summary>Process an incoming packet and raise the appropriate events</summary>
983 <param name="sender">The sender</param>
984 <param name="e">The EventArgs object containing the packet data</param>
985 </member>
986 <member name="M:OpenMetaverse.NetworkManager.StartPingCheckHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
987 <summary>Process an incoming packet and raise the appropriate events</summary>
988 <param name="sender">The sender</param>
989 <param name="e">The EventArgs object containing the packet data</param>
990 </member>
991 <member name="M:OpenMetaverse.NetworkManager.CompletePingCheckHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
992 <summary>Process an incoming packet and raise the appropriate events</summary>
993 <param name="sender">The sender</param>
994 <param name="e">The EventArgs object containing the packet data</param>
995 </member>
996 <member name="M:OpenMetaverse.NetworkManager.SimStatsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
997 <summary>Process an incoming packet and raise the appropriate events</summary>
998 <param name="sender">The sender</param>
999 <param name="e">The EventArgs object containing the packet data</param>
1000 </member>
1001 <member name="M:OpenMetaverse.NetworkManager.RegionHandshakeHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1002 <summary>Process an incoming packet and raise the appropriate events</summary>
1003 <param name="sender">The sender</param>
1004 <param name="e">The EventArgs object containing the packet data</param>
1005 </member>
1006 <member name="M:OpenMetaverse.NetworkManager.DisableSimulatorHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1007 <summary>Process an incoming packet and raise the appropriate events</summary>
1008 <param name="sender">The sender</param>
1009 <param name="e">The EventArgs object containing the packet data</param>
1010 </member>
1011 <member name="M:OpenMetaverse.NetworkManager.KickUserHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1012 <summary>Process an incoming packet and raise the appropriate events</summary>
1013 <param name="sender">The sender</param>
1014 <param name="e">The EventArgs object containing the packet data</param>
1015 </member>
1016 <member name="E:OpenMetaverse.NetworkManager.LoginProgress">
1017 <summary>Raised when the simulator sends us data containing
1018 ...</summary>
1019 </member>
1020 <member name="E:OpenMetaverse.NetworkManager.OnLoginResponse">
1021 <summary>Called when a reply is received from the login server, the
1022 login sequence will block until this event returns</summary>
1023 </member>
1024 <member name="P:OpenMetaverse.NetworkManager.LoginStatusCode">
1025 <summary>Current state of logging in</summary>
1026 </member>
1027 <member name="P:OpenMetaverse.NetworkManager.LoginErrorKey">
1028 <summary>Upon login failure, contains a short string key for the
1029 type of login error that occurred</summary>
1030 </member>
1031 <member name="P:OpenMetaverse.NetworkManager.RawLoginReply">
1032 <summary>The raw XML-RPC reply from the login server, exactly as it
1033 was received (minus the HTTP header)</summary>
1034 </member>
1035 <member name="P:OpenMetaverse.NetworkManager.LoginMessage">
1036 <summary>During login this contains a descriptive version of
1037 LoginStatusCode. After a successful login this will contain the
1038 message of the day, and after a failed login a descriptive error
1039 message will be returned</summary>
1040 </member>
1041 <member name="E:OpenMetaverse.NetworkManager.PacketSent">
1042 <summary>Raised when the simulator sends us data containing
1043 ...</summary>
1044 </member>
1045 <member name="E:OpenMetaverse.NetworkManager.LoggedOut">
1046 <summary>Raised when the simulator sends us data containing
1047 ...</summary>
1048 </member>
1049 <member name="E:OpenMetaverse.NetworkManager.SimConnecting">
1050 <summary>Raised when the simulator sends us data containing
1051 ...</summary>
1052 </member>
1053 <member name="E:OpenMetaverse.NetworkManager.SimConnected">
1054 <summary>Raised when the simulator sends us data containing
1055 ...</summary>
1056 </member>
1057 <member name="E:OpenMetaverse.NetworkManager.SimDisconnected">
1058 <summary>Raised when the simulator sends us data containing
1059 ...</summary>
1060 </member>
1061 <member name="E:OpenMetaverse.NetworkManager.Disconnected">
1062 <summary>Raised when the simulator sends us data containing
1063 ...</summary>
1064 </member>
1065 <member name="E:OpenMetaverse.NetworkManager.SimChanged">
1066 <summary>Raised when the simulator sends us data containing
1067 ...</summary>
1068 </member>
1069 <member name="E:OpenMetaverse.NetworkManager.EventQueueRunning">
1070 <summary>Raised when the simulator sends us data containing
1071 ...</summary>
1072 </member>
1073 <member name="P:OpenMetaverse.NetworkManager.CircuitCode">
1074 <summary>Unique identifier associated with our connections to
1075 simulators</summary>
1076 </member>
1077 <member name="P:OpenMetaverse.NetworkManager.CurrentSim">
1078 <summary>The simulator that the logged in avatar is currently
1079 occupying</summary>
1080 </member>
1081 <member name="P:OpenMetaverse.NetworkManager.Connected">
1082 <summary>Shows whether the network layer is logged in to the
1083 grid or not</summary>
1084 </member>
1085 <member name="P:OpenMetaverse.NetworkManager.InboxCount">
1086 <summary>Number of packets in the incoming queue</summary>
1087 </member>
1088 <member name="P:OpenMetaverse.NetworkManager.OutboxCount">
1089 <summary>Number of packets in the outgoing queue</summary>
1090 </member>
1091 <member name="T:OpenMetaverse.NetworkManager.LoginResponseCallback">
587 <summary> 1092 <summary>
1093
588 </summary> 1094 </summary>
1095 <param name="loginSuccess"></param>
1096 <param name="redirect"></param>
1097 <param name="replyData"></param>
1098 <param name="message"></param>
1099 <param name="reason"></param>
589 </member> 1100 </member>
590 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDelta"> 1101 <member name="T:OpenMetaverse.NetworkManager.DisconnectType">
591 <summary> 1102 <summary>
1103 Explains why a simulator or the grid disconnected from us
592 </summary> 1104 </summary>
593 </member> 1105 </member>
594 <member name="T:OpenMetaverse.TransactionFlags"> 1106 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.ClientInitiated">
1107 <summary>The client requested the logout or simulator disconnect</summary>
1108 </member>
1109 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.ServerInitiated">
1110 <summary>The server notified us that it is disconnecting</summary>
1111 </member>
1112 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.NetworkTimeout">
1113 <summary>Either a socket was closed or network traffic timed out</summary>
1114 </member>
1115 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.SimShutdown">
1116 <summary>The last active simulator shut down</summary>
1117 </member>
1118 <member name="T:OpenMetaverse.NetworkManager.IncomingPacket">
595 <summary> 1119 <summary>
1120 Holds a simulator reference and a decoded packet, these structs are put in
1121 the packet inbox for event handling
596 </summary> 1122 </summary>
597 </member> 1123 </member>
598 <member name="F:OpenMetaverse.TransactionFlags.None"> 1124 <member name="F:OpenMetaverse.NetworkManager.IncomingPacket.Simulator">
1125 <summary>Reference to the simulator that this packet came from</summary>
1126 </member>
1127 <member name="F:OpenMetaverse.NetworkManager.IncomingPacket.Packet">
1128 <summary>Packet that needs to be processed</summary>
1129 </member>
1130 <member name="T:OpenMetaverse.NetworkManager.OutgoingPacket">
599 <summary> 1131 <summary>
1132 Holds a simulator reference and a serialized packet, these structs are put in
1133 the packet outbox for sending
600 </summary> 1134 </summary>
601 </member> 1135 </member>
602 <member name="F:OpenMetaverse.TransactionFlags.SourceGroup"> 1136 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Simulator">
1137 <summary>Reference to the simulator this packet is destined for</summary>
1138 </member>
1139 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Buffer">
1140 <summary>Packet that needs to be sent</summary>
1141 </member>
1142 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.SequenceNumber">
1143 <summary>Sequence number of the wrapped packet</summary>
1144 </member>
1145 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.ResendCount">
1146 <summary>Number of times this packet has been resent</summary>
1147 </member>
1148 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.TickCount">
1149 <summary>Environment.TickCount when this packet was last sent over the wire</summary>
1150 </member>
1151 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Type">
1152 <summary>Type of the packet</summary>
1153 </member>
1154 <member name="T:OpenMetaverse.PacketEventDictionary">
603 <summary> 1155 <summary>
1156 Registers, unregisters, and fires events generated by incoming packets
604 </summary> 1157 </summary>
605 </member> 1158 </member>
606 <member name="F:OpenMetaverse.TransactionFlags.DestGroup"> 1159 <member name="F:OpenMetaverse.PacketEventDictionary.Client">
1160 <summary>Reference to the GridClient object</summary>
1161 </member>
1162 <member name="M:OpenMetaverse.PacketEventDictionary.#ctor(OpenMetaverse.GridClient)">
607 <summary> 1163 <summary>
1164 Default constructor
608 </summary> 1165 </summary>
1166 <param name="client"></param>
609 </member> 1167 </member>
610 <member name="F:OpenMetaverse.TransactionFlags.OwnerGroup"> 1168 <member name="M:OpenMetaverse.PacketEventDictionary.RegisterEvent(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs},System.Boolean)">
611 <summary> 1169 <summary>
1170 Register an event handler
612 </summary> 1171 </summary>
1172 <remarks>Use PacketType.Default to fire this event on every
1173 incoming packet</remarks>
1174 <param name="packetType">Packet type to register the handler for</param>
1175 <param name="eventHandler">Callback to be fired</param>
1176 <param name="isAsync">True if this callback should be ran
1177 asynchronously, false to run it synchronous</param>
613 </member> 1178 </member>
614 <member name="F:OpenMetaverse.TransactionFlags.SimultaneousContribution"> 1179 <member name="M:OpenMetaverse.PacketEventDictionary.UnregisterEvent(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})">
615 <summary> 1180 <summary>
1181 Unregister an event handler
616 </summary> 1182 </summary>
1183 <param name="packetType">Packet type to unregister the handler for</param>
1184 <param name="eventHandler">Callback to be unregistered</param>
617 </member> 1185 </member>
618 <member name="F:OpenMetaverse.TransactionFlags.ContributionRemoval"> 1186 <member name="M:OpenMetaverse.PacketEventDictionary.RaiseEvent(OpenMetaverse.Packets.PacketType,OpenMetaverse.Packets.Packet,OpenMetaverse.Simulator)">
619 <summary> 1187 <summary>
1188 Fire the events registered for this packet type
620 </summary> 1189 </summary>
1190 <param name="packetType">Incoming packet type</param>
1191 <param name="packet">Incoming packet</param>
1192 <param name="simulator">Simulator this packet was received from</param>
621 </member> 1193 </member>
622 <member name="T:OpenMetaverse.MeanCollisionType"> 1194 <member name="T:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper">
623 <summary> 1195 <summary>
1196 Object that is passed to worker threads in the ThreadPool for
1197 firing packet callbacks
624 </summary> 1198 </summary>
625 </member> 1199 </member>
626 <member name="F:OpenMetaverse.MeanCollisionType.None"> 1200 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Callback">
1201 <summary>Callback to fire for this packet</summary>
1202 </member>
1203 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Simulator">
1204 <summary>Reference to the simulator that this packet came from</summary>
1205 </member>
1206 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Packet">
1207 <summary>The packet that needs to be processed</summary>
1208 </member>
1209 <member name="T:OpenMetaverse.CapsEventDictionary">
627 <summary> 1210 <summary>
1211 Registers, unregisters, and fires events generated by the Capabilities
1212 event queue
628 </summary> 1213 </summary>
629 </member> 1214 </member>
630 <member name="F:OpenMetaverse.MeanCollisionType.Bump"> 1215 <member name="F:OpenMetaverse.CapsEventDictionary.Client">
1216 <summary>Reference to the GridClient object</summary>
1217 </member>
1218 <member name="M:OpenMetaverse.CapsEventDictionary.#ctor(OpenMetaverse.GridClient)">
631 <summary> 1219 <summary>
1220 Default constructor
632 </summary> 1221 </summary>
1222 <param name="client">Reference to the GridClient object</param>
633 </member> 1223 </member>
634 <member name="F:OpenMetaverse.MeanCollisionType.LLPushObject"> 1224 <member name="M:OpenMetaverse.CapsEventDictionary.RegisterEvent(System.String,OpenMetaverse.Caps.EventQueueCallback)">
635 <summary> 1225 <summary>
1226 Register an new event handler for a capabilities event sent via the EventQueue
636 </summary> 1227 </summary>
1228 <remarks>Use String.Empty to fire this event on every CAPS event</remarks>
1229 <param name="capsEvent">Capability event name to register the
1230 handler for</param>
1231 <param name="eventHandler">Callback to fire</param>
637 </member> 1232 </member>
638 <member name="F:OpenMetaverse.MeanCollisionType.SelectedObjectCollide"> 1233 <member name="M:OpenMetaverse.CapsEventDictionary.UnregisterEvent(System.String,OpenMetaverse.Caps.EventQueueCallback)">
639 <summary> 1234 <summary>
1235 Unregister a previously registered capabilities handler
640 </summary> 1236 </summary>
1237 <param name="capsEvent">Capability event name unregister the
1238 handler for</param>
1239 <param name="eventHandler">Callback to unregister</param>
641 </member> 1240 </member>
642 <member name="F:OpenMetaverse.MeanCollisionType.ScriptedObjectCollide"> 1241 <member name="M:OpenMetaverse.CapsEventDictionary.RaiseEvent(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
643 <summary> 1242 <summary>
1243 Fire the events registered for this event type synchronously
644 </summary> 1244 </summary>
1245 <param name="capsEvent">Capability name</param>
1246 <param name="message">Decoded event body</param>
1247 <param name="simulator">Reference to the simulator that
1248 generated this event</param>
645 </member> 1249 </member>
646 <member name="F:OpenMetaverse.MeanCollisionType.PhysicalObjectCollide"> 1250 <member name="M:OpenMetaverse.CapsEventDictionary.BeginRaiseEvent(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
647 <summary> 1251 <summary>
1252 Fire the events registered for this event type asynchronously
648 </summary> 1253 </summary>
1254 <param name="capsEvent">Capability name</param>
1255 <param name="message">Decoded event body</param>
1256 <param name="simulator">Reference to the simulator that
1257 generated this event</param>
649 </member> 1258 </member>
650 <member name="T:OpenMetaverse.ScriptControlChange"> 1259 <member name="T:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper">
651 <summary> 1260 <summary>
652 Flags sent when a script takes or releases a control 1261 Object that is passed to worker threads in the ThreadPool for
1262 firing CAPS callbacks
653 </summary> 1263 </summary>
654 <remarks>NOTE: (need to verify) These might be a subset of the ControlFlags enum in Movement,</remarks>
655 </member> 1264 </member>
656 <member name="F:OpenMetaverse.ScriptControlChange.None"> 1265 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Callback">
657 <summary>No Flags set</summary> 1266 <summary>Callback to fire for this packet</summary>
658 </member> 1267 </member>
659 <member name="F:OpenMetaverse.ScriptControlChange.Forward"> 1268 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.CapsEvent">
660 <summary>Forward (W or up Arrow)</summary> 1269 <summary>Name of the CAPS event</summary>
661 </member> 1270 </member>
662 <member name="F:OpenMetaverse.ScriptControlChange.Back"> 1271 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Message">
663 <summary>Back (S or down arrow)</summary> 1272 <summary>Strongly typed decoded data</summary>
664 </member> 1273 </member>
665 <member name="F:OpenMetaverse.ScriptControlChange.Left"> 1274 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Simulator">
666 <summary>Move left (shift+A or left arrow)</summary> 1275 <summary>Reference to the simulator that generated this event</summary>
667 </member> 1276 </member>
668 <member name="F:OpenMetaverse.ScriptControlChange.Right"> 1277 <member name="T:OpenMetaverse.DownloadRequest">
669 <summary>Move right (shift+D or right arrow)</summary> 1278 <summary>
1279 Represends individual HTTP Download request
1280 </summary>
670 </member> 1281 </member>
671 <member name="F:OpenMetaverse.ScriptControlChange.Up"> 1282 <member name="F:OpenMetaverse.DownloadRequest.Address">
672 <summary>Up (E or PgUp)</summary> 1283 <summary>URI of the item to fetch</summary>
673 </member> 1284 </member>
674 <member name="F:OpenMetaverse.ScriptControlChange.Down"> 1285 <member name="F:OpenMetaverse.DownloadRequest.MillisecondsTimeout">
675 <summary>Down (C or PgDown)</summary> 1286 <summary>Timout specified in milliseconds</summary>
676 </member> 1287 </member>
677 <member name="F:OpenMetaverse.ScriptControlChange.RotateLeft"> 1288 <member name="F:OpenMetaverse.DownloadRequest.DownloadProgressCallback">
678 <summary>Rotate left (A or left arrow)</summary> 1289 <summary>Download progress callback</summary>
679 </member> 1290 </member>
680 <member name="F:OpenMetaverse.ScriptControlChange.RotateRight"> 1291 <member name="F:OpenMetaverse.DownloadRequest.CompletedCallback">
681 <summary>Rotate right (D or right arrow)</summary> 1292 <summary>Download completed callback</summary>
682 </member> 1293 </member>
683 <member name="F:OpenMetaverse.ScriptControlChange.LeftButton"> 1294 <member name="F:OpenMetaverse.DownloadRequest.ContentType">
684 <summary>Left Mouse Button</summary> 1295 <summary>Accept the following content type</summary>
685 </member> 1296 </member>
686 <member name="F:OpenMetaverse.ScriptControlChange.MouseLookLeftButton"> 1297 <member name="F:OpenMetaverse.DownloadRequest.Retries">
687 <summary>Left Mouse button in MouseLook</summary> 1298 <summary>How many times will this request be retried</summary>
688 </member> 1299 </member>
689 <member name="T:OpenMetaverse.AgentFlags"> 1300 <member name="F:OpenMetaverse.DownloadRequest.Attempt">
1301 <summary>Current fetch attempt</summary>
1302 </member>
1303 <member name="M:OpenMetaverse.DownloadRequest.#ctor">
1304 <summary>Default constructor</summary>
1305 </member>
1306 <member name="M:OpenMetaverse.DownloadRequest.#ctor(System.Uri,System.Int32,System.String,OpenMetaverse.Http.CapsBase.DownloadProgressEventHandler,OpenMetaverse.Http.CapsBase.RequestCompletedEventHandler)">
1307 <summary>Constructor</summary>
1308 </member>
1309 <member name="T:OpenMetaverse.DownloadManager">
690 <summary> 1310 <summary>
691 Currently only used to hide your group title 1311 Manages async HTTP downloads with a limit on maximum
1312 concurrent downloads
692 </summary> 1313 </summary>
693 </member> 1314 </member>
694 <member name="F:OpenMetaverse.AgentFlags.None"> 1315 <member name="M:OpenMetaverse.DownloadManager.#ctor">
695 <summary>No flags set</summary> 1316 <summary>Default constructor</summary>
696 </member> 1317 </member>
697 <member name="F:OpenMetaverse.AgentFlags.HideTitle"> 1318 <member name="M:OpenMetaverse.DownloadManager.Dispose">
698 <summary>Hide your group title</summary> 1319 <summary>Cleanup method</summary>
699 </member> 1320 </member>
700 <member name="T:OpenMetaverse.AgentState"> 1321 <member name="M:OpenMetaverse.DownloadManager.SetupRequest(System.Uri,System.String)">
1322 <summary>Setup http download request</summary>
1323 </member>
1324 <member name="M:OpenMetaverse.DownloadManager.EnqueuePending">
1325 <summary>Check the queue for pending work</summary>
1326 </member>
1327 <member name="M:OpenMetaverse.DownloadManager.QueueDownlad(OpenMetaverse.DownloadRequest)">
1328 <summary>Enqueue a new HTPP download</summary>
1329 </member>
1330 <member name="P:OpenMetaverse.DownloadManager.ParallelDownloads">
1331 <summary>Maximum number of parallel downloads from a single endpoint</summary>
1332 </member>
1333 <member name="P:OpenMetaverse.DownloadManager.ClientCert">
1334 <summary>Client certificate</summary>
1335 </member>
1336 <member name="T:OpenMetaverse.BinBVHAnimationReader">
701 <summary> 1337 <summary>
702 Action state of the avatar, which can currently be typing and 1338 Reads in a byte array of an Animation Asset created by the SecondLife(tm) client.
703 editing
704 </summary> 1339 </summary>
705 </member> 1340 </member>
706 <member name="F:OpenMetaverse.AgentState.None"> 1341 <member name="F:OpenMetaverse.BinBVHAnimationReader.rotationkeys">
707 <summary> 1342 <summary>
1343 Rotation Keyframe count (used internally)
708 </summary> 1344 </summary>
709 </member> 1345 </member>
710 <member name="F:OpenMetaverse.AgentState.Typing"> 1346 <member name="F:OpenMetaverse.BinBVHAnimationReader.positionkeys">
711 <summary> 1347 <summary>
1348 Position Keyframe count (used internally)
712 </summary> 1349 </summary>
713 </member> 1350 </member>
714 <member name="F:OpenMetaverse.AgentState.Editing"> 1351 <member name="F:OpenMetaverse.BinBVHAnimationReader.Priority">
715 <summary> 1352 <summary>
1353 Animation Priority
716 </summary> 1354 </summary>
717 </member> 1355 </member>
718 <member name="T:OpenMetaverse.TeleportStatus"> 1356 <member name="F:OpenMetaverse.BinBVHAnimationReader.Length">
719 <summary> 1357 <summary>
720 Current teleport status 1358 The animation length in seconds.
721 </summary> 1359 </summary>
722 </member> 1360 </member>
723 <member name="F:OpenMetaverse.TeleportStatus.None"> 1361 <member name="F:OpenMetaverse.BinBVHAnimationReader.ExpressionName">
724 <summary>Unknown status</summary>
725 </member>
726 <member name="F:OpenMetaverse.TeleportStatus.Start">
727 <summary>Teleport initialized</summary>
728 </member>
729 <member name="F:OpenMetaverse.TeleportStatus.Progress">
730 <summary>Teleport in progress</summary>
731 </member>
732 <member name="F:OpenMetaverse.TeleportStatus.Failed">
733 <summary>Teleport failed</summary>
734 </member>
735 <member name="F:OpenMetaverse.TeleportStatus.Finished">
736 <summary>Teleport completed</summary>
737 </member>
738 <member name="F:OpenMetaverse.TeleportStatus.Cancelled">
739 <summary>Teleport cancelled</summary>
740 </member>
741 <member name="T:OpenMetaverse.TeleportFlags">
742 <summary> 1362 <summary>
1363 Expression set in the client. Null if [None] is selected
743 </summary> 1364 </summary>
744 </member> 1365 </member>
745 <member name="F:OpenMetaverse.TeleportFlags.Default"> 1366 <member name="F:OpenMetaverse.BinBVHAnimationReader.InPoint">
746 <summary>No flags set, or teleport failed</summary>
747 </member>
748 <member name="F:OpenMetaverse.TeleportFlags.SetHomeToTarget">
749 <summary>Set when newbie leaves help island for first time</summary>
750 </member>
751 <member name="F:OpenMetaverse.TeleportFlags.SetLastToTarget">
752 <summary> 1367 <summary>
1368 The time in seconds to start the animation
753 </summary> 1369 </summary>
754 </member> 1370 </member>
755 <member name="F:OpenMetaverse.TeleportFlags.ViaLure"> 1371 <member name="F:OpenMetaverse.BinBVHAnimationReader.OutPoint">
756 <summary>Via Lure</summary> 1372 <summary>
757 </member> 1373 The time in seconds to end the animation
758 <member name="F:OpenMetaverse.TeleportFlags.ViaLandmark"> 1374 </summary>
759 <summary>Via Landmark</summary>
760 </member>
761 <member name="F:OpenMetaverse.TeleportFlags.ViaLocation">
762 <summary>Via Location</summary>
763 </member>
764 <member name="F:OpenMetaverse.TeleportFlags.ViaHome">
765 <summary>Via Home</summary>
766 </member> 1375 </member>
767 <member name="F:OpenMetaverse.TeleportFlags.ViaTelehub"> 1376 <member name="F:OpenMetaverse.BinBVHAnimationReader.Loop">
768 <summary>Via Telehub</summary> 1377 <summary>
1378 Loop the animation
1379 </summary>
769 </member> 1380 </member>
770 <member name="F:OpenMetaverse.TeleportFlags.ViaLogin"> 1381 <member name="F:OpenMetaverse.BinBVHAnimationReader.EaseInTime">
771 <summary>Via Login</summary> 1382 <summary>
1383 Meta data. Ease in Seconds.
1384 </summary>
772 </member> 1385 </member>
773 <member name="F:OpenMetaverse.TeleportFlags.ViaGodlikeLure"> 1386 <member name="F:OpenMetaverse.BinBVHAnimationReader.EaseOutTime">
774 <summary>Linden Summoned</summary> 1387 <summary>
1388 Meta data. Ease out seconds.
1389 </summary>
775 </member> 1390 </member>
776 <member name="F:OpenMetaverse.TeleportFlags.Godlike"> 1391 <member name="F:OpenMetaverse.BinBVHAnimationReader.HandPose">
777 <summary>Linden Forced me</summary> 1392 <summary>
1393 Meta Data for the Hand Pose
1394 </summary>
778 </member> 1395 </member>
779 <member name="F:OpenMetaverse.TeleportFlags.NineOneOne"> 1396 <member name="F:OpenMetaverse.BinBVHAnimationReader.JointCount">
780 <summary> 1397 <summary>
1398 Number of joints defined in the animation
781 </summary> 1399 </summary>
782 </member> 1400 </member>
783 <member name="F:OpenMetaverse.TeleportFlags.DisableCancel"> 1401 <member name="F:OpenMetaverse.BinBVHAnimationReader.joints">
784 <summary>Agent Teleported Home via Script</summary> 1402 <summary>
1403 Contains an array of joints
1404 </summary>
785 </member> 1405 </member>
786 <member name="F:OpenMetaverse.TeleportFlags.ViaRegionID"> 1406 <member name="M:OpenMetaverse.BinBVHAnimationReader.#ctor(System.Byte[])">
787 <summary> 1407 <summary>
1408 Searialize an animation asset into it's joints/keyframes/meta data
788 </summary> 1409 </summary>
1410 <param name="animationdata"></param>
789 </member> 1411 </member>
790 <member name="F:OpenMetaverse.TeleportFlags.IsFlying"> 1412 <member name="M:OpenMetaverse.BinBVHAnimationReader.ReadBytesUntilNull(System.Byte[],System.Int32@)">
791 <summary> 1413 <summary>
1414 Variable length strings seem to be null terminated in the animation asset.. but..
1415 use with caution, home grown.
1416 advances the index.
792 </summary> 1417 </summary>
1418 <param name="data">The animation asset byte array</param>
1419 <param name="i">The offset to start reading</param>
1420 <returns>a string</returns>
793 </member> 1421 </member>
794 <member name="F:OpenMetaverse.TeleportFlags.ResetHome"> 1422 <member name="M:OpenMetaverse.BinBVHAnimationReader.readJoint(System.Byte[],System.Int32@)">
795 <summary> 1423 <summary>
1424 Read in a Joint from an animation asset byte array
1425 Variable length Joint fields, yay!
1426 Advances the index
796 </summary> 1427 </summary>
1428 <param name="data">animation asset byte array</param>
1429 <param name="i">Byte Offset of the start of the joint</param>
1430 <returns>The Joint data serialized into the binBVHJoint structure</returns>
797 </member> 1431 </member>
798 <member name="F:OpenMetaverse.TeleportFlags.ForceRedirect"> 1432 <member name="M:OpenMetaverse.BinBVHAnimationReader.readKeys(System.Byte[],System.Int32@,System.Int32,System.Single,System.Single)">
799 <summary>forced to new location for example when avatar is banned or ejected</summary> 1433 <summary>
1434 Read Keyframes of a certain type
1435 advance i
1436 </summary>
1437 <param name="data">Animation Byte array</param>
1438 <param name="i">Offset in the Byte Array. Will be advanced</param>
1439 <param name="keycount">Number of Keyframes</param>
1440 <param name="min">Scaling Min to pass to the Uint16ToFloat method</param>
1441 <param name="max">Scaling Max to pass to the Uint16ToFloat method</param>
1442 <returns></returns>
1443 </member>
1444 <member name="M:OpenMetaverse.BinBVHAnimationReader.Equals(System.Object)">
1445 <summary>
1446 Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>.
1447 </summary>
1448 <returns>
1449 true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false.
1450 </returns>
1451 <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.
1452 </param><exception cref="T:System.NullReferenceException">The <paramref name="obj"/> parameter is null.
1453 </exception><filterpriority>2</filterpriority>
1454 </member>
1455 <member name="M:OpenMetaverse.BinBVHAnimationReader.GetHashCode">
1456 <summary>
1457 Serves as a hash function for a particular type.
1458 </summary>
1459 <returns>
1460 A hash code for the current <see cref="T:System.Object"/>.
1461 </returns>
1462 <filterpriority>2</filterpriority>
800 </member> 1463 </member>
801 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaLure"> 1464 <member name="T:OpenMetaverse.binBVHJoint">
802 <summary>Teleport Finished via a Lure</summary> 1465 <summary>
1466 A Joint and it's associated meta data and keyframes
1467 </summary>
803 </member> 1468 </member>
804 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaNewSim"> 1469 <member name="M:OpenMetaverse.binBVHJoint.Equals(System.Object)">
805 <summary>Finished, Sim Changed</summary> 1470 <summary>
1471 Indicates whether this instance and a specified object are equal.
1472 </summary>
1473 <returns>
1474 true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.
1475 </returns>
1476 <param name="obj">Another object to compare to.
1477 </param><filterpriority>2</filterpriority>
1478 </member>
1479 <member name="M:OpenMetaverse.binBVHJoint.GetHashCode">
1480 <summary>
1481 Returns the hash code for this instance.
1482 </summary>
1483 <returns>
1484 A 32-bit signed integer that is the hash code for this instance.
1485 </returns>
1486 <filterpriority>2</filterpriority>
806 </member> 1487 </member>
807 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaSameSim"> 1488 <member name="F:OpenMetaverse.binBVHJoint.Name">
808 <summary>Finished, Same Sim</summary> 1489 <summary>
1490 Name of the Joint. Matches the avatar_skeleton.xml in client distros
1491 </summary>
809 </member> 1492 </member>
810 <member name="T:OpenMetaverse.TeleportLureFlags"> 1493 <member name="F:OpenMetaverse.binBVHJoint.Priority">
811 <summary> 1494 <summary>
1495 Joint Animation Override? Was the same as the Priority in testing..
812 </summary> 1496 </summary>
813 </member> 1497 </member>
814 <member name="F:OpenMetaverse.TeleportLureFlags.NormalLure"> 1498 <member name="F:OpenMetaverse.binBVHJoint.rotationkeys">
815 <summary> 1499 <summary>
1500 Array of Rotation Keyframes in order from earliest to latest
816 </summary> 1501 </summary>
817 </member> 1502 </member>
818 <member name="F:OpenMetaverse.TeleportLureFlags.GodlikeLure"> 1503 <member name="F:OpenMetaverse.binBVHJoint.positionkeys">
819 <summary> 1504 <summary>
1505 Array of Position Keyframes in order from earliest to latest
1506 This seems to only be for the Pelvis?
820 </summary> 1507 </summary>
821 </member> 1508 </member>
822 <member name="F:OpenMetaverse.TeleportLureFlags.GodlikePursuit"> 1509 <member name="F:OpenMetaverse.binBVHJoint.Tag">
823 <summary> 1510 <summary>
1511 Custom application data that can be attached to a joint
824 </summary> 1512 </summary>
825 </member> 1513 </member>
826 <member name="T:OpenMetaverse.ScriptSensorTypeFlags"> 1514 <member name="T:OpenMetaverse.binBVHJointKey">
827 <summary> 1515 <summary>
1516 A Joint Keyframe. This is either a position or a rotation.
828 </summary> 1517 </summary>
829 </member> 1518 </member>
830 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Agent"> 1519 <member name="F:OpenMetaverse.binBVHJointKey.key_element">
831 <summary> 1520 <summary>
1521 Either a Vector3 position or a Vector3 Euler rotation
832 </summary> 1522 </summary>
833 </member> 1523 </member>
834 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Active"> 1524 <member name="T:OpenMetaverse.HandPose">
835 <summary> 1525 <summary>
1526 Poses set in the animation metadata for the hands.
836 </summary> 1527 </summary>
837 </member> 1528 </member>
838 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Passive"> 1529 <member name="T:OpenMetaverse.AgentDisplayName">
1530 <summary> Information about agents display name </summary>
1531 </member>
1532 <member name="F:OpenMetaverse.AgentDisplayName.ID">
1533 <summary> Agent UUID </summary>
1534 </member>
1535 <member name="F:OpenMetaverse.AgentDisplayName.UserName">
1536 <summary> Username </summary>
1537 </member>
1538 <member name="F:OpenMetaverse.AgentDisplayName.DisplayName">
1539 <summary> Display name </summary>
1540 </member>
1541 <member name="F:OpenMetaverse.AgentDisplayName.LegacyFirstName">
1542 <summary> First name (legacy) </summary>
1543 </member>
1544 <member name="F:OpenMetaverse.AgentDisplayName.LegacyLastName">
1545 <summary> Last name (legacy) </summary>
1546 </member>
1547 <member name="F:OpenMetaverse.AgentDisplayName.IsDefaultDisplayName">
1548 <summary> Is display name default display name </summary>
1549 </member>
1550 <member name="F:OpenMetaverse.AgentDisplayName.NextUpdate">
1551 <summary> Cache display name until </summary>
1552 </member>
1553 <member name="F:OpenMetaverse.AgentDisplayName.Updated">
1554 <summary> Last updated timestamp </summary>
1555 </member>
1556 <member name="M:OpenMetaverse.AgentDisplayName.FromOSD(OpenMetaverse.StructuredData.OSD)">
839 <summary> 1557 <summary>
1558 Creates AgentDisplayName object from OSD
840 </summary> 1559 </summary>
1560 <param name="data">Incoming OSD data</param>
1561 <returns>AgentDisplayName object</returns>
841 </member> 1562 </member>
842 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Scripted"> 1563 <member name="M:OpenMetaverse.AgentDisplayName.GetOSD">
843 <summary> 1564 <summary>
1565 Return object as OSD map
844 </summary> 1566 </summary>
1567 <returns>OSD containing agent's display name data</returns>
845 </member> 1568 </member>
846 <member name="T:OpenMetaverse.MuteType"> 1569 <member name="P:OpenMetaverse.AgentDisplayName.LegacyFullName">
1570 <summary> Full name (legacy) </summary>
1571 </member>
1572 <member name="T:OpenMetaverse.AvatarGroup">
847 <summary> 1573 <summary>
848 Type of mute entry 1574 Holds group information for Avatars such as those you might find in a profile
849 </summary> 1575 </summary>
850 </member> 1576 </member>
851 <member name="F:OpenMetaverse.MuteType.ByName"> 1577 <member name="F:OpenMetaverse.AvatarGroup.AcceptNotices">
852 <summary>Object muted by name</summary> 1578 <summary>true of Avatar accepts group notices</summary>
853 </member> 1579 </member>
854 <member name="F:OpenMetaverse.MuteType.Resident"> 1580 <member name="F:OpenMetaverse.AvatarGroup.GroupID">
855 <summary>Muted residet</summary> 1581 <summary>Groups Key</summary>
856 </member> 1582 </member>
857 <member name="F:OpenMetaverse.MuteType.Object"> 1583 <member name="F:OpenMetaverse.AvatarGroup.GroupInsigniaID">
858 <summary>Object muted by UUID</summary> 1584 <summary>Texture Key for groups insignia</summary>
859 </member> 1585 </member>
860 <member name="F:OpenMetaverse.MuteType.Group"> 1586 <member name="F:OpenMetaverse.AvatarGroup.GroupName">
861 <summary>Muted group</summary> 1587 <summary>Name of the group</summary>
862 </member> 1588 </member>
863 <member name="F:OpenMetaverse.MuteType.External"> 1589 <member name="F:OpenMetaverse.AvatarGroup.GroupPowers">
864 <summary>Muted external entry</summary> 1590 <summary>Powers avatar has in the group</summary>
865 </member> 1591 </member>
866 <member name="T:OpenMetaverse.MuteFlags"> 1592 <member name="F:OpenMetaverse.AvatarGroup.GroupTitle">
867 <summary> 1593 <summary>Avatars Currently selected title</summary>
868 Flags of mute entry
869 </summary>
870 </member> 1594 </member>
871 <member name="F:OpenMetaverse.MuteFlags.Default"> 1595 <member name="F:OpenMetaverse.AvatarGroup.ListInProfile">
872 <summary>No exceptions</summary> 1596 <summary>true of Avatar has chosen to list this in their profile</summary>
873 </member> 1597 </member>
874 <member name="F:OpenMetaverse.MuteFlags.TextChat"> 1598 <member name="T:OpenMetaverse.Animation">
875 <summary>Don't mute text chat</summary> 1599 <summary>
1600 Contains an animation currently being played by an agent
1601 </summary>
876 </member> 1602 </member>
877 <member name="F:OpenMetaverse.MuteFlags.VoiceChat"> 1603 <member name="F:OpenMetaverse.Animation.AnimationID">
878 <summary>Don't mute voice chat</summary> 1604 <summary>The ID of the animation asset</summary>
879 </member> 1605 </member>
880 <member name="F:OpenMetaverse.MuteFlags.Particles"> 1606 <member name="F:OpenMetaverse.Animation.AnimationSequence">
881 <summary>Don't mute particles</summary> 1607 <summary>A number to indicate start order of currently playing animations</summary>
1608 <remarks>On Linden Grids this number is unique per region, with OpenSim it is per client</remarks>
882 </member> 1609 </member>
883 <member name="F:OpenMetaverse.MuteFlags.ObjectSounds"> 1610 <member name="F:OpenMetaverse.Animation.AnimationSourceObjectID">
884 <summary>Don't mute sounds</summary> 1611 <summary></summary>
885 </member> 1612 </member>
886 <member name="F:OpenMetaverse.MuteFlags.All"> 1613 <member name="T:OpenMetaverse.ProfilePick">
887 <summary>Don't mute</summary> 1614 <summary>
1615 Holds group information on an individual profile pick
1616 </summary>
888 </member> 1617 </member>
889 <member name="T:OpenMetaverse.InstantMessage"> 1618 <member name="T:OpenMetaverse.AvatarManager">
890 <summary> 1619 <summary>
891 Instant Message 1620 Retrieve friend status notifications, and retrieve avatar names and
1621 profiles
892 </summary> 1622 </summary>
893 </member> 1623 </member>
894 <member name="F:OpenMetaverse.InstantMessage.FromAgentID"> 1624 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAnimation">
895 <summary>Key of sender</summary> 1625 <summary>The event subscribers, null of no subscribers</summary>
896 </member> 1626 </member>
897 <member name="F:OpenMetaverse.InstantMessage.FromAgentName"> 1627 <member name="M:OpenMetaverse.AvatarManager.OnAvatarAnimation(OpenMetaverse.AvatarAnimationEventArgs)">
898 <summary>Name of sender</summary> 1628 <summary>Raises the AvatarAnimation Event</summary>
1629 <param name="e">An AvatarAnimationEventArgs object containing
1630 the data sent from the simulator</param>
899 </member> 1631 </member>
900 <member name="F:OpenMetaverse.InstantMessage.ToAgentID"> 1632 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAnimationLock">
901 <summary>Key of destination avatar</summary> 1633 <summary>Thread sync lock object</summary>
902 </member> 1634 </member>
903 <member name="F:OpenMetaverse.InstantMessage.ParentEstateID"> 1635 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAppearance">
904 <summary>ID of originating estate</summary> 1636 <summary>The event subscribers, null of no subscribers</summary>
905 </member> 1637 </member>
906 <member name="F:OpenMetaverse.InstantMessage.RegionID"> 1638 <member name="M:OpenMetaverse.AvatarManager.OnAvatarAppearance(OpenMetaverse.AvatarAppearanceEventArgs)">
907 <summary>Key of originating region</summary> 1639 <summary>Raises the AvatarAppearance Event</summary>
1640 <param name="e">A AvatarAppearanceEventArgs object containing
1641 the data sent from the simulator</param>
908 </member> 1642 </member>
909 <member name="F:OpenMetaverse.InstantMessage.Position"> 1643 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAppearanceLock">
910 <summary>Coordinates in originating region</summary> 1644 <summary>Thread sync lock object</summary>
911 </member> 1645 </member>
912 <member name="F:OpenMetaverse.InstantMessage.Dialog"> 1646 <member name="F:OpenMetaverse.AvatarManager.m_UUIDNameReply">
913 <summary>Instant message type</summary> 1647 <summary>The event subscribers, null of no subscribers</summary>
914 </member> 1648 </member>
915 <member name="F:OpenMetaverse.InstantMessage.GroupIM"> 1649 <member name="M:OpenMetaverse.AvatarManager.OnUUIDNameReply(OpenMetaverse.UUIDNameReplyEventArgs)">
916 <summary>Group IM session toggle</summary> 1650 <summary>Raises the UUIDNameReply Event</summary>
1651 <param name="e">A UUIDNameReplyEventArgs object containing
1652 the data sent from the simulator</param>
917 </member> 1653 </member>
918 <member name="F:OpenMetaverse.InstantMessage.IMSessionID"> 1654 <member name="F:OpenMetaverse.AvatarManager.m_UUIDNameReplyLock">
919 <summary>Key of IM session, for Group Messages, the groups UUID</summary> 1655 <summary>Thread sync lock object</summary>
920 </member> 1656 </member>
921 <member name="F:OpenMetaverse.InstantMessage.Timestamp"> 1657 <member name="F:OpenMetaverse.AvatarManager.m_AvatarInterestsReply">
922 <summary>Timestamp of the instant message</summary> 1658 <summary>The event subscribers, null of no subscribers</summary>
923 </member> 1659 </member>
924 <member name="F:OpenMetaverse.InstantMessage.Message"> 1660 <member name="M:OpenMetaverse.AvatarManager.OnAvatarInterestsReply(OpenMetaverse.AvatarInterestsReplyEventArgs)">
925 <summary>Instant message text</summary> 1661 <summary>Raises the AvatarInterestsReply Event</summary>
1662 <param name="e">A AvatarInterestsReplyEventArgs object containing
1663 the data sent from the simulator</param>
926 </member> 1664 </member>
927 <member name="F:OpenMetaverse.InstantMessage.Offline"> 1665 <member name="F:OpenMetaverse.AvatarManager.m_AvatarInterestsReplyLock">
928 <summary>Whether this message is held for offline avatars</summary> 1666 <summary>Thread sync lock object</summary>
929 </member> 1667 </member>
930 <member name="F:OpenMetaverse.InstantMessage.BinaryBucket"> 1668 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPropertiesReply">
931 <summary>Context specific packed data</summary> 1669 <summary>The event subscribers, null of no subscribers</summary>
932 </member> 1670 </member>
933 <member name="M:OpenMetaverse.InstantMessage.ToString"> 1671 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPropertiesReply(OpenMetaverse.AvatarPropertiesReplyEventArgs)">
934 <summary>Print the struct data as a string</summary> 1672 <summary>Raises the AvatarPropertiesReply Event</summary>
935 <returns>A string containing the field name, and field value</returns> 1673 <param name="e">A AvatarPropertiesReplyEventArgs object containing
1674 the data sent from the simulator</param>
936 </member> 1675 </member>
937 <member name="T:OpenMetaverse.MuteEntry"> 1676 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPropertiesReplyLock">
938 <summary>Represents muted object or resident</summary> 1677 <summary>Thread sync lock object</summary>
939 </member> 1678 </member>
940 <member name="F:OpenMetaverse.MuteEntry.Type"> 1679 <member name="F:OpenMetaverse.AvatarManager.m_AvatarGroupsReply">
941 <summary>Type of the mute entry</summary> 1680 <summary>The event subscribers, null of no subscribers</summary>
942 </member> 1681 </member>
943 <member name="F:OpenMetaverse.MuteEntry.ID"> 1682 <member name="M:OpenMetaverse.AvatarManager.OnAvatarGroupsReply(OpenMetaverse.AvatarGroupsReplyEventArgs)">
944 <summary>UUID of the mute etnry</summary> 1683 <summary>Raises the AvatarGroupsReply Event</summary>
1684 <param name="e">A AvatarGroupsReplyEventArgs object containing
1685 the data sent from the simulator</param>
945 </member> 1686 </member>
946 <member name="F:OpenMetaverse.MuteEntry.Name"> 1687 <member name="F:OpenMetaverse.AvatarManager.m_AvatarGroupsReplyLock">
947 <summary>Mute entry name</summary> 1688 <summary>Thread sync lock object</summary>
948 </member> 1689 </member>
949 <member name="F:OpenMetaverse.MuteEntry.Flags"> 1690 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPickerReply">
950 <summary>Mute flags</summary> 1691 <summary>The event subscribers, null of no subscribers</summary>
951 </member> 1692 </member>
952 <member name="T:OpenMetaverse.TransactionInfo"> 1693 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPickerReply(OpenMetaverse.AvatarPickerReplyEventArgs)">
953 <summary>Transaction detail sent with MoneyBalanceReply message</summary> 1694 <summary>Raises the AvatarPickerReply Event</summary>
1695 <param name="e">A AvatarPickerReplyEventArgs object containing
1696 the data sent from the simulator</param>
954 </member> 1697 </member>
955 <member name="F:OpenMetaverse.TransactionInfo.TransactionType"> 1698 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPickerReplyLock">
956 <summary>Type of the transaction</summary> 1699 <summary>Thread sync lock object</summary>
957 </member> 1700 </member>
958 <member name="F:OpenMetaverse.TransactionInfo.SourceID"> 1701 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectPointAt">
959 <summary>UUID of the transaction source</summary> 1702 <summary>The event subscribers, null of no subscribers</summary>
960 </member> 1703 </member>
961 <member name="F:OpenMetaverse.TransactionInfo.IsSourceGroup"> 1704 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffectPointAt(OpenMetaverse.ViewerEffectPointAtEventArgs)">
962 <summary>Is the transaction source a group</summary> 1705 <summary>Raises the ViewerEffectPointAt Event</summary>
1706 <param name="e">A ViewerEffectPointAtEventArgs object containing
1707 the data sent from the simulator</param>
963 </member> 1708 </member>
964 <member name="F:OpenMetaverse.TransactionInfo.DestID"> 1709 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectPointAtLock">
965 <summary>UUID of the transaction destination</summary> 1710 <summary>Thread sync lock object</summary>
966 </member> 1711 </member>
967 <member name="F:OpenMetaverse.TransactionInfo.IsDestGroup"> 1712 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLookAt">
968 <summary>Is transaction destination a group</summary> 1713 <summary>The event subscribers, null of no subscribers</summary>
969 </member> 1714 </member>
970 <member name="F:OpenMetaverse.TransactionInfo.Amount"> 1715 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffectLookAt(OpenMetaverse.ViewerEffectLookAtEventArgs)">
971 <summary>Transaction amount</summary> 1716 <summary>Raises the ViewerEffectLookAt Event</summary>
1717 <param name="e">A ViewerEffectLookAtEventArgs object containing
1718 the data sent from the simulator</param>
972 </member> 1719 </member>
973 <member name="F:OpenMetaverse.TransactionInfo.ItemDescription"> 1720 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLookAtLock">
974 <summary>Transaction description</summary> 1721 <summary>Thread sync lock object</summary>
975 </member> 1722 </member>
976 <member name="T:OpenMetaverse.AgentManager"> 1723 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffect">
977 <summary> 1724 <summary>The event subscribers, null of no subscribers</summary>
978 Manager class for our own avatar
979 </summary>
980 </member> 1725 </member>
981 <member name="M:OpenMetaverse.AgentManager.#ctor(OpenMetaverse.GridClient)"> 1726 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffect(OpenMetaverse.ViewerEffectEventArgs)">
982 <summary> 1727 <summary>Raises the ViewerEffect Event</summary>
983 Constructor, setup callbacks for packets related to our avatar 1728 <param name="e">A ViewerEffectEventArgs object containing
984 </summary> 1729 the data sent from the simulator</param>
985 <param name="client">A reference to the <seealso cref="T:OpenMetaverse.GridClient" /> Class</param>
986 </member> 1730 </member>
987 <member name="T:OpenMetaverse.AgentManager.AgentMovement"> 1731 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLock">
988 <summary> 1732 <summary>Thread sync lock object</summary>
989 Agent movement and camera control
990 Agent movement is controlled by setting specific <seealso cref="T:AgentManager.ControlFlags" />
991 After the control flags are set, An AgentUpdate is required to update the simulator of the specified flags
992 This is most easily accomplished by setting one or more of the AgentMovement properties
993 Movement of an avatar is always based on a compass direction, for example AtPos will move the
994 agent from West to East or forward on the X Axis, AtNeg will of course move agent from
995 East to West or backward on the X Axis, LeftPos will be South to North or forward on the Y Axis
996 The Z axis is Up, finer grained control of movements can be done using the Nudge properties
997 </summary>
998 </member> 1733 </member>
999 <member name="M:OpenMetaverse.AgentManager.AgentMovement.#ctor(OpenMetaverse.GridClient)"> 1734 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPicksReply">
1000 <summary>Default constructor</summary> 1735 <summary>The event subscribers, null of no subscribers</summary>
1001 </member> 1736 </member>
1002 <member name="T:OpenMetaverse.AgentManager.AgentMovement.AgentCamera"> 1737 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPicksReply(OpenMetaverse.AvatarPicksReplyEventArgs)">
1003 <summary> 1738 <summary>Raises the AvatarPicksReply Event</summary>
1004 Camera controls for the agent, mostly a thin wrapper around 1739 <param name="e">A AvatarPicksReplyEventArgs object containing
1005 CoordinateFrame. This class is only responsible for state 1740 the data sent from the simulator</param>
1006 tracking and math, it does not send any packets
1007 </summary>
1008 </member> 1741 </member>
1009 <member name="M:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.#ctor"> 1742 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPicksReplyLock">
1010 <summary> 1743 <summary>Thread sync lock object</summary>
1011 Default constructor
1012 </summary>
1013 </member> 1744 </member>
1014 <member name="F:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Far"> 1745 <member name="F:OpenMetaverse.AvatarManager.m_PickInfoReply">
1015 <summary> 1746 <summary>The event subscribers, null of no subscribers</summary>
1016 </summary>
1017 </member> 1747 </member>
1018 <member name="F:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Frame"> 1748 <member name="M:OpenMetaverse.AvatarManager.OnPickInfoReply(OpenMetaverse.PickInfoReplyEventArgs)">
1019 <summary>The camera is a local frame of reference inside of 1749 <summary>Raises the PickInfoReply Event</summary>
1020 the larger grid space. This is where the math happens</summary> 1750 <param name="e">A PickInfoReplyEventArgs object containing
1751 the data sent from the simulator</param>
1021 </member> 1752 </member>
1022 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Position"> 1753 <member name="F:OpenMetaverse.AvatarManager.m_PickInfoReplyLock">
1023 <summary> 1754 <summary>Thread sync lock object</summary>
1024 </summary>
1025 </member> 1755 </member>
1026 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.AtAxis"> 1756 <member name="F:OpenMetaverse.AvatarManager.m_AvatarClassifiedReply">
1027 <summary> 1757 <summary>The event subscribers, null of no subscribers</summary>
1028 </summary>
1029 </member> 1758 </member>
1030 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.LeftAxis"> 1759 <member name="M:OpenMetaverse.AvatarManager.OnAvatarClassifiedReply(OpenMetaverse.AvatarClassifiedReplyEventArgs)">
1031 <summary> 1760 <summary>Raises the AvatarClassifiedReply Event</summary>
1032 </summary> 1761 <param name="e">A AvatarClassifiedReplyEventArgs object containing
1762 the data sent from the simulator</param>
1033 </member> 1763 </member>
1034 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.UpAxis"> 1764 <member name="F:OpenMetaverse.AvatarManager.m_AvatarClassifiedReplyLock">
1035 <summary> 1765 <summary>Thread sync lock object</summary>
1036 </summary>
1037 </member> 1766 </member>
1038 <member name="F:OpenMetaverse.AgentManager.AgentMovement.Camera"> 1767 <member name="F:OpenMetaverse.AvatarManager.m_ClassifiedInfoReply">
1039 <summary>Agent camera controls</summary> 1768 <summary>The event subscribers, null of no subscribers</summary>
1040 </member> 1769 </member>
1041 <member name="F:OpenMetaverse.AgentManager.AgentMovement.Flags"> 1770 <member name="M:OpenMetaverse.AvatarManager.OnClassifiedInfoReply(OpenMetaverse.ClassifiedInfoReplyEventArgs)">
1042 <summary>Currently only used for hiding your group title</summary> 1771 <summary>Raises the ClassifiedInfoReply Event</summary>
1772 <param name="e">A ClassifiedInfoReplyEventArgs object containing
1773 the data sent from the simulator</param>
1043 </member> 1774 </member>
1044 <member name="F:OpenMetaverse.AgentManager.AgentMovement.State"> 1775 <member name="F:OpenMetaverse.AvatarManager.m_ClassifiedInfoReplyLock">
1045 <summary>Action state of the avatar, which can currently be 1776 <summary>Thread sync lock object</summary>
1046 typing and editing</summary>
1047 </member> 1777 </member>
1048 <member name="F:OpenMetaverse.AgentManager.AgentMovement.BodyRotation"> 1778 <member name="F:OpenMetaverse.AvatarManager.m_DisplayNameUpdate">
1049 <summary> 1779 <summary>The event subscribers, null of no subscribers</summary>
1050 </summary>
1051 </member> 1780 </member>
1052 <member name="F:OpenMetaverse.AgentManager.AgentMovement.HeadRotation"> 1781 <member name="M:OpenMetaverse.AvatarManager.OnDisplayNameUpdate(OpenMetaverse.DisplayNameUpdateEventArgs)">
1053 <summary> 1782 <summary>Raises the DisplayNameUpdate Event</summary>
1054 </summary> 1783 <param name="e">A DisplayNameUpdateEventArgs object containing
1784 the data sent from the simulator</param>
1055 </member> 1785 </member>
1056 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastBodyRotation"> 1786 <member name="F:OpenMetaverse.AvatarManager.m_DisplayNameUpdateLock">
1057 <summary> 1787 <summary>Thread sync lock object</summary>
1058 </summary>
1059 </member> 1788 </member>
1060 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastHeadRotation"> 1789 <member name="M:OpenMetaverse.AvatarManager.#ctor(OpenMetaverse.GridClient)">
1061 <summary> 1790 <summary>
1791 Represents other avatars
1062 </summary> 1792 </summary>
1793 <param name="client"></param>
1063 </member> 1794 </member>
1064 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraCenter"> 1795 <member name="M:OpenMetaverse.AvatarManager.RequestTrackAgent(OpenMetaverse.UUID)">
1796 <summary>Tracks the specified avatar on your map</summary>
1797 <param name="preyID">Avatar ID to track</param>
1798 </member>
1799 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarName(OpenMetaverse.UUID)">
1065 <summary> 1800 <summary>
1801 Request a single avatar name
1066 </summary> 1802 </summary>
1803 <param name="id">The avatar key to retrieve a name for</param>
1067 </member> 1804 </member>
1068 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraXAxis"> 1805 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarNames(System.Collections.Generic.List{OpenMetaverse.UUID})">
1069 <summary> 1806 <summary>
1807 Request a list of avatar names
1070 </summary> 1808 </summary>
1809 <param name="ids">The avatar keys to retrieve names for</param>
1071 </member> 1810 </member>
1072 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraYAxis"> 1811 <member name="M:OpenMetaverse.AvatarManager.DisplayNamesAvailable">
1073 <summary> 1812 <summary>
1813 Check if Display Names functionality is available
1074 </summary> 1814 </summary>
1815 <returns>True if Display name functionality is available</returns>
1075 </member> 1816 </member>
1076 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraZAxis"> 1817 <member name="M:OpenMetaverse.AvatarManager.GetDisplayNames(System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.AvatarManager.DisplayNamesCallback)">
1077 <summary> 1818 <summary>
1819 Request retrieval of display names (max 90 names per request)
1078 </summary> 1820 </summary>
1821 <param name="ids">List of UUIDs to lookup</param>
1822 <param name="callback">Callback to report result of the operation</param>
1079 </member> 1823 </member>
1080 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastFar"> 1824 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarProperties(OpenMetaverse.UUID)">
1081 <summary> 1825 <summary>
1826 Start a request for Avatar Properties
1082 </summary> 1827 </summary>
1828 <param name="avatarid"></param>
1083 </member> 1829 </member>
1084 <member name="F:OpenMetaverse.AgentManager.AgentMovement.updateTimer"> 1830 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarNameSearch(System.String,OpenMetaverse.UUID)">
1085 <summary>Timer for sending AgentUpdate packets</summary>
1086 </member>
1087 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AtPos">
1088 <summary>Move agent positive along the X axis</summary>
1089 </member>
1090 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AtNeg">
1091 <summary>Move agent negative along the X axis</summary>
1092 </member>
1093 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LeftPos">
1094 <summary>Move agent positive along the Y axis</summary>
1095 </member>
1096 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LeftNeg">
1097 <summary>Move agent negative along the Y axis</summary>
1098 </member>
1099 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpPos">
1100 <summary>Move agent positive along the Z axis</summary>
1101 </member>
1102 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpNeg">
1103 <summary>Move agent negative along the Z axis</summary>
1104 </member>
1105 <member name="P:OpenMetaverse.AgentManager.AgentMovement.PitchPos">
1106 <summary> 1831 <summary>
1832 Search for an avatar (first name, last name)
1107 </summary> 1833 </summary>
1834 <param name="name">The name to search for</param>
1835 <param name="queryID">An ID to associate with this query</param>
1108 </member> 1836 </member>
1109 <member name="P:OpenMetaverse.AgentManager.AgentMovement.PitchNeg"> 1837 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarPicks(OpenMetaverse.UUID)">
1110 <summary> 1838 <summary>
1839 Start a request for Avatar Picks
1111 </summary> 1840 </summary>
1841 <param name="avatarid">UUID of the avatar</param>
1112 </member> 1842 </member>
1113 <member name="P:OpenMetaverse.AgentManager.AgentMovement.YawPos"> 1843 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarClassified(OpenMetaverse.UUID)">
1114 <summary> 1844 <summary>
1845 Start a request for Avatar Classifieds
1115 </summary> 1846 </summary>
1847 <param name="avatarid">UUID of the avatar</param>
1116 </member> 1848 </member>
1117 <member name="P:OpenMetaverse.AgentManager.AgentMovement.YawNeg"> 1849 <member name="M:OpenMetaverse.AvatarManager.RequestPickInfo(OpenMetaverse.UUID,OpenMetaverse.UUID)">
1118 <summary> 1850 <summary>
1851 Start a request for details of a specific profile pick
1119 </summary> 1852 </summary>
1853 <param name="avatarid">UUID of the avatar</param>
1854 <param name="pickid">UUID of the profile pick</param>
1120 </member> 1855 </member>
1121 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastAt"> 1856 <member name="M:OpenMetaverse.AvatarManager.RequestClassifiedInfo(OpenMetaverse.UUID,OpenMetaverse.UUID)">
1122 <summary> 1857 <summary>
1858 Start a request for details of a specific profile classified
1123 </summary> 1859 </summary>
1860 <param name="avatarid">UUID of the avatar</param>
1861 <param name="classifiedid">UUID of the profile classified</param>
1124 </member> 1862 </member>
1125 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastLeft"> 1863 <member name="M:OpenMetaverse.AvatarManager.UUIDNameReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1864 <summary>Process an incoming packet and raise the appropriate events</summary>
1865 <param name="sender">The sender</param>
1866 <param name="e">The EventArgs object containing the packet data</param>
1867 </member>
1868 <member name="M:OpenMetaverse.AvatarManager.AvatarAnimationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1869 <summary>Process an incoming packet and raise the appropriate events</summary>
1870 <param name="sender">The sender</param>
1871 <param name="e">The EventArgs object containing the packet data</param>
1872 </member>
1873 <member name="M:OpenMetaverse.AvatarManager.AvatarAppearanceHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1874 <summary>Process an incoming packet and raise the appropriate events</summary>
1875 <param name="sender">The sender</param>
1876 <param name="e">The EventArgs object containing the packet data</param>
1877 </member>
1878 <member name="M:OpenMetaverse.AvatarManager.AvatarPropertiesHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1879 <summary>Process an incoming packet and raise the appropriate events</summary>
1880 <param name="sender">The sender</param>
1881 <param name="e">The EventArgs object containing the packet data</param>
1882 </member>
1883 <member name="M:OpenMetaverse.AvatarManager.AvatarInterestsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1884 <summary>Process an incoming packet and raise the appropriate events</summary>
1885 <param name="sender">The sender</param>
1886 <param name="e">The EventArgs object containing the packet data</param>
1887 </member>
1888 <member name="M:OpenMetaverse.AvatarManager.DisplayNameUpdateMessageHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
1126 <summary> 1889 <summary>
1890 EQ Message fired when someone nearby changes their display name
1127 </summary> 1891 </summary>
1892 <param name="capsKey">The message key</param>
1893 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
1894 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> which originated the packet</param>
1128 </member> 1895 </member>
1129 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastUp"> 1896 <member name="M:OpenMetaverse.AvatarManager.AvatarGroupsReplyMessageHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
1130 <summary> 1897 <summary>
1898 Crossed region handler for message that comes across the EventQueue. Sent to an agent
1899 when the agent crosses a sim border into a new region.
1131 </summary> 1900 </summary>
1901 <param name="capsKey">The message key</param>
1902 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
1903 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> which originated the packet</param>
1132 </member> 1904 </member>
1133 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Fly"> 1905 <member name="M:OpenMetaverse.AvatarManager.AvatarGroupsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1134 <summary>Causes simulator to make agent fly</summary> 1906 <summary>Process an incoming packet and raise the appropriate events</summary>
1135 </member> 1907 <param name="sender">The sender</param>
1136 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Stop"> 1908 <param name="e">The EventArgs object containing the packet data</param>
1137 <summary>Stop movement</summary>
1138 </member>
1139 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FinishAnim">
1140 <summary>Finish animation</summary>
1141 </member> 1909 </member>
1142 <member name="P:OpenMetaverse.AgentManager.AgentMovement.StandUp"> 1910 <member name="M:OpenMetaverse.AvatarManager.AvatarPickerReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1143 <summary>Stand up from a sit</summary> 1911 <summary>Process an incoming packet and raise the appropriate events</summary>
1912 <param name="sender">The sender</param>
1913 <param name="e">The EventArgs object containing the packet data</param>
1144 </member> 1914 </member>
1145 <member name="P:OpenMetaverse.AgentManager.AgentMovement.SitOnGround"> 1915 <member name="M:OpenMetaverse.AvatarManager.ViewerEffectHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1146 <summary>Tells simulator to sit agent on ground</summary> 1916 <summary>Process an incoming packet and raise the appropriate events</summary>
1917 <param name="sender">The sender</param>
1918 <param name="e">The EventArgs object containing the packet data</param>
1147 </member> 1919 </member>
1148 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Mouselook"> 1920 <member name="M:OpenMetaverse.AvatarManager.AvatarPicksReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1149 <summary>Place agent into mouselook mode</summary> 1921 <summary>Process an incoming packet and raise the appropriate events</summary>
1922 <param name="sender">The sender</param>
1923 <param name="e">The EventArgs object containing the packet data</param>
1150 </member> 1924 </member>
1151 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeAtPos"> 1925 <member name="M:OpenMetaverse.AvatarManager.PickInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1152 <summary>Nudge agent positive along the X axis</summary> 1926 <summary>Process an incoming packet and raise the appropriate events</summary>
1927 <param name="sender">The sender</param>
1928 <param name="e">The EventArgs object containing the packet data</param>
1153 </member> 1929 </member>
1154 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeAtNeg"> 1930 <member name="M:OpenMetaverse.AvatarManager.AvatarClassifiedReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1155 <summary>Nudge agent negative along the X axis</summary> 1931 <summary>Process an incoming packet and raise the appropriate events</summary>
1932 <param name="sender">The sender</param>
1933 <param name="e">The EventArgs object containing the packet data</param>
1156 </member> 1934 </member>
1157 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeLeftPos"> 1935 <member name="M:OpenMetaverse.AvatarManager.ClassifiedInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1158 <summary>Nudge agent positive along the Y axis</summary> 1936 <summary>Process an incoming packet and raise the appropriate events</summary>
1937 <param name="sender">The sender</param>
1938 <param name="e">The EventArgs object containing the packet data</param>
1159 </member> 1939 </member>
1160 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeLeftNeg"> 1940 <member name="E:OpenMetaverse.AvatarManager.AvatarAnimation">
1161 <summary>Nudge agent negative along the Y axis</summary> 1941 <summary>Raised when the simulator sends us data containing
1942 an agents animation playlist</summary>
1162 </member> 1943 </member>
1163 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeUpPos"> 1944 <member name="E:OpenMetaverse.AvatarManager.AvatarAppearance">
1164 <summary>Nudge agent positive along the Z axis</summary> 1945 <summary>Raised when the simulator sends us data containing
1946 the appearance information for an agent</summary>
1165 </member> 1947 </member>
1166 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeUpNeg"> 1948 <member name="E:OpenMetaverse.AvatarManager.UUIDNameReply">
1167 <summary>Nudge agent negative along the Z axis</summary> 1949 <summary>Raised when the simulator sends us data containing
1950 agent names/id values</summary>
1168 </member> 1951 </member>
1169 <member name="P:OpenMetaverse.AgentManager.AgentMovement.TurnLeft"> 1952 <member name="E:OpenMetaverse.AvatarManager.AvatarInterestsReply">
1170 <summary> 1953 <summary>Raised when the simulator sends us data containing
1171 </summary> 1954 the interests listed in an agents profile</summary>
1172 </member> 1955 </member>
1173 <member name="P:OpenMetaverse.AgentManager.AgentMovement.TurnRight"> 1956 <member name="E:OpenMetaverse.AvatarManager.AvatarPropertiesReply">
1174 <summary> 1957 <summary>Raised when the simulator sends us data containing
1175 </summary> 1958 profile property information for an agent</summary>
1176 </member> 1959 </member>
1177 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Away"> 1960 <member name="E:OpenMetaverse.AvatarManager.AvatarGroupsReply">
1178 <summary>Tell simulator to mark agent as away</summary> 1961 <summary>Raised when the simulator sends us data containing
1962 the group membership an agent is a member of</summary>
1179 </member> 1963 </member>
1180 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LButtonDown"> 1964 <member name="E:OpenMetaverse.AvatarManager.AvatarPickerReply">
1181 <summary> 1965 <summary>Raised when the simulator sends us data containing
1182 </summary> 1966 name/id pair</summary>
1183 </member> 1967 </member>
1184 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LButtonUp"> 1968 <member name="E:OpenMetaverse.AvatarManager.ViewerEffectPointAt">
1185 <summary> 1969 <summary>Raised when the simulator sends us data containing
1186 </summary> 1970 the objects and effect when an agent is pointing at</summary>
1187 </member> 1971 </member>
1188 <member name="P:OpenMetaverse.AgentManager.AgentMovement.MLButtonDown"> 1972 <member name="E:OpenMetaverse.AvatarManager.ViewerEffectLookAt">
1189 <summary> 1973 <summary>Raised when the simulator sends us data containing
1190 </summary> 1974 the objects and effect when an agent is looking at</summary>
1191 </member> 1975 </member>
1192 <member name="P:OpenMetaverse.AgentManager.AgentMovement.MLButtonUp"> 1976 <member name="E:OpenMetaverse.AvatarManager.ViewerEffect">
1193 <summary> 1977 <summary>Raised when the simulator sends us data containing
1194 </summary> 1978 an agents viewer effect information</summary>
1195 </member> 1979 </member>
1196 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AlwaysRun"> 1980 <member name="E:OpenMetaverse.AvatarManager.AvatarPicksReply">
1197 <summary> 1981 <summary>Raised when the simulator sends us data containing
1198 Returns "always run" value, or changes it by sending a SetAlwaysRunPacket 1982 the top picks from an agents profile</summary>
1199 </summary>
1200 </member> 1983 </member>
1201 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentControls"> 1984 <member name="E:OpenMetaverse.AvatarManager.PickInfoReply">
1202 <summary>The current value of the agent control flags</summary> 1985 <summary>Raised when the simulator sends us data containing
1986 the Pick details</summary>
1203 </member> 1987 </member>
1204 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpdateInterval"> 1988 <member name="E:OpenMetaverse.AvatarManager.AvatarClassifiedReply">
1205 <summary>Gets or sets the interval in milliseconds at which 1989 <summary>Raised when the simulator sends us data containing
1206 AgentUpdate packets are sent to the current simulator. Setting 1990 the classified ads an agent has placed</summary>
1207 this to a non-zero value will also enable the packet sending if
1208 it was previously off, and setting it to zero will disable</summary>
1209 </member> 1991 </member>
1210 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpdateEnabled"> 1992 <member name="E:OpenMetaverse.AvatarManager.ClassifiedInfoReply">
1211 <summary>Gets or sets whether AgentUpdate packets are sent to 1993 <summary>Raised when the simulator sends us data containing
1212 the current simulator</summary> 1994 the details of a classified ad</summary>
1213 </member> 1995 </member>
1214 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AutoResetControls"> 1996 <member name="E:OpenMetaverse.AvatarManager.DisplayNameUpdate">
1215 <summary>Reset movement controls every time we send an update</summary> 1997 <summary>Raised when the simulator sends us data containing
1998 the details of display name change</summary>
1216 </member> 1999 </member>
1217 <member name="M:OpenMetaverse.AgentManager.AgentMovement.UpdateFromHeading(System.Double,System.Boolean)"> 2000 <member name="T:OpenMetaverse.AvatarManager.DisplayNamesCallback">
1218 <summary> 2001 <summary>
1219 Send an AgentUpdate with the camera set at the current agent 2002 Callback giving results when fetching display names
1220 position and pointing towards the heading specified
1221 </summary> 2003 </summary>
1222 <param name="heading">Camera rotation in radians</param> 2004 <param name="success">If the request was successful</param>
1223 <param name="reliable">Whether to send the AgentUpdate reliable 2005 <param name="names">Array of display names</param>
1224 or not</param> 2006 <param name="badIDs">Array of UUIDs that could not be fetched</param>
1225 </member> 2007 </member>
1226 <member name="M:OpenMetaverse.AgentManager.AgentMovement.TurnToward(OpenMetaverse.Vector3)"> 2008 <member name="T:OpenMetaverse.AvatarAnimationEventArgs">
1227 <summary> 2009 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAnimation"/> event</summary>
1228 Rotates the avatar body and camera toward a target position. 2010 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAnimation"/> event occurs when the simulator sends
1229 This will also anchor the camera position on the avatar 2011 the animation playlist for an agent</remarks>
1230 </summary> 2012 <example>
1231 <param name="target">Region coordinates to turn toward</param> 2013 The following code example uses the <see cref="P:OpenMetaverse.AvatarAnimationEventArgs.AvatarID"/> and <see cref="P:OpenMetaverse.AvatarAnimationEventArgs.Animations"/>
2014 properties to display the animation playlist of an avatar on the <see cref="T:System.Console"/> window.
2015 <code>
2016 // subscribe to the event
2017 Client.Avatars.AvatarAnimation += Avatars_AvatarAnimation;
2018
2019 private void Avatars_AvatarAnimation(object sender, AvatarAnimationEventArgs e)
2020 {
2021 // create a dictionary of "known" animations from the Animations class using System.Reflection
2022 Dictionary&lt;UUID, string&gt; systemAnimations = new Dictionary&lt;UUID, string&gt;();
2023 Type type = typeof(Animations);
2024 System.Reflection.FieldInfo[] fields = type.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
2025 foreach (System.Reflection.FieldInfo field in fields)
2026 {
2027 systemAnimations.Add((UUID)field.GetValue(type), field.Name);
2028 }
2029
2030 // find out which animations being played are known animations and which are assets
2031 foreach (Animation animation in e.Animations)
2032 {
2033 if (systemAnimations.ContainsKey(animation.AnimationID))
2034 {
2035 Console.WriteLine("{0} is playing {1} ({2}) sequence {3}", e.AvatarID,
2036 systemAnimations[animation.AnimationID], animation.AnimationSequence);
2037 }
2038 else
2039 {
2040 Console.WriteLine("{0} is playing {1} (Asset) sequence {2}", e.AvatarID,
2041 animation.AnimationID, animation.AnimationSequence);
2042 }
2043 }
2044 }
2045 </code>
2046 </example>
1232 </member> 2047 </member>
1233 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate"> 2048 <member name="M:OpenMetaverse.AvatarAnimationEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.Animation})">
1234 <summary> 2049 <summary>
1235 Send new AgentUpdate packet to update our current camera 2050 Construct a new instance of the AvatarAnimationEventArgs class
1236 position and rotation
1237 </summary> 2051 </summary>
2052 <param name="avatarID">The ID of the agent</param>
2053 <param name="anims">The list of animations to start</param>
1238 </member> 2054 </member>
1239 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate(System.Boolean)"> 2055 <member name="P:OpenMetaverse.AvatarAnimationEventArgs.AvatarID">
1240 <summary> 2056 <summary>Get the ID of the agent</summary>
1241 Send new AgentUpdate packet to update our current camera
1242 position and rotation
1243 </summary>
1244 <param name="reliable">Whether to require server acknowledgement
1245 of this packet</param>
1246 </member> 2057 </member>
1247 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate(System.Boolean,OpenMetaverse.Simulator)"> 2058 <member name="P:OpenMetaverse.AvatarAnimationEventArgs.Animations">
1248 <summary> 2059 <summary>Get the list of animations to start</summary>
1249 Send new AgentUpdate packet to update our current camera
1250 position and rotation
1251 </summary>
1252 <param name="reliable">Whether to require server acknowledgement
1253 of this packet</param>
1254 <param name="simulator">Simulator to send the update to</param>
1255 </member> 2060 </member>
1256 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendManualUpdate(OpenMetaverse.AgentManager.ControlFlags,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Quaternion,System.Single,OpenMetaverse.AgentFlags,OpenMetaverse.AgentState,System.Boolean)"> 2061 <member name="T:OpenMetaverse.AvatarAppearanceEventArgs">
1257 <summary> 2062 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance"/> event</summary>
1258 Builds an AgentUpdate packet entirely from parameters. This 2063 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance"/> event occurs when the simulator sends
1259 will not touch the state of Self.Movement or 2064 the appearance data for an avatar</remarks>
1260 Self.Movement.Camera in any way 2065 <example>
1261 </summary> 2066 The following code example uses the <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID"/> and <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams"/>
1262 <param name="controlFlags"> 2067 properties to display the selected shape of an avatar on the <see cref="T:System.Console"/> window.
1263 </param> 2068 <code>
1264 <param name="position"> 2069 // subscribe to the event
1265 </param> 2070 Client.Avatars.AvatarAppearance += Avatars_AvatarAppearance;
1266 <param name="forwardAxis"> 2071
1267 </param> 2072 // handle the data when the event is raised
1268 <param name="leftAxis"> 2073 void Avatars_AvatarAppearance(object sender, AvatarAppearanceEventArgs e)
1269 </param> 2074 {
1270 <param name="upAxis"> 2075 Console.WriteLine("The Agent {0} is using a {1} shape.", e.AvatarID, (e.VisualParams[31] &gt; 0) : "male" ? "female")
1271 </param> 2076 }
1272 <param name="bodyRotation"> 2077 </code>
1273 </param> 2078 </example>
1274 <param name="headRotation">
1275 </param>
1276 <param name="farClip">
1277 </param>
1278 <param name="reliable">
1279 </param>
1280 <param name="flags">
1281 </param>
1282 <param name="state">
1283 </param>
1284 </member> 2079 </member>
1285 <member name="T:OpenMetaverse.AgentManager.ControlFlags"> 2080 <member name="M:OpenMetaverse.AvatarAppearanceEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean,OpenMetaverse.Primitive.TextureEntryFace,OpenMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,OpenMetaverse.AppearanceFlags)">
1286 <summary> 2081 <summary>
1287 Used to specify movement actions for your agent 2082 Construct a new instance of the AvatarAppearanceEventArgs class
1288 </summary> 2083 </summary>
2084 <param name="sim">The simulator request was from</param>
2085 <param name="avatarID">The ID of the agent</param>
2086 <param name="isTrial">true of the agent is a trial account</param>
2087 <param name="defaultTexture">The default agent texture</param>
2088 <param name="faceTextures">The agents appearance layer textures</param>
2089 <param name="visualParams">The <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams"/> for the agent</param>
1289 </member> 2090 </member>
1290 <member name="F:OpenMetaverse.AgentManager.ControlFlags.NONE"> 2091 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.Simulator">
1291 <summary>Empty flag</summary> 2092 <summary>Get the Simulator this request is from of the agent</summary>
1292 </member> 2093 </member>
1293 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AT_POS"> 2094 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID">
1294 <summary>Move Forward (SL Keybinding: W/Up Arrow)</summary> 2095 <summary>Get the ID of the agent</summary>
1295 </member> 2096 </member>
1296 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG"> 2097 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.IsTrial">
1297 <summary>Move Backward (SL Keybinding: S/Down Arrow)</summary> 2098 <summary>true if the agent is a trial account</summary>
1298 </member> 2099 </member>
1299 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS"> 2100 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.DefaultTexture">
1300 <summary>Move Left (SL Keybinding: Shift-(A/Left Arrow))</summary> 2101 <summary>Get the default agent texture</summary>
1301 </member> 2102 </member>
1302 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG"> 2103 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.FaceTextures">
1303 <summary>Move Right (SL Keybinding: Shift-(D/Right Arrow))</summary> 2104 <summary>Get the agents appearance layer textures</summary>
1304 </member> 2105 </member>
1305 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_UP_POS"> 2106 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams">
1306 <summary>Not Flying: Jump/Flying: Move Up (SL Keybinding: E)</summary> 2107 <summary>Get the <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams"/> for the agent</summary>
1307 </member> 2108 </member>
1308 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG"> 2109 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.AppearanceVersion">
1309 <summary>Not Flying: Croutch/Flying: Move Down (SL Keybinding: C)</summary> 2110 <summary>Version of the appearance system used.
2111 Value greater than 0 indicates that server side baking is used</summary>
1310 </member> 2112 </member>
1311 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_PITCH_POS"> 2113 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.COFVersion">
1312 <summary>Unused</summary> 2114 <summary>Version of the Current Outfit Folder the appearance is based on</summary>
1313 </member> 2115 </member>
1314 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_PITCH_NEG"> 2116 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.AppearanceFlags">
1315 <summary>Unused</summary> 2117 <summary>Appearance flags, introduced with server side baking, currently unused</summary>
1316 </member> 2118 </member>
1317 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS"> 2119 <member name="T:OpenMetaverse.AvatarInterestsReplyEventArgs">
1318 <summary>Unused</summary> 2120 <summary>Represents the interests from the profile of an agent</summary>
1319 </member> 2121 </member>
1320 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG"> 2122 <member name="P:OpenMetaverse.AvatarInterestsReplyEventArgs.AvatarID">
1321 <summary>Unused</summary> 2123 <summary>Get the ID of the agent</summary>
1322 </member> 2124 </member>
1323 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_AT"> 2125 <member name="T:OpenMetaverse.AvatarPropertiesReplyEventArgs">
1324 <summary>ORed with AGENT_CONTROL_AT_* if the keyboard is being used</summary> 2126 <summary>The properties of an agent</summary>
1325 </member> 2127 </member>
1326 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_LEFT"> 2128 <member name="P:OpenMetaverse.AvatarPropertiesReplyEventArgs.AvatarID">
1327 <summary>ORed with AGENT_CONTROL_LEFT_* if the keyboard is being used</summary> 2129 <summary>Get the ID of the agent</summary>
1328 </member> 2130 </member>
1329 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_UP"> 2131 <member name="P:OpenMetaverse.AvatarGroupsReplyEventArgs.AvatarID">
1330 <summary>ORed with AGENT_CONTROL_UP_* if the keyboard is being used</summary> 2132 <summary>Get the ID of the agent</summary>
1331 </member> 2133 </member>
1332 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FLY"> 2134 <member name="P:OpenMetaverse.AvatarPicksReplyEventArgs.AvatarID">
1333 <summary>Fly</summary> 2135 <summary>Get the ID of the agent</summary>
1334 </member> 2136 </member>
1335 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_STOP"> 2137 <member name="P:OpenMetaverse.AvatarClassifiedReplyEventArgs.AvatarID">
2138 <summary>Get the ID of the avatar</summary>
2139 </member>
2140 <member name="T:OpenMetaverse.DisplayNameUpdateEventArgs">
1336 <summary> 2141 <summary>
2142 Event args class for display name notification messages
1337 </summary> 2143 </summary>
1338 </member> 2144 </member>
1339 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FINISH_ANIM"> 2145 <member name="T:OpenMetaverse.Assets.AssetPrim">
1340 <summary>Finish our current animation</summary> 2146 <summary>
2147 A linkset asset, containing a parent primitive and zero or more children
2148 </summary>
1341 </member> 2149 </member>
1342 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP"> 2150 <member name="T:OpenMetaverse.Assets.Asset">
1343 <summary>Stand up from the ground or a prim seat</summary> 2151 <summary>
2152 Base class for all Asset types
2153 </summary>
1344 </member> 2154 </member>
1345 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND"> 2155 <member name="F:OpenMetaverse.Assets.Asset.AssetData">
1346 <summary>Sit on the ground at our current location</summary> 2156 <summary>A byte array containing the raw asset data</summary>
1347 </member> 2157 </member>
1348 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK"> 2158 <member name="F:OpenMetaverse.Assets.Asset.Temporary">
1349 <summary>Whether mouselook is currently enabled</summary> 2159 <summary>True if the asset it only stored on the server temporarily</summary>
1350 </member> 2160 </member>
1351 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS"> 2161 <member name="F:OpenMetaverse.Assets.Asset._AssetID">
1352 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2162 <summary>A unique ID</summary>
1353 </member> 2163 </member>
1354 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG"> 2164 <member name="M:OpenMetaverse.Assets.Asset.#ctor">
1355 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2165 <summary>
2166 Construct a new Asset object
2167 </summary>
1356 </member> 2168 </member>
1357 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS"> 2169 <member name="M:OpenMetaverse.Assets.Asset.#ctor(OpenMetaverse.UUID,System.Byte[])">
1358 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2170 <summary>
2171 Construct a new Asset object
2172 </summary>
2173 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
2174 <param name="assetData">A byte array containing the raw asset data</param>
1359 </member> 2175 </member>
1360 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG"> 2176 <member name="M:OpenMetaverse.Assets.Asset.Encode">
1361 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2177 <summary>
2178 Regenerates the <code>AssetData</code> byte array from the properties
2179 of the derived class.
2180 </summary>
1362 </member> 2181 </member>
1363 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS"> 2182 <member name="M:OpenMetaverse.Assets.Asset.Decode">
1364 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2183 <summary>
2184 Decodes the AssetData, placing it in appropriate properties of the derived
2185 class.
2186 </summary>
2187 <returns>True if the asset decoding succeeded, otherwise false</returns>
1365 </member> 2188 </member>
1366 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG"> 2189 <member name="P:OpenMetaverse.Assets.Asset.AssetID">
1367 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary> 2190 <summary>The assets unique ID</summary>
1368 </member> 2191 </member>
1369 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT"> 2192 <member name="P:OpenMetaverse.Assets.Asset.AssetType">
1370 <summary> 2193 <summary>
2194 The "type" of asset, Notecard, Animation, etc
1371 </summary> 2195 </summary>
1372 </member> 2196 </member>
1373 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT"> 2197 <member name="M:OpenMetaverse.Assets.AssetPrim.#ctor">
2198 <summary>Initializes a new instance of an AssetPrim object</summary>
2199 </member>
2200 <member name="M:OpenMetaverse.Assets.AssetPrim.#ctor(OpenMetaverse.UUID,System.Byte[])">
1374 <summary> 2201 <summary>
2202 Initializes a new instance of an AssetPrim object
1375 </summary> 2203 </summary>
2204 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
2205 <param name="assetData">A byte array containing the raw asset data</param>
1376 </member> 2206 </member>
1377 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AWAY"> 2207 <member name="M:OpenMetaverse.Assets.AssetPrim.Encode">
1378 <summary>Set when the avatar is idled or set to away. Note that the away animation is 2208 <summary>
1379 activated separately from setting this flag</summary> 2209
2210 </summary>
1380 </member> 2211 </member>
1381 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN"> 2212 <member name="M:OpenMetaverse.Assets.AssetPrim.Decode">
1382 <summary> 2213 <summary>
2214
1383 </summary> 2215 </summary>
2216 <returns></returns>
1384 </member> 2217 </member>
1385 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP"> 2218 <member name="P:OpenMetaverse.Assets.AssetPrim.AssetType">
2219 <summary>Override the base classes AssetType</summary>
2220 </member>
2221 <member name="T:OpenMetaverse.Assets.AssetPrim.ProfileShape">
1386 <summary> 2222 <summary>
2223 Only used internally for XML serialization/deserialization
1387 </summary> 2224 </summary>
1388 </member> 2225 </member>
1389 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN"> 2226 <member name="T:OpenMetaverse.Assets.PrimObject">
1390 <summary> 2227 <summary>
2228 The deserialized form of a single primitive in a linkset asset
1391 </summary> 2229 </summary>
1392 </member> 2230 </member>
1393 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP"> 2231 <member name="T:OpenMetaverse.EstateTask">
2232 <summary>Describes tasks returned in LandStatReply</summary>
2233 </member>
2234 <member name="T:OpenMetaverse.EstateTools">
1394 <summary> 2235 <summary>
2236 Estate level administration and utilities
1395 </summary> 2237 </summary>
1396 </member> 2238 </member>
1397 <member name="T:OpenMetaverse.AgentManager.AttachmentResourcesCallback"> 2239 <member name="F:OpenMetaverse.EstateTools.GroundTextures">
2240 <summary>Textures for each of the four terrain height levels</summary>
2241 </member>
2242 <member name="F:OpenMetaverse.EstateTools.GroundTextureLimits">
2243 <summary>Upper/lower texture boundaries for each corner of the sim</summary>
2244 </member>
2245 <member name="M:OpenMetaverse.EstateTools.#ctor(OpenMetaverse.GridClient)">
1398 <summary> 2246 <summary>
1399 Called once attachment resource usage information has been collected 2247 Constructor for EstateTools class
1400 </summary> 2248 </summary>
1401 <param name="success">Indicates if operation was successfull</param> 2249 <param name="client"></param>
1402 <param name="info">Attachment resource usage information</param>
1403 </member> 2250 </member>
1404 <member name="F:OpenMetaverse.AgentManager.m_Chat"> 2251 <member name="F:OpenMetaverse.EstateTools.m_TopCollidersReply">
1405 <summary>The event subscribers. null if no subcribers</summary> 2252 <summary>The event subscribers. null if no subcribers</summary>
1406 </member> 2253 </member>
1407 <member name="F:OpenMetaverse.AgentManager.m_ChatLock"> 2254 <member name="M:OpenMetaverse.EstateTools.OnTopCollidersReply(OpenMetaverse.TopCollidersReplyEventArgs)">
2255 <summary>Raises the TopCollidersReply event</summary>
2256 <param name="e">A TopCollidersReplyEventArgs object containing the
2257 data returned from the data server</param>
2258 </member>
2259 <member name="F:OpenMetaverse.EstateTools.m_TopCollidersReply_Lock">
1408 <summary>Thread sync lock object</summary> 2260 <summary>Thread sync lock object</summary>
1409 </member> 2261 </member>
1410 <member name="F:OpenMetaverse.AgentManager.m_ScriptDialog"> 2262 <member name="F:OpenMetaverse.EstateTools.m_TopScriptsReply">
1411 <summary>The event subscribers. null if no subcribers</summary> 2263 <summary>The event subscribers. null if no subcribers</summary>
1412 </member> 2264 </member>
1413 <member name="F:OpenMetaverse.AgentManager.m_ScriptDialogLock"> 2265 <member name="M:OpenMetaverse.EstateTools.OnTopScriptsReply(OpenMetaverse.TopScriptsReplyEventArgs)">
2266 <summary>Raises the TopScriptsReply event</summary>
2267 <param name="e">A TopScriptsReplyEventArgs object containing the
2268 data returned from the data server</param>
2269 </member>
2270 <member name="F:OpenMetaverse.EstateTools.m_TopScriptsReply_Lock">
1414 <summary>Thread sync lock object</summary> 2271 <summary>Thread sync lock object</summary>
1415 </member> 2272 </member>
1416 <member name="F:OpenMetaverse.AgentManager.m_ScriptQuestion"> 2273 <member name="F:OpenMetaverse.EstateTools.m_EstateUsersReply">
1417 <summary>The event subscribers. null if no subcribers</summary> 2274 <summary>The event subscribers. null if no subcribers</summary>
1418 </member> 2275 </member>
1419 <member name="F:OpenMetaverse.AgentManager.m_ScriptQuestionLock"> 2276 <member name="M:OpenMetaverse.EstateTools.OnEstateUsersReply(OpenMetaverse.EstateUsersReplyEventArgs)">
2277 <summary>Raises the EstateUsersReply event</summary>
2278 <param name="e">A EstateUsersReplyEventArgs object containing the
2279 data returned from the data server</param>
2280 </member>
2281 <member name="F:OpenMetaverse.EstateTools.m_EstateUsersReply_Lock">
1420 <summary>Thread sync lock object</summary> 2282 <summary>Thread sync lock object</summary>
1421 </member> 2283 </member>
1422 <member name="F:OpenMetaverse.AgentManager.m_LoadURL"> 2284 <member name="F:OpenMetaverse.EstateTools.m_EstateGroupsReply">
1423 <summary>The event subscribers. null if no subcribers</summary> 2285 <summary>The event subscribers. null if no subcribers</summary>
1424 </member> 2286 </member>
1425 <member name="F:OpenMetaverse.AgentManager.m_LoadUrlLock"> 2287 <member name="M:OpenMetaverse.EstateTools.OnEstateGroupsReply(OpenMetaverse.EstateGroupsReplyEventArgs)">
2288 <summary>Raises the EstateGroupsReply event</summary>
2289 <param name="e">A EstateGroupsReplyEventArgs object containing the
2290 data returned from the data server</param>
2291 </member>
2292 <member name="F:OpenMetaverse.EstateTools.m_EstateGroupsReply_Lock">
1426 <summary>Thread sync lock object</summary> 2293 <summary>Thread sync lock object</summary>
1427 </member> 2294 </member>
1428 <member name="F:OpenMetaverse.AgentManager.m_Balance"> 2295 <member name="F:OpenMetaverse.EstateTools.m_EstateManagersReply">
1429 <summary>The event subscribers. null if no subcribers</summary> 2296 <summary>The event subscribers. null if no subcribers</summary>
1430 </member> 2297 </member>
1431 <member name="F:OpenMetaverse.AgentManager.m_BalanceLock"> 2298 <member name="M:OpenMetaverse.EstateTools.OnEstateManagersReply(OpenMetaverse.EstateManagersReplyEventArgs)">
2299 <summary>Raises the EstateManagersReply event</summary>
2300 <param name="e">A EstateManagersReplyEventArgs object containing the
2301 data returned from the data server</param>
2302 </member>
2303 <member name="F:OpenMetaverse.EstateTools.m_EstateManagersReply_Lock">
1432 <summary>Thread sync lock object</summary> 2304 <summary>Thread sync lock object</summary>
1433 </member> 2305 </member>
1434 <member name="F:OpenMetaverse.AgentManager.m_MoneyBalance"> 2306 <member name="F:OpenMetaverse.EstateTools.m_EstateBansReply">
1435 <summary>The event subscribers. null if no subcribers</summary> 2307 <summary>The event subscribers. null if no subcribers</summary>
1436 </member> 2308 </member>
1437 <member name="F:OpenMetaverse.AgentManager.m_MoneyBalanceReplyLock"> 2309 <member name="M:OpenMetaverse.EstateTools.OnEstateBansReply(OpenMetaverse.EstateBansReplyEventArgs)">
2310 <summary>Raises the EstateBansReply event</summary>
2311 <param name="e">A EstateBansReplyEventArgs object containing the
2312 data returned from the data server</param>
2313 </member>
2314 <member name="F:OpenMetaverse.EstateTools.m_EstateBansReply_Lock">
1438 <summary>Thread sync lock object</summary> 2315 <summary>Thread sync lock object</summary>
1439 </member> 2316 </member>
1440 <member name="F:OpenMetaverse.AgentManager.m_InstantMessage"> 2317 <member name="F:OpenMetaverse.EstateTools.m_EstateCovenantReply">
1441 <summary>The event subscribers. null if no subcribers</summary> 2318 <summary>The event subscribers. null if no subcribers</summary>
1442 </member> 2319 </member>
1443 <member name="F:OpenMetaverse.AgentManager.m_InstantMessageLock"> 2320 <member name="M:OpenMetaverse.EstateTools.OnEstateCovenantReply(OpenMetaverse.EstateCovenantReplyEventArgs)">
2321 <summary>Raises the EstateCovenantReply event</summary>
2322 <param name="e">A EstateCovenantReplyEventArgs object containing the
2323 data returned from the data server</param>
2324 </member>
2325 <member name="F:OpenMetaverse.EstateTools.m_EstateCovenantReply_Lock">
1444 <summary>Thread sync lock object</summary> 2326 <summary>Thread sync lock object</summary>
1445 </member> 2327 </member>
1446 <member name="F:OpenMetaverse.AgentManager.m_Teleport"> 2328 <member name="F:OpenMetaverse.EstateTools.m_EstateUpdateInfoReply">
1447 <summary>The event subscribers. null if no subcribers</summary> 2329 <summary>The event subscribers. null if no subcribers</summary>
1448 </member> 2330 </member>
1449 <member name="F:OpenMetaverse.AgentManager.m_TeleportLock"> 2331 <member name="M:OpenMetaverse.EstateTools.OnEstateUpdateInfoReply(OpenMetaverse.EstateUpdateInfoReplyEventArgs)">
2332 <summary>Raises the EstateUpdateInfoReply event</summary>
2333 <param name="e">A EstateUpdateInfoReplyEventArgs object containing the
2334 data returned from the data server</param>
2335 </member>
2336 <member name="F:OpenMetaverse.EstateTools.m_EstateUpdateInfoReply_Lock">
1450 <summary>Thread sync lock object</summary> 2337 <summary>Thread sync lock object</summary>
1451 </member> 2338 </member>
1452 <member name="F:OpenMetaverse.AgentManager.m_AgentData"> 2339 <member name="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)">
1453 <summary>The event subscribers. null if no subcribers</summary> 2340 <summary>
2341 Requests estate information such as top scripts and colliders
2342 </summary>
2343 <param name="parcelLocalID"></param>
2344 <param name="reportType"></param>
2345 <param name="requestFlags"></param>
2346 <param name="filter"></param>
1454 </member> 2347 </member>
1455 <member name="F:OpenMetaverse.AgentManager.m_AgentDataLock"> 2348 <member name="M:OpenMetaverse.EstateTools.RequestInfo">
1456 <summary>Thread sync lock object</summary> 2349 <summary>Requests estate settings, including estate manager and access/ban lists</summary>
1457 </member> 2350 </member>
1458 <member name="F:OpenMetaverse.AgentManager.m_AnimationsChanged"> 2351 <member name="M:OpenMetaverse.EstateTools.RequestTopScripts">
1459 <summary>The event subscribers. null if no subcribers</summary> 2352 <summary>Requests the "Top Scripts" list for the current region</summary>
1460 </member> 2353 </member>
1461 <member name="F:OpenMetaverse.AgentManager.m_AnimationsChangedLock"> 2354 <member name="M:OpenMetaverse.EstateTools.RequestTopColliders">
1462 <summary>Thread sync lock object</summary> 2355 <summary>Requests the "Top Colliders" list for the current region</summary>
1463 </member> 2356 </member>
1464 <member name="F:OpenMetaverse.AgentManager.m_MeanCollision"> 2357 <member name="M:OpenMetaverse.EstateTools.SetTerrainVariables(System.Single,System.Single,System.Single,System.Boolean,System.Boolean,System.Single)">
1465 <summary>The event subscribers. null if no subcribers</summary> 2358 <summary>
2359 Set several estate specific configuration variables
2360 </summary>
2361 <param name="WaterHeight">The Height of the waterlevel over the entire estate. Defaults to 20</param>
2362 <param name="TerrainRaiseLimit">The maximum height change allowed above the baked terrain. Defaults to 4</param>
2363 <param name="TerrainLowerLimit">The minimum height change allowed below the baked terrain. Defaults to -4</param>
2364 <param name="UseEstateSun">true to use</param>
2365 <param name="FixedSun">if True forces the sun position to the position in SunPosition</param>
2366 <param name="SunPosition">The current position of the sun on the estate, or when FixedSun is true the static position
2367 the sun will remain. <remarks>6.0 = Sunrise, 30.0 = Sunset</remarks></param>
1466 </member> 2368 </member>
1467 <member name="F:OpenMetaverse.AgentManager.m_MeanCollisionLock"> 2369 <member name="M:OpenMetaverse.EstateTools.SimWideReturn(OpenMetaverse.UUID,OpenMetaverse.EstateTools.EstateReturnFlags,System.Boolean)">
1468 <summary>Thread sync lock object</summary> 2370 <summary>
2371 Request return of objects owned by specified avatar
2372 </summary>
2373 <param name="Target">The Agents <see cref="T:OpenMetaverse.UUID"/> owning the primitives to return</param>
2374 <param name="flag">specify the coverage and type of objects to be included in the return</param>
2375 <param name="EstateWide">true to perform return on entire estate</param>
1469 </member> 2376 </member>
1470 <member name="F:OpenMetaverse.AgentManager.m_RegionCrossed"> 2377 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessage(System.String,System.String)">
1471 <summary>The event subscribers. null if no subcribers</summary> 2378 <summary></summary>
2379 <param name="method"></param>
2380 <param name="param"></param>
1472 </member> 2381 </member>
1473 <member name="F:OpenMetaverse.AgentManager.m_RegionCrossedLock"> 2382 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessage(System.String,System.Collections.Generic.List{System.String})">
1474 <summary>Thread sync lock object</summary> 2383 <summary>
2384 Used for setting and retrieving various estate panel settings
2385 </summary>
2386 <param name="method">EstateOwnerMessage Method field</param>
2387 <param name="listParams">List of parameters to include</param>
1475 </member> 2388 </member>
1476 <member name="F:OpenMetaverse.AgentManager.m_GroupChatJoined"> 2389 <member name="M:OpenMetaverse.EstateTools.KickUser(OpenMetaverse.UUID)">
1477 <summary>The event subscribers. null if no subcribers</summary> 2390 <summary>
2391 Kick an avatar from an estate
2392 </summary>
2393 <param name="userID">Key of Agent to remove</param>
1478 </member> 2394 </member>
1479 <member name="F:OpenMetaverse.AgentManager.m_GroupChatJoinedLock"> 2395 <member name="M:OpenMetaverse.EstateTools.BanUser(OpenMetaverse.UUID,System.Boolean)">
1480 <summary>Thread sync lock object</summary> 2396 <summary>
2397 Ban an avatar from an estate</summary>
2398 <param name="userID">Key of Agent to remove</param>
2399 <param name="allEstates">Ban user from this estate and all others owned by the estate owner</param>
1481 </member> 2400 </member>
1482 <member name="F:OpenMetaverse.AgentManager.m_AlertMessage"> 2401 <member name="M:OpenMetaverse.EstateTools.UnbanUser(OpenMetaverse.UUID,System.Boolean)">
1483 <summary>The event subscribers. null if no subcribers</summary> 2402 <summary>Unban an avatar from an estate</summary>
2403 <param name="userID">Key of Agent to remove</param>
2404 /// <param name="allEstates">Unban user from this estate and all others owned by the estate owner</param>
1484 </member> 2405 </member>
1485 <member name="F:OpenMetaverse.AgentManager.m_AlertMessageLock"> 2406 <member name="M:OpenMetaverse.EstateTools.EstateMessage(System.String)">
1486 <summary>Thread sync lock object</summary> 2407 <summary>
2408 Send a message dialog to everyone in an entire estate
2409 </summary>
2410 <param name="message">Message to send all users in the estate</param>
1487 </member> 2411 </member>
1488 <member name="F:OpenMetaverse.AgentManager.m_ScriptControl"> 2412 <member name="M:OpenMetaverse.EstateTools.SimulatorMessage(System.String)">
1489 <summary>The event subscribers. null if no subcribers</summary> 2413 <summary>
2414 Send a message dialog to everyone in a simulator
2415 </summary>
2416 <param name="message">Message to send all users in the simulator</param>
1490 </member> 2417 </member>
1491 <member name="F:OpenMetaverse.AgentManager.m_ScriptControlLock"> 2418 <member name="M:OpenMetaverse.EstateTools.TeleportHomeUser(OpenMetaverse.UUID)">
1492 <summary>Thread sync lock object</summary> 2419 <summary>
2420 Send an avatar back to their home location
2421 </summary>
2422 <param name="pest">Key of avatar to send home</param>
1493 </member> 2423 </member>
1494 <member name="F:OpenMetaverse.AgentManager.m_CameraConstraint"> 2424 <member name="M:OpenMetaverse.EstateTools.RestartRegion">
1495 <summary>The event subscribers. null if no subcribers</summary> 2425 <summary>
2426 Begin the region restart process
2427 </summary>
1496 </member> 2428 </member>
1497 <member name="F:OpenMetaverse.AgentManager.m_CameraConstraintLock"> 2429 <member name="M:OpenMetaverse.EstateTools.CancelRestart">
1498 <summary>Thread sync lock object</summary> 2430 <summary>
2431 Cancels a region restart
2432 </summary>
1499 </member> 2433 </member>
1500 <member name="F:OpenMetaverse.AgentManager.m_ScriptSensorReply"> 2434 <member name="M:OpenMetaverse.EstateTools.SetRegionInfo(System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Single,System.Single,System.Boolean)">
1501 <summary>The event subscribers. null if no subcribers</summary> 2435 <summary>Estate panel "Region" tab settings</summary>
1502 </member> 2436 </member>
1503 <member name="F:OpenMetaverse.AgentManager.m_ScriptSensorReplyLock"> 2437 <member name="M:OpenMetaverse.EstateTools.SetRegionDebug(System.Boolean,System.Boolean,System.Boolean)">
1504 <summary>Thread sync lock object</summary> 2438 <summary>Estate panel "Debug" tab settings</summary>
1505 </member> 2439 </member>
1506 <member name="F:OpenMetaverse.AgentManager.m_AvatarSitResponse"> 2440 <member name="M:OpenMetaverse.EstateTools.SetRegionTerrain(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
1507 <summary>The event subscribers. null if no subcribers</summary> 2441 <summary>Used for setting the region's terrain textures for its four height levels</summary>
2442 <param name="low"></param>
2443 <param name="midLow"></param>
2444 <param name="midHigh"></param>
2445 <param name="high"></param>
1508 </member> 2446 </member>
1509 <member name="F:OpenMetaverse.AgentManager.m_AvatarSitResponseLock"> 2447 <member name="M:OpenMetaverse.EstateTools.SetRegionTerrainHeights(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
1510 <summary>Thread sync lock object</summary> 2448 <summary>Used for setting sim terrain texture heights</summary>
1511 </member> 2449 </member>
1512 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberAdded"> 2450 <member name="M:OpenMetaverse.EstateTools.RequestCovenant">
1513 <summary>The event subscribers. null if no subcribers</summary> 2451 <summary>Requests the estate covenant</summary>
1514 </member> 2452 </member>
1515 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberAddedLock"> 2453 <member name="M:OpenMetaverse.EstateTools.UploadTerrain(System.Byte[],System.String)">
1516 <summary>Thread sync lock object</summary> 2454 <summary>
2455 Upload a terrain RAW file
2456 </summary>
2457 <param name="fileData">A byte array containing the encoded terrain data</param>
2458 <param name="fileName">The name of the file being uploaded</param>
2459 <returns>The Id of the transfer request</returns>
1517 </member> 2460 </member>
1518 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberLeft"> 2461 <member name="M:OpenMetaverse.EstateTools.TeleportHomeAllUsers">
1519 <summary>The event subscribers. null if no subcribers</summary> 2462 <summary>
2463 Teleports all users home in current Estate
2464 </summary>
1520 </member> 2465 </member>
1521 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberLeftLock"> 2466 <member name="M:OpenMetaverse.EstateTools.RemoveEstateManager(OpenMetaverse.UUID,System.Boolean)">
1522 <summary>Thread sync lock object</summary> 2467 <summary>
2468 Remove estate manager</summary>
2469 <param name="userID">Key of Agent to Remove</param>
2470 <param name="allEstates">removes manager to this estate and all others owned by the estate owner</param>
1523 </member> 2471 </member>
1524 <member name="F:OpenMetaverse.AgentManager.m_SetDisplayNameReply"> 2472 <member name="M:OpenMetaverse.EstateTools.AddEstateManager(OpenMetaverse.UUID,System.Boolean)">
1525 <summary>The event subscribers, null of no subscribers</summary> 2473 <summary>
2474 Add estate manager</summary>
2475 <param name="userID">Key of Agent to Add</param>
2476 <param name="allEstates">Add agent as manager to this estate and all others owned by the estate owner</param>
1526 </member> 2477 </member>
1527 <member name="F:OpenMetaverse.AgentManager.m_SetDisplayNameReplyLock"> 2478 <member name="M:OpenMetaverse.EstateTools.AddAllowedUser(OpenMetaverse.UUID,System.Boolean)">
1528 <summary>Thread sync lock object</summary> 2479 <summary>
2480 Add's an agent to the estate Allowed list</summary>
2481 <param name="userID">Key of Agent to Add</param>
2482 <param name="allEstates">Add agent as an allowed reisdent to All estates if true</param>
1529 </member> 2483 </member>
1530 <member name="F:OpenMetaverse.AgentManager.m_MuteListUpdated"> 2484 <member name="M:OpenMetaverse.EstateTools.RemoveAllowedUser(OpenMetaverse.UUID,System.Boolean)">
1531 <summary>The event subscribers. null if no subcribers</summary> 2485 <summary>
2486 Removes an agent from the estate Allowed list</summary>
2487 <param name="userID">Key of Agent to Remove</param>
2488 <param name="allEstates">Removes agent as an allowed reisdent from All estates if true</param>
1532 </member> 2489 </member>
1533 <member name="F:OpenMetaverse.AgentManager.m_MuteListUpdatedLock"> 2490 <member name="M:OpenMetaverse.EstateTools.AddAllowedGroup(OpenMetaverse.UUID,System.Boolean)">
1534 <summary>Thread sync lock object</summary> 2491
2492 <summary>
2493 Add's a group to the estate Allowed list</summary>
2494 <param name="groupID">Key of Group to Add</param>
2495 <param name="allEstates">Add Group as an allowed group to All estates if true</param>
1535 </member> 2496 </member>
1536 <member name="F:OpenMetaverse.AgentManager.Client"> 2497 <member name="M:OpenMetaverse.EstateTools.RemoveAllowedGroup(OpenMetaverse.UUID,System.Boolean)">
1537 <summary>Reference to the GridClient instance</summary> 2498
2499 <summary>
2500 Removes a group from the estate Allowed list</summary>
2501 <param name="groupID">Key of Group to Remove</param>
2502 <param name="allEstates">Removes Group as an allowed Group from All estates if true</param>
1538 </member> 2503 </member>
1539 <member name="F:OpenMetaverse.AgentManager.Movement"> 2504 <member name="M:OpenMetaverse.EstateTools.EstateCovenantReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1540 <summary>Used for movement and camera tracking</summary> 2505 <summary>Process an incoming packet and raise the appropriate events</summary>
2506 <param name="sender">The sender</param>
2507 <param name="e">The EventArgs object containing the packet data</param>
1541 </member> 2508 </member>
1542 <member name="F:OpenMetaverse.AgentManager.SignaledAnimations"> 2509 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessageHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1543 <summary>Currently playing animations for the agent. Can be used to 2510 <summary>Process an incoming packet and raise the appropriate events</summary>
1544 check the current movement status such as walking, hovering, aiming, 2511 <param name="sender">The sender</param>
1545 etc. by checking against system animations found in the Animations class</summary> 2512 <param name="e">The EventArgs object containing the packet data</param>
1546 </member> 2513 </member>
1547 <member name="F:OpenMetaverse.AgentManager.GroupChatSessions"> 2514 <member name="M:OpenMetaverse.EstateTools.LandStatReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
1548 <summary>Dictionary containing current Group Chat sessions and members</summary> 2515 <summary>Process an incoming packet and raise the appropriate events</summary>
2516 <param name="sender">The sender</param>
2517 <param name="e">The EventArgs object containing the packet data</param>
1549 </member> 2518 </member>
1550 <member name="F:OpenMetaverse.AgentManager.MuteList"> 2519 <member name="E:OpenMetaverse.EstateTools.TopCollidersReply">
1551 <summary>Dictionary containing mute list keyead on mute name and key</summary> 2520 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1552 </member> 2521 </member>
1553 <member name="E:OpenMetaverse.AgentManager.ChatFromSimulator"> 2522 <member name="E:OpenMetaverse.EstateTools.TopScriptsReply">
1554 <summary>Raised when a scripted object or agent within range sends a public message</summary> 2523 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1555 </member> 2524 </member>
1556 <member name="E:OpenMetaverse.AgentManager.ScriptDialog"> 2525 <member name="E:OpenMetaverse.EstateTools.EstateUsersReply">
1557 <summary>Raised when a scripted object sends a dialog box containing possible 2526 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1558 options an agent can respond to</summary>
1559 </member> 2527 </member>
1560 <member name="E:OpenMetaverse.AgentManager.ScriptQuestion"> 2528 <member name="E:OpenMetaverse.EstateTools.EstateGroupsReply">
1561 <summary>Raised when an object requests a change in the permissions an agent has permitted</summary> 2529 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1562 </member> 2530 </member>
1563 <member name="E:OpenMetaverse.AgentManager.LoadURL"> 2531 <member name="E:OpenMetaverse.EstateTools.EstateManagersReply">
1564 <summary>Raised when a script requests an agent open the specified URL</summary> 2532 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1565 </member> 2533 </member>
1566 <member name="E:OpenMetaverse.AgentManager.MoneyBalance"> 2534 <member name="E:OpenMetaverse.EstateTools.EstateBansReply">
1567 <summary>Raised when an agents currency balance is updated</summary> 2535 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1568 </member> 2536 </member>
1569 <member name="E:OpenMetaverse.AgentManager.MoneyBalanceReply"> 2537 <member name="E:OpenMetaverse.EstateTools.EstateCovenantReply">
1570 <summary>Raised when a transaction occurs involving currency such as a land purchase</summary> 2538 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1571 </member> 2539 </member>
1572 <member name="E:OpenMetaverse.AgentManager.IM"> 2540 <member name="E:OpenMetaverse.EstateTools.EstateUpdateInfoReply">
1573 <summary>Raised when an ImprovedInstantMessage packet is recieved from the simulator, this is used for everything from 2541 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"/> request.</summary>
1574 private messaging to friendship offers. The Dialog field defines what type of message has arrived</summary>
1575 </member> 2542 </member>
1576 <member name="E:OpenMetaverse.AgentManager.TeleportProgress"> 2543 <member name="T:OpenMetaverse.EstateTools.LandStatReportType">
1577 <summary>Raised when an agent has requested a teleport to another location, or when responding to a lure. Raised multiple times 2544 <summary>Used in the ReportType field of a LandStatRequest</summary>
1578 for each teleport indicating the progress of the request</summary>
1579 </member> 2545 </member>
1580 <member name="E:OpenMetaverse.AgentManager.AgentDataReply"> 2546 <member name="T:OpenMetaverse.EstateTools.EstateAccessDelta">
1581 <summary>Raised when a simulator sends agent specific information for our avatar.</summary> 2547 <summary>Used by EstateOwnerMessage packets</summary>
1582 </member> 2548 </member>
1583 <member name="E:OpenMetaverse.AgentManager.AnimationsChanged"> 2549 <member name="T:OpenMetaverse.EstateTools.EstateAccessReplyDelta">
1584 <summary>Raised when our agents animation playlist changes</summary> 2550 <summary>Used by EstateOwnerMessage packets</summary>
1585 </member> 2551 </member>
1586 <member name="E:OpenMetaverse.AgentManager.MeanCollision"> 2552 <member name="T:OpenMetaverse.EstateTools.EstateReturnFlags">
1587 <summary>Raised when an object or avatar forcefully collides with our agent</summary> 2553 <summary>
2554
2555 </summary>
1588 </member> 2556 </member>
1589 <member name="E:OpenMetaverse.AgentManager.RegionCrossed"> 2557 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.None">
1590 <summary>Raised when our agent crosses a region border into another region</summary> 2558 <summary>No flags set</summary>
1591 </member> 2559 </member>
1592 <member name="E:OpenMetaverse.AgentManager.GroupChatJoined"> 2560 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnScripted">
1593 <summary>Raised when our agent succeeds or fails to join a group chat session</summary> 2561 <summary>Only return targets scripted objects</summary>
1594 </member> 2562 </member>
1595 <member name="E:OpenMetaverse.AgentManager.AlertMessage"> 2563 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnOnOthersLand">
1596 <summary>Raised when a simulator sends an urgent message usually indication the recent failure of 2564 <summary>Only return targets objects if on others land</summary>
1597 another action we have attempted to take such as an attempt to enter a parcel where we are denied access</summary>
1598 </member> 2565 </member>
1599 <member name="E:OpenMetaverse.AgentManager.ScriptControlChange"> 2566 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnScriptedAndOnOthers">
1600 <summary>Raised when a script attempts to take or release specified controls for our agent</summary> 2567 <summary>Returns target's scripted objects and objects on other parcels</summary>
1601 </member> 2568 </member>
1602 <member name="E:OpenMetaverse.AgentManager.CameraConstraint"> 2569 <member name="T:OpenMetaverse.EstateTools.GroundTextureSettings">
1603 <summary>Raised when the simulator detects our agent is trying to view something 2570 <summary>Ground texture settings for each corner of the region</summary>
1604 beyond its limits</summary>
1605 </member> 2571 </member>
1606 <member name="E:OpenMetaverse.AgentManager.ScriptSensorReply"> 2572 <member name="T:OpenMetaverse.EstateTools.GroundTextureHeight">
1607 <summary>Raised when a script sensor reply is received from a simulator</summary> 2573 <summary>Used by GroundTextureHeightSettings</summary>
1608 </member> 2574 </member>
1609 <member name="E:OpenMetaverse.AgentManager.AvatarSitResponse"> 2575 <member name="T:OpenMetaverse.EstateTools.GroundTextureHeightSettings">
1610 <summary>Raised in response to a <see cref="M:OpenMetaverse.AgentManager.RequestSit(OpenMetaverse.UUID,OpenMetaverse.Vector3)" /> request</summary> 2576 <summary>The high and low texture thresholds for each corner of the sim</summary>
1611 </member> 2577 </member>
1612 <member name="E:OpenMetaverse.AgentManager.ChatSessionMemberAdded"> 2578 <member name="T:OpenMetaverse.TopCollidersReplyEventArgs">
1613 <summary>Raised when an avatar enters a group chat session we are participating in</summary> 2579 <summary>Raised on LandStatReply when the report type is for "top colliders"</summary>
1614 </member> 2580 </member>
1615 <member name="E:OpenMetaverse.AgentManager.ChatSessionMemberLeft"> 2581 <member name="M:OpenMetaverse.TopCollidersReplyEventArgs.#ctor(System.Int32,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.EstateTask})">
1616 <summary>Raised when an agent exits a group chat session we are participating in</summary> 2582 <summary>Construct a new instance of the TopCollidersReplyEventArgs class</summary>
2583 <param name="objectCount">The number of returned items in LandStatReply</param>
2584 <param name="tasks">Dictionary of Object UUIDs to tasks returned in LandStatReply</param>
1617 </member> 2585 </member>
1618 <member name="E:OpenMetaverse.AgentManager.SetDisplayNameReply"> 2586 <member name="P:OpenMetaverse.TopCollidersReplyEventArgs.ObjectCount">
1619 <summary>Raised when the simulator sends us data containing 2587 <summary>
1620 the details of display name change</summary> 2588 The number of returned items in LandStatReply
2589 </summary>
1621 </member> 2590 </member>
1622 <member name="E:OpenMetaverse.AgentManager.MuteListUpdated"> 2591 <member name="P:OpenMetaverse.TopCollidersReplyEventArgs.Tasks">
1623 <summary>Raised when a scripted object or agent within range sends a public message</summary> 2592 <summary>
2593 A Dictionary of Object UUIDs to tasks returned in LandStatReply
2594 </summary>
1624 </member> 2595 </member>
1625 <member name="P:OpenMetaverse.AgentManager.AgentID"> 2596 <member name="T:OpenMetaverse.TopScriptsReplyEventArgs">
1626 <summary>Your (client) avatars <see cref="T:OpenMetaverse.UUID" /></summary> 2597 <summary>Raised on LandStatReply when the report type is for "top Scripts"</summary>
1627 <remarks>"client", "agent", and "avatar" all represent the same thing</remarks>
1628 </member> 2598 </member>
1629 <member name="P:OpenMetaverse.AgentManager.SessionID"> 2599 <member name="M:OpenMetaverse.TopScriptsReplyEventArgs.#ctor(System.Int32,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.EstateTask})">
1630 <summary>Temporary <seealso cref="T:OpenMetaverse.UUID" /> assigned to this session, used for 2600 <summary>Construct a new instance of the TopScriptsReplyEventArgs class</summary>
1631 verifying our identity in packets</summary> 2601 <param name="objectCount">The number of returned items in LandStatReply</param>
2602 <param name="tasks">Dictionary of Object UUIDs to tasks returned in LandStatReply</param>
1632 </member> 2603 </member>
1633 <member name="P:OpenMetaverse.AgentManager.SecureSessionID"> 2604 <member name="P:OpenMetaverse.TopScriptsReplyEventArgs.ObjectCount">
1634 <summary>Shared secret <seealso cref="T:OpenMetaverse.UUID" /> that is never sent over the wire</summary> 2605 <summary>
2606 The number of scripts returned in LandStatReply
2607 </summary>
1635 </member> 2608 </member>
1636 <member name="P:OpenMetaverse.AgentManager.LocalID"> 2609 <member name="P:OpenMetaverse.TopScriptsReplyEventArgs.Tasks">
1637 <summary>Your (client) avatar ID, local to the current region/sim</summary> 2610 <summary>
2611 A Dictionary of Object UUIDs to tasks returned in LandStatReply
2612 </summary>
1638 </member> 2613 </member>
1639 <member name="P:OpenMetaverse.AgentManager.StartLocation"> 2614 <member name="T:OpenMetaverse.EstateBansReplyEventArgs">
1640 <summary>Where the avatar started at login. Can be "last", "home" 2615 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
1641 or a login <seealso cref="T:OpenMetaverse.URI" /></summary>
1642 </member> 2616 </member>
1643 <member name="P:OpenMetaverse.AgentManager.AgentAccess"> 2617 <member name="M:OpenMetaverse.EstateBansReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
1644 <summary>The access level of this agent, usually M or PG</summary> 2618 <summary>Construct a new instance of the EstateBansReplyEventArgs class</summary>
2619 <param name="estateID">The estate's identifier on the grid</param>
2620 <param name="count">The number of returned items in LandStatReply</param>
2621 <param name="banned">User UUIDs banned</param>
1645 </member> 2622 </member>
1646 <member name="P:OpenMetaverse.AgentManager.CollisionPlane"> 2623 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.EstateID">
1647 <summary>The CollisionPlane of Agent</summary> 2624 <summary>
2625 The identifier of the estate
2626 </summary>
1648 </member> 2627 </member>
1649 <member name="P:OpenMetaverse.AgentManager.Velocity"> 2628 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.Count">
1650 <summary>An <seealso cref="T:OpenMetaverse.Vector3" /> representing the velocity of our agent</summary> 2629 <summary>
2630 The number of returned itmes
2631 </summary>
1651 </member> 2632 </member>
1652 <member name="P:OpenMetaverse.AgentManager.Acceleration"> 2633 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.Banned">
1653 <summary>An <seealso cref="T:OpenMetaverse.Vector3" /> representing the acceleration of our agent</summary> 2634 <summary>
2635 List of UUIDs of Banned Users
2636 </summary>
1654 </member> 2637 </member>
1655 <member name="P:OpenMetaverse.AgentManager.AngularVelocity"> 2638 <member name="T:OpenMetaverse.EstateUsersReplyEventArgs">
1656 <summary>A <seealso cref="T:OpenMetaverse.Vector3" /> which specifies the angular speed, and axis about which an Avatar is rotating.</summary> 2639 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
1657 </member> 2640 </member>
1658 <member name="P:OpenMetaverse.AgentManager.HomePosition"> 2641 <member name="M:OpenMetaverse.EstateUsersReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
1659 <summary>Position avatar client will goto when login to 'home' or during 2642 <summary>Construct a new instance of the EstateUsersReplyEventArgs class</summary>
1660 teleport request to 'home' region.</summary> 2643 <param name="estateID">The estate's identifier on the grid</param>
2644 <param name="count">The number of users</param>
2645 <param name="allowedUsers">Allowed users UUIDs</param>
1661 </member> 2646 </member>
1662 <member name="P:OpenMetaverse.AgentManager.HomeLookAt"> 2647 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.EstateID">
1663 <summary>LookAt point saved/restored with HomePosition</summary> 2648 <summary>
2649 The identifier of the estate
2650 </summary>
1664 </member> 2651 </member>
1665 <member name="P:OpenMetaverse.AgentManager.FirstName"> 2652 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.Count">
1666 <summary>Avatar First Name (i.e. Philip)</summary> 2653 <summary>
2654 The number of returned items
2655 </summary>
1667 </member> 2656 </member>
1668 <member name="P:OpenMetaverse.AgentManager.LastName"> 2657 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.AllowedUsers">
1669 <summary>Avatar Last Name (i.e. Linden)</summary> 2658 <summary>
2659 List of UUIDs of Allowed Users
2660 </summary>
1670 </member> 2661 </member>
1671 <member name="P:OpenMetaverse.AgentManager.Name"> 2662 <member name="T:OpenMetaverse.EstateGroupsReplyEventArgs">
1672 <summary>Avatar Full Name (i.e. Philip Linden)</summary> 2663 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
1673 </member> 2664 </member>
1674 <member name="P:OpenMetaverse.AgentManager.Health"> 2665 <member name="M:OpenMetaverse.EstateGroupsReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
1675 <summary>Gets the health of the agent</summary> 2666 <summary>Construct a new instance of the EstateGroupsReplyEventArgs class</summary>
2667 <param name="estateID">The estate's identifier on the grid</param>
2668 <param name="count">The number of Groups</param>
2669 <param name="allowedGroups">Allowed Groups UUIDs</param>
1676 </member> 2670 </member>
1677 <member name="P:OpenMetaverse.AgentManager.Balance"> 2671 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.EstateID">
1678 <summary>Gets the current balance of the agent</summary> 2672 <summary>
2673 The identifier of the estate
2674 </summary>
1679 </member> 2675 </member>
1680 <member name="P:OpenMetaverse.AgentManager.SittingOn"> 2676 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.Count">
1681 <summary>Gets the local ID of the prim the agent is sitting on, 2677 <summary>
1682 zero if the avatar is not currently sitting</summary> 2678 The number of returned items
2679 </summary>
1683 </member> 2680 </member>
1684 <member name="P:OpenMetaverse.AgentManager.ActiveGroup"> 2681 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.AllowedGroups">
1685 <summary>Gets the <seealso cref="T:OpenMetaverse.UUID" /> of the agents active group.</summary> 2682 <summary>
2683 List of UUIDs of Allowed Groups
2684 </summary>
1686 </member> 2685 </member>
1687 <member name="P:OpenMetaverse.AgentManager.ActiveGroupPowers"> 2686 <member name="T:OpenMetaverse.EstateManagersReplyEventArgs">
1688 <summary>Gets the Agents powers in the currently active group</summary> 2687 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
1689 </member> 2688 </member>
1690 <member name="P:OpenMetaverse.AgentManager.TeleportMessage"> 2689 <member name="M:OpenMetaverse.EstateManagersReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
1691 <summary>Current status message for teleporting</summary> 2690 <summary>Construct a new instance of the EstateManagersReplyEventArgs class</summary>
2691 <param name="estateID">The estate's identifier on the grid</param>
2692 <param name="count">The number of Managers</param>
2693 <param name="managers"> Managers UUIDs</param>
1692 </member> 2694 </member>
1693 <member name="P:OpenMetaverse.AgentManager.RelativePosition"> 2695 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.EstateID">
1694 <summary>Current position of the agent as a relative offset from 2696 <summary>
1695 the simulator, or the parent object if we are sitting on something</summary> 2697 The identifier of the estate
2698 </summary>
1696 </member> 2699 </member>
1697 <member name="P:OpenMetaverse.AgentManager.RelativeRotation"> 2700 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.Count">
1698 <summary>Current rotation of the agent as a relative rotation from 2701 <summary>
1699 the simulator, or the parent object if we are sitting on something</summary> 2702 The number of returned items
2703 </summary>
1700 </member> 2704 </member>
1701 <member name="P:OpenMetaverse.AgentManager.SimPosition"> 2705 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.Managers">
1702 <summary>Current position of the agent in the simulator</summary> 2706 <summary>
2707 List of UUIDs of the Estate's Managers
2708 </summary>
1703 </member> 2709 </member>
1704 <member name="P:OpenMetaverse.AgentManager.SimRotation"> 2710 <member name="T:OpenMetaverse.EstateCovenantReplyEventArgs">
2711 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
2712 </member>
2713 <member name="M:OpenMetaverse.EstateCovenantReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Int64,System.String,OpenMetaverse.UUID)">
2714 <summary>Construct a new instance of the EstateCovenantReplyEventArgs class</summary>
2715 <param name="covenantID">The Covenant ID</param>
2716 <param name="timestamp">The timestamp</param>
2717 <param name="estateName">The estate's name</param>
2718 <param name="estateOwnerID">The Estate Owner's ID (can be a GroupID)</param>
2719 </member>
2720 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.CovenantID">
1705 <summary> 2721 <summary>
1706 A <seealso cref="T:OpenMetaverse.Quaternion" /> representing the agents current rotation 2722 The Covenant
1707 </summary> 2723 </summary>
1708 </member> 2724 </member>
1709 <member name="P:OpenMetaverse.AgentManager.GlobalPosition"> 2725 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.Timestamp">
1710 <summary>Returns the global grid position of the avatar</summary> 2726 <summary>
2727 The timestamp
2728 </summary>
2729 </member>
2730 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.EstateName">
2731 <summary>
2732 The Estate name
2733 </summary>
2734 </member>
2735 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.EstateOwnerID">
2736 <summary>
2737 The Estate Owner's ID (can be a GroupID)
2738 </summary>
2739 </member>
2740 <member name="T:OpenMetaverse.EstateUpdateInfoReplyEventArgs">
2741 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
2742 </member>
2743 <member name="M:OpenMetaverse.EstateUpdateInfoReplyEventArgs.#ctor(System.String,OpenMetaverse.UUID,System.UInt32,System.Boolean)">
2744 <summary>Construct a new instance of the EstateUpdateInfoReplyEventArgs class</summary>
2745 <param name="estateName">The estate's name</param>
2746 <param name="estateOwner">The Estate Owners ID (can be a GroupID)</param>
2747 <param name="estateID">The estate's identifier on the grid</param>
2748 <param name="denyNoPaymentInfo"></param>
2749 </member>
2750 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateName">
2751 <summary>
2752 The estate's name
2753 </summary>
2754 </member>
2755 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateOwner">
2756 <summary>
2757 The Estate Owner's ID (can be a GroupID)
2758 </summary>
2759 </member>
2760 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateID">
2761 <summary>
2762 The identifier of the estate on the grid
2763 </summary>
2764 </member>
2765 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.DenyNoPaymentInfo">
2766 <summary></summary>
2767 </member>
2768 <member name="T:OpenMetaverse.AgentManager">
2769 <summary>
2770 Manager class for our own avatar
2771 </summary>
2772 </member>
2773 <member name="F:OpenMetaverse.AgentManager.m_Chat">
2774 <summary>The event subscribers. null if no subcribers</summary>
1711 </member> 2775 </member>
1712 <member name="M:OpenMetaverse.AgentManager.OnChat(OpenMetaverse.ChatEventArgs)"> 2776 <member name="M:OpenMetaverse.AgentManager.OnChat(OpenMetaverse.ChatEventArgs)">
1713 <summary>Raises the ChatFromSimulator event</summary> 2777 <summary>Raises the ChatFromSimulator event</summary>
1714 <param name="e">A ChatEventArgs object containing the 2778 <param name="e">A ChatEventArgs object containing the
1715 data returned from the data server</param> 2779 data returned from the data server</param>
1716 </member> 2780 </member>
2781 <member name="F:OpenMetaverse.AgentManager.m_ChatLock">
2782 <summary>Thread sync lock object</summary>
2783 </member>
2784 <member name="F:OpenMetaverse.AgentManager.m_ScriptDialog">
2785 <summary>The event subscribers. null if no subcribers</summary>
2786 </member>
1717 <member name="M:OpenMetaverse.AgentManager.OnScriptDialog(OpenMetaverse.ScriptDialogEventArgs)"> 2787 <member name="M:OpenMetaverse.AgentManager.OnScriptDialog(OpenMetaverse.ScriptDialogEventArgs)">
1718 <summary>Raises the ScriptDialog event</summary> 2788 <summary>Raises the ScriptDialog event</summary>
1719 <param name="e">A SctriptDialogEventArgs object containing the 2789 <param name="e">A SctriptDialogEventArgs object containing the
1720 data returned from the data server</param> 2790 data returned from the data server</param>
1721 </member> 2791 </member>
2792 <member name="F:OpenMetaverse.AgentManager.m_ScriptDialogLock">
2793 <summary>Thread sync lock object</summary>
2794 </member>
2795 <member name="F:OpenMetaverse.AgentManager.m_ScriptQuestion">
2796 <summary>The event subscribers. null if no subcribers</summary>
2797 </member>
1722 <member name="M:OpenMetaverse.AgentManager.OnScriptQuestion(OpenMetaverse.ScriptQuestionEventArgs)"> 2798 <member name="M:OpenMetaverse.AgentManager.OnScriptQuestion(OpenMetaverse.ScriptQuestionEventArgs)">
1723 <summary>Raises the ScriptQuestion event</summary> 2799 <summary>Raises the ScriptQuestion event</summary>
1724 <param name="e">A ScriptQuestionEventArgs object containing the 2800 <param name="e">A ScriptQuestionEventArgs object containing the
1725 data returned from the data server</param> 2801 data returned from the data server</param>
1726 </member> 2802 </member>
2803 <member name="F:OpenMetaverse.AgentManager.m_ScriptQuestionLock">
2804 <summary>Thread sync lock object</summary>
2805 </member>
2806 <member name="F:OpenMetaverse.AgentManager.m_LoadURL">
2807 <summary>The event subscribers. null if no subcribers</summary>
2808 </member>
1727 <member name="M:OpenMetaverse.AgentManager.OnLoadURL(OpenMetaverse.LoadUrlEventArgs)"> 2809 <member name="M:OpenMetaverse.AgentManager.OnLoadURL(OpenMetaverse.LoadUrlEventArgs)">
1728 <summary>Raises the LoadURL event</summary> 2810 <summary>Raises the LoadURL event</summary>
1729 <param name="e">A LoadUrlEventArgs object containing the 2811 <param name="e">A LoadUrlEventArgs object containing the
1730 data returned from the data server</param> 2812 data returned from the data server</param>
1731 </member> 2813 </member>
2814 <member name="F:OpenMetaverse.AgentManager.m_LoadUrlLock">
2815 <summary>Thread sync lock object</summary>
2816 </member>
2817 <member name="F:OpenMetaverse.AgentManager.m_Balance">
2818 <summary>The event subscribers. null if no subcribers</summary>
2819 </member>
1732 <member name="M:OpenMetaverse.AgentManager.OnBalance(OpenMetaverse.BalanceEventArgs)"> 2820 <member name="M:OpenMetaverse.AgentManager.OnBalance(OpenMetaverse.BalanceEventArgs)">
1733 <summary>Raises the MoneyBalance event</summary> 2821 <summary>Raises the MoneyBalance event</summary>
1734 <param name="e">A BalanceEventArgs object containing the 2822 <param name="e">A BalanceEventArgs object containing the
1735 data returned from the data server</param> 2823 data returned from the data server</param>
1736 </member> 2824 </member>
2825 <member name="F:OpenMetaverse.AgentManager.m_BalanceLock">
2826 <summary>Thread sync lock object</summary>
2827 </member>
2828 <member name="F:OpenMetaverse.AgentManager.m_MoneyBalance">
2829 <summary>The event subscribers. null if no subcribers</summary>
2830 </member>
1737 <member name="M:OpenMetaverse.AgentManager.OnMoneyBalanceReply(OpenMetaverse.MoneyBalanceReplyEventArgs)"> 2831 <member name="M:OpenMetaverse.AgentManager.OnMoneyBalanceReply(OpenMetaverse.MoneyBalanceReplyEventArgs)">
1738 <summary>Raises the MoneyBalanceReply event</summary> 2832 <summary>Raises the MoneyBalanceReply event</summary>
1739 <param name="e">A MoneyBalanceReplyEventArgs object containing the 2833 <param name="e">A MoneyBalanceReplyEventArgs object containing the
1740 data returned from the data server</param> 2834 data returned from the data server</param>
1741 </member> 2835 </member>
2836 <member name="F:OpenMetaverse.AgentManager.m_MoneyBalanceReplyLock">
2837 <summary>Thread sync lock object</summary>
2838 </member>
2839 <member name="F:OpenMetaverse.AgentManager.m_InstantMessage">
2840 <summary>The event subscribers. null if no subcribers</summary>
2841 </member>
1742 <member name="M:OpenMetaverse.AgentManager.OnInstantMessage(OpenMetaverse.InstantMessageEventArgs)"> 2842 <member name="M:OpenMetaverse.AgentManager.OnInstantMessage(OpenMetaverse.InstantMessageEventArgs)">
1743 <summary>Raises the IM event</summary> 2843 <summary>Raises the IM event</summary>
1744 <param name="e">A InstantMessageEventArgs object containing the 2844 <param name="e">A InstantMessageEventArgs object containing the
1745 data returned from the data server</param> 2845 data returned from the data server</param>
1746 </member> 2846 </member>
2847 <member name="F:OpenMetaverse.AgentManager.m_InstantMessageLock">
2848 <summary>Thread sync lock object</summary>
2849 </member>
2850 <member name="F:OpenMetaverse.AgentManager.m_Teleport">
2851 <summary>The event subscribers. null if no subcribers</summary>
2852 </member>
1747 <member name="M:OpenMetaverse.AgentManager.OnTeleport(OpenMetaverse.TeleportEventArgs)"> 2853 <member name="M:OpenMetaverse.AgentManager.OnTeleport(OpenMetaverse.TeleportEventArgs)">
1748 <summary>Raises the TeleportProgress event</summary> 2854 <summary>Raises the TeleportProgress event</summary>
1749 <param name="e">A TeleportEventArgs object containing the 2855 <param name="e">A TeleportEventArgs object containing the
1750 data returned from the data server</param> 2856 data returned from the data server</param>
1751 </member> 2857 </member>
2858 <member name="F:OpenMetaverse.AgentManager.m_TeleportLock">
2859 <summary>Thread sync lock object</summary>
2860 </member>
2861 <member name="F:OpenMetaverse.AgentManager.m_AgentData">
2862 <summary>The event subscribers. null if no subcribers</summary>
2863 </member>
1752 <member name="M:OpenMetaverse.AgentManager.OnAgentData(OpenMetaverse.AgentDataReplyEventArgs)"> 2864 <member name="M:OpenMetaverse.AgentManager.OnAgentData(OpenMetaverse.AgentDataReplyEventArgs)">
1753 <summary>Raises the AgentDataReply event</summary> 2865 <summary>Raises the AgentDataReply event</summary>
1754 <param name="e">A AgentDataReplyEventArgs object containing the 2866 <param name="e">A AgentDataReplyEventArgs object containing the
1755 data returned from the data server</param> 2867 data returned from the data server</param>
1756 </member> 2868 </member>
2869 <member name="F:OpenMetaverse.AgentManager.m_AgentDataLock">
2870 <summary>Thread sync lock object</summary>
2871 </member>
2872 <member name="F:OpenMetaverse.AgentManager.m_AnimationsChanged">
2873 <summary>The event subscribers. null if no subcribers</summary>
2874 </member>
1757 <member name="M:OpenMetaverse.AgentManager.OnAnimationsChanged(OpenMetaverse.AnimationsChangedEventArgs)"> 2875 <member name="M:OpenMetaverse.AgentManager.OnAnimationsChanged(OpenMetaverse.AnimationsChangedEventArgs)">
1758 <summary>Raises the AnimationsChanged event</summary> 2876 <summary>Raises the AnimationsChanged event</summary>
1759 <param name="e">A AnimationsChangedEventArgs object containing the 2877 <param name="e">A AnimationsChangedEventArgs object containing the
1760 data returned from the data server</param> 2878 data returned from the data server</param>
1761 </member> 2879 </member>
2880 <member name="F:OpenMetaverse.AgentManager.m_AnimationsChangedLock">
2881 <summary>Thread sync lock object</summary>
2882 </member>
2883 <member name="F:OpenMetaverse.AgentManager.m_MeanCollision">
2884 <summary>The event subscribers. null if no subcribers</summary>
2885 </member>
1762 <member name="M:OpenMetaverse.AgentManager.OnMeanCollision(OpenMetaverse.MeanCollisionEventArgs)"> 2886 <member name="M:OpenMetaverse.AgentManager.OnMeanCollision(OpenMetaverse.MeanCollisionEventArgs)">
1763 <summary>Raises the MeanCollision event</summary> 2887 <summary>Raises the MeanCollision event</summary>
1764 <param name="e">A MeanCollisionEventArgs object containing the 2888 <param name="e">A MeanCollisionEventArgs object containing the
1765 data returned from the data server</param> 2889 data returned from the data server</param>
1766 </member> 2890 </member>
2891 <member name="F:OpenMetaverse.AgentManager.m_MeanCollisionLock">
2892 <summary>Thread sync lock object</summary>
2893 </member>
2894 <member name="F:OpenMetaverse.AgentManager.m_RegionCrossed">
2895 <summary>The event subscribers. null if no subcribers</summary>
2896 </member>
1767 <member name="M:OpenMetaverse.AgentManager.OnRegionCrossed(OpenMetaverse.RegionCrossedEventArgs)"> 2897 <member name="M:OpenMetaverse.AgentManager.OnRegionCrossed(OpenMetaverse.RegionCrossedEventArgs)">
1768 <summary>Raises the RegionCrossed event</summary> 2898 <summary>Raises the RegionCrossed event</summary>
1769 <param name="e">A RegionCrossedEventArgs object containing the 2899 <param name="e">A RegionCrossedEventArgs object containing the
1770 data returned from the data server</param> 2900 data returned from the data server</param>
1771 </member> 2901 </member>
2902 <member name="F:OpenMetaverse.AgentManager.m_RegionCrossedLock">
2903 <summary>Thread sync lock object</summary>
2904 </member>
2905 <member name="F:OpenMetaverse.AgentManager.m_GroupChatJoined">
2906 <summary>The event subscribers. null if no subcribers</summary>
2907 </member>
1772 <member name="M:OpenMetaverse.AgentManager.OnGroupChatJoined(OpenMetaverse.GroupChatJoinedEventArgs)"> 2908 <member name="M:OpenMetaverse.AgentManager.OnGroupChatJoined(OpenMetaverse.GroupChatJoinedEventArgs)">
1773 <summary>Raises the GroupChatJoined event</summary> 2909 <summary>Raises the GroupChatJoined event</summary>
1774 <param name="e">A GroupChatJoinedEventArgs object containing the 2910 <param name="e">A GroupChatJoinedEventArgs object containing the
1775 data returned from the data server</param> 2911 data returned from the data server</param>
1776 </member> 2912 </member>
2913 <member name="F:OpenMetaverse.AgentManager.m_GroupChatJoinedLock">
2914 <summary>Thread sync lock object</summary>
2915 </member>
2916 <member name="F:OpenMetaverse.AgentManager.m_AlertMessage">
2917 <summary>The event subscribers. null if no subcribers</summary>
2918 </member>
1777 <member name="M:OpenMetaverse.AgentManager.OnAlertMessage(OpenMetaverse.AlertMessageEventArgs)"> 2919 <member name="M:OpenMetaverse.AgentManager.OnAlertMessage(OpenMetaverse.AlertMessageEventArgs)">
1778 <summary>Raises the AlertMessage event</summary> 2920 <summary>Raises the AlertMessage event</summary>
1779 <param name="e">A AlertMessageEventArgs object containing the 2921 <param name="e">A AlertMessageEventArgs object containing the
1780 data returned from the data server</param> 2922 data returned from the data server</param>
1781 </member> 2923 </member>
2924 <member name="F:OpenMetaverse.AgentManager.m_AlertMessageLock">
2925 <summary>Thread sync lock object</summary>
2926 </member>
2927 <member name="F:OpenMetaverse.AgentManager.m_ScriptControl">
2928 <summary>The event subscribers. null if no subcribers</summary>
2929 </member>
1782 <member name="M:OpenMetaverse.AgentManager.OnScriptControlChange(OpenMetaverse.ScriptControlEventArgs)"> 2930 <member name="M:OpenMetaverse.AgentManager.OnScriptControlChange(OpenMetaverse.ScriptControlEventArgs)">
1783 <summary>Raises the ScriptControlChange event</summary> 2931 <summary>Raises the ScriptControlChange event</summary>
1784 <param name="e">A ScriptControlEventArgs object containing the 2932 <param name="e">A ScriptControlEventArgs object containing the
1785 data returned from the data server</param> 2933 data returned from the data server</param>
1786 </member> 2934 </member>
2935 <member name="F:OpenMetaverse.AgentManager.m_ScriptControlLock">
2936 <summary>Thread sync lock object</summary>
2937 </member>
2938 <member name="F:OpenMetaverse.AgentManager.m_CameraConstraint">
2939 <summary>The event subscribers. null if no subcribers</summary>
2940 </member>
1787 <member name="M:OpenMetaverse.AgentManager.OnCameraConstraint(OpenMetaverse.CameraConstraintEventArgs)"> 2941 <member name="M:OpenMetaverse.AgentManager.OnCameraConstraint(OpenMetaverse.CameraConstraintEventArgs)">
1788 <summary>Raises the CameraConstraint event</summary> 2942 <summary>Raises the CameraConstraint event</summary>
1789 <param name="e">A CameraConstraintEventArgs object containing the 2943 <param name="e">A CameraConstraintEventArgs object containing the
1790 data returned from the data server</param> 2944 data returned from the data server</param>
1791 </member> 2945 </member>
2946 <member name="F:OpenMetaverse.AgentManager.m_CameraConstraintLock">
2947 <summary>Thread sync lock object</summary>
2948 </member>
2949 <member name="F:OpenMetaverse.AgentManager.m_ScriptSensorReply">
2950 <summary>The event subscribers. null if no subcribers</summary>
2951 </member>
1792 <member name="M:OpenMetaverse.AgentManager.OnScriptSensorReply(OpenMetaverse.ScriptSensorReplyEventArgs)"> 2952 <member name="M:OpenMetaverse.AgentManager.OnScriptSensorReply(OpenMetaverse.ScriptSensorReplyEventArgs)">
1793 <summary>Raises the ScriptSensorReply event</summary> 2953 <summary>Raises the ScriptSensorReply event</summary>
1794 <param name="e">A ScriptSensorReplyEventArgs object containing the 2954 <param name="e">A ScriptSensorReplyEventArgs object containing the
1795 data returned from the data server</param> 2955 data returned from the data server</param>
1796 </member> 2956 </member>
2957 <member name="F:OpenMetaverse.AgentManager.m_ScriptSensorReplyLock">
2958 <summary>Thread sync lock object</summary>
2959 </member>
2960 <member name="F:OpenMetaverse.AgentManager.m_AvatarSitResponse">
2961 <summary>The event subscribers. null if no subcribers</summary>
2962 </member>
1797 <member name="M:OpenMetaverse.AgentManager.OnAvatarSitResponse(OpenMetaverse.AvatarSitResponseEventArgs)"> 2963 <member name="M:OpenMetaverse.AgentManager.OnAvatarSitResponse(OpenMetaverse.AvatarSitResponseEventArgs)">
1798 <summary>Raises the AvatarSitResponse event</summary> 2964 <summary>Raises the AvatarSitResponse event</summary>
1799 <param name="e">A AvatarSitResponseEventArgs object containing the 2965 <param name="e">A AvatarSitResponseEventArgs object containing the
1800 data returned from the data server</param> 2966 data returned from the data server</param>
1801 </member> 2967 </member>
2968 <member name="F:OpenMetaverse.AgentManager.m_AvatarSitResponseLock">
2969 <summary>Thread sync lock object</summary>
2970 </member>
2971 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberAdded">
2972 <summary>The event subscribers. null if no subcribers</summary>
2973 </member>
1802 <member name="M:OpenMetaverse.AgentManager.OnChatSessionMemberAdded(OpenMetaverse.ChatSessionMemberAddedEventArgs)"> 2974 <member name="M:OpenMetaverse.AgentManager.OnChatSessionMemberAdded(OpenMetaverse.ChatSessionMemberAddedEventArgs)">
1803 <summary>Raises the ChatSessionMemberAdded event</summary> 2975 <summary>Raises the ChatSessionMemberAdded event</summary>
1804 <param name="e">A ChatSessionMemberAddedEventArgs object containing the 2976 <param name="e">A ChatSessionMemberAddedEventArgs object containing the
1805 data returned from the data server</param> 2977 data returned from the data server</param>
1806 </member> 2978 </member>
2979 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberAddedLock">
2980 <summary>Thread sync lock object</summary>
2981 </member>
2982 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberLeft">
2983 <summary>The event subscribers. null if no subcribers</summary>
2984 </member>
1807 <member name="M:OpenMetaverse.AgentManager.OnChatSessionMemberLeft(OpenMetaverse.ChatSessionMemberLeftEventArgs)"> 2985 <member name="M:OpenMetaverse.AgentManager.OnChatSessionMemberLeft(OpenMetaverse.ChatSessionMemberLeftEventArgs)">
1808 <summary>Raises the ChatSessionMemberLeft event</summary> 2986 <summary>Raises the ChatSessionMemberLeft event</summary>
1809 <param name="e">A ChatSessionMemberLeftEventArgs object containing the 2987 <param name="e">A ChatSessionMemberLeftEventArgs object containing the
1810 data returned from the data server</param> 2988 data returned from the data server</param>
1811 </member> 2989 </member>
2990 <member name="F:OpenMetaverse.AgentManager.m_ChatSessionMemberLeftLock">
2991 <summary>Thread sync lock object</summary>
2992 </member>
2993 <member name="F:OpenMetaverse.AgentManager.m_SetDisplayNameReply">
2994 <summary>The event subscribers, null of no subscribers</summary>
2995 </member>
1812 <member name="M:OpenMetaverse.AgentManager.OnSetDisplayNameReply(OpenMetaverse.SetDisplayNameReplyEventArgs)"> 2996 <member name="M:OpenMetaverse.AgentManager.OnSetDisplayNameReply(OpenMetaverse.SetDisplayNameReplyEventArgs)">
1813 <summary>Raises the SetDisplayNameReply Event</summary> 2997 <summary>Raises the SetDisplayNameReply Event</summary>
1814 <param name="e">A SetDisplayNameReplyEventArgs object containing 2998 <param name="e">A SetDisplayNameReplyEventArgs object containing
1815 the data sent from the simulator</param> 2999 the data sent from the simulator</param>
3000 </member>
3001 <member name="F:OpenMetaverse.AgentManager.m_SetDisplayNameReplyLock">
3002 <summary>Thread sync lock object</summary>
3003 </member>
3004 <member name="F:OpenMetaverse.AgentManager.m_MuteListUpdated">
3005 <summary>The event subscribers. null if no subcribers</summary>
1816 </member> 3006 </member>
1817 <member name="M:OpenMetaverse.AgentManager.OnMuteListUpdated(System.EventArgs)"> 3007 <member name="M:OpenMetaverse.AgentManager.OnMuteListUpdated(System.EventArgs)">
1818 <summary>Raises the MuteListUpdated event</summary> 3008 <summary>Raises the MuteListUpdated event</summary>
1819 <param name="e">A EventArgs object containing the 3009 <param name="e">A EventArgs object containing the
1820 data returned from the data server</param> 3010 data returned from the data server</param>
1821 </member> 3011 </member>
3012 <member name="F:OpenMetaverse.AgentManager.m_MuteListUpdatedLock">
3013 <summary>Thread sync lock object</summary>
3014 </member>
3015 <member name="F:OpenMetaverse.AgentManager.Client">
3016 <summary>Reference to the GridClient instance</summary>
3017 </member>
3018 <member name="F:OpenMetaverse.AgentManager.Movement">
3019 <summary>Used for movement and camera tracking</summary>
3020 </member>
3021 <member name="F:OpenMetaverse.AgentManager.SignaledAnimations">
3022 <summary>Currently playing animations for the agent. Can be used to
3023 check the current movement status such as walking, hovering, aiming,
3024 etc. by checking against system animations found in the Animations class</summary>
3025 </member>
3026 <member name="F:OpenMetaverse.AgentManager.GroupChatSessions">
3027 <summary>Dictionary containing current Group Chat sessions and members</summary>
3028 </member>
3029 <member name="F:OpenMetaverse.AgentManager.MuteList">
3030 <summary>Dictionary containing mute list keyead on mute name and key</summary>
3031 </member>
3032 <member name="F:OpenMetaverse.AgentManager.AgentStateStatus">
3033 <summary>Various abilities and preferences sent by the grid</summary>
3034 </member>
3035 <member name="M:OpenMetaverse.AgentManager.#ctor(OpenMetaverse.GridClient)">
3036 <summary>
3037 Constructor, setup callbacks for packets related to our avatar
3038 </summary>
3039 <param name="client">A reference to the <seealso cref="T:OpenMetaverse.GridClient"/> Class</param>
3040 </member>
1822 <member name="M:OpenMetaverse.AgentManager.Chat(System.String,System.Int32,OpenMetaverse.ChatType)"> 3041 <member name="M:OpenMetaverse.AgentManager.Chat(System.String,System.Int32,OpenMetaverse.ChatType)">
1823 <summary> 3042 <summary>
1824 Send a text message from the Agent to the Simulator 3043 Send a text message from the Agent to the Simulator
1825 </summary> 3044 </summary>
1826 <param name="message">A <see cref="T:System.String" /> containing the message</param> 3045 <param name="message">A <see cref="T:System.String"/> containing the message</param>
1827 <param name="channel">The channel to send the message on, 0 is the public channel. Channels above 0 3046 <param name="channel">The channel to send the message on, 0 is the public channel. Channels above 0
1828 can be used however only scripts listening on the specified channel will see the message</param> 3047 can be used however only scripts listening on the specified channel will see the message</param>
1829 <param name="type">Denotes the type of message being sent, shout, whisper, etc.</param> 3048 <param name="type">Denotes the type of message being sent, shout, whisper, etc.</param>
@@ -1837,15 +3056,15 @@
1837 <summary> 3056 <summary>
1838 Send an Instant Message to another Avatar 3057 Send an Instant Message to another Avatar
1839 </summary> 3058 </summary>
1840 <param name="target">The recipients <see cref="T:OpenMetaverse.UUID" /></param> 3059 <param name="target">The recipients <see cref="T:OpenMetaverse.UUID"/></param>
1841 <param name="message">A <see cref="T:System.String" /> containing the message to send</param> 3060 <param name="message">A <see cref="T:System.String"/> containing the message to send</param>
1842 </member> 3061 </member>
1843 <member name="M:OpenMetaverse.AgentManager.InstantMessage(OpenMetaverse.UUID,System.String,OpenMetaverse.UUID)"> 3062 <member name="M:OpenMetaverse.AgentManager.InstantMessage(OpenMetaverse.UUID,System.String,OpenMetaverse.UUID)">
1844 <summary> 3063 <summary>
1845 Send an Instant Message to an existing group chat or conference chat 3064 Send an Instant Message to an existing group chat or conference chat
1846 </summary> 3065 </summary>
1847 <param name="target">The recipients <see cref="T:OpenMetaverse.UUID" /></param> 3066 <param name="target">The recipients <see cref="T:OpenMetaverse.UUID"/></param>
1848 <param name="message">A <see cref="T:System.String" /> containing the message to send</param> 3067 <param name="message">A <see cref="T:System.String"/> containing the message to send</param>
1849 <param name="imSessionID">IM session ID (to differentiate between IM windows)</param> 3068 <param name="imSessionID">IM session ID (to differentiate between IM windows)</param>
1850 </member> 3069 </member>
1851 <member name="M:OpenMetaverse.AgentManager.InstantMessage(System.String,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID[])"> 3070 <member name="M:OpenMetaverse.AgentManager.InstantMessage(System.String,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID[])">
@@ -1877,8 +3096,7 @@
1877 <summary> 3096 <summary>
1878 Send an Instant Message to a group 3097 Send an Instant Message to a group
1879 </summary> 3098 </summary>
1880 <param name="groupID"> 3099 <param name="groupID"><seealso cref="T:OpenMetaverse.UUID"/> of the group to send message to</param>
1881 <seealso cref="T:OpenMetaverse.UUID" /> of the group to send message to</param>
1882 <param name="message">Text Message being sent.</param> 3100 <param name="message">Text Message being sent.</param>
1883 </member> 3101 </member>
1884 <member name="M:OpenMetaverse.AgentManager.InstantMessageGroup(System.String,OpenMetaverse.UUID,System.String)"> 3102 <member name="M:OpenMetaverse.AgentManager.InstantMessageGroup(System.String,OpenMetaverse.UUID,System.String)">
@@ -1886,96 +3104,84 @@
1886 Send an Instant Message to a group the agent is a member of 3104 Send an Instant Message to a group the agent is a member of
1887 </summary> 3105 </summary>
1888 <param name="fromName">The name this IM will show up as being from</param> 3106 <param name="fromName">The name this IM will show up as being from</param>
1889 <param name="groupID"> 3107 <param name="groupID"><seealso cref="T:OpenMetaverse.UUID"/> of the group to send message to</param>
1890 <seealso cref="T:OpenMetaverse.UUID" /> of the group to send message to</param>
1891 <param name="message">Text message being sent</param> 3108 <param name="message">Text message being sent</param>
1892 </member> 3109 </member>
1893 <member name="M:OpenMetaverse.AgentManager.RequestJoinGroupChat(OpenMetaverse.UUID)"> 3110 <member name="M:OpenMetaverse.AgentManager.RequestJoinGroupChat(OpenMetaverse.UUID)">
1894 <summary> 3111 <summary>
1895 Send a request to join a group chat session 3112 Send a request to join a group chat session
1896 </summary> 3113 </summary>
1897 <param name="groupID"> 3114 <param name="groupID"><seealso cref="T:OpenMetaverse.UUID"/> of Group to leave</param>
1898 <seealso cref="T:OpenMetaverse.UUID" /> of Group to leave</param>
1899 </member> 3115 </member>
1900 <member name="M:OpenMetaverse.AgentManager.RequestLeaveGroupChat(OpenMetaverse.UUID)"> 3116 <member name="M:OpenMetaverse.AgentManager.RequestLeaveGroupChat(OpenMetaverse.UUID)">
1901 <summary> 3117 <summary>
1902 Exit a group chat session. This will stop further Group chat messages 3118 Exit a group chat session. This will stop further Group chat messages
1903 from being sent until session is rejoined. 3119 from being sent until session is rejoined.
1904 </summary> 3120 </summary>
1905 <param name="groupID"> 3121 <param name="groupID"><seealso cref="T:OpenMetaverse.UUID"/> of Group chat session to leave</param>
1906 <seealso cref="T:OpenMetaverse.UUID" /> of Group chat session to leave</param>
1907 </member> 3122 </member>
1908 <member name="M:OpenMetaverse.AgentManager.ReplyToScriptDialog(System.Int32,System.Int32,System.String,OpenMetaverse.UUID)"> 3123 <member name="M:OpenMetaverse.AgentManager.ReplyToScriptDialog(System.Int32,System.Int32,System.String,OpenMetaverse.UUID)">
1909 <summary> 3124 <summary>
1910 Reply to script dialog questions. 3125 Reply to script dialog questions.
1911 </summary> 3126 </summary>
1912 <param name="channel">Channel initial request came on</param> 3127 <param name="channel">Channel initial request came on</param>
1913 <param name="buttonIndex">Index of button you're "clicking"</param> 3128 <param name="buttonIndex">Index of button you're "clicking"</param>
1914 <param name="buttonlabel">Label of button you're "clicking"</param> 3129 <param name="buttonlabel">Label of button you're "clicking"</param>
1915 <param name="objectID"> 3130 <param name="objectID"><seealso cref="T:OpenMetaverse.UUID"/> of Object that sent the dialog request</param>
1916 <seealso cref="T:OpenMetaverse.UUID" /> of Object that sent the dialog request</param> 3131 <seealso cref="M:OpenMetaverse.AgentManager.OnScriptDialog(OpenMetaverse.ScriptDialogEventArgs)"/>
1917 <seealso cref="M:OpenMetaverse.AgentManager.OnScriptDialog(OpenMetaverse.ScriptDialogEventArgs)" />
1918 </member> 3132 </member>
1919 <member name="M:OpenMetaverse.AgentManager.ChatterBoxAcceptInvite(OpenMetaverse.UUID)"> 3133 <member name="M:OpenMetaverse.AgentManager.ChatterBoxAcceptInvite(OpenMetaverse.UUID)">
1920 <summary> 3134 <summary>
1921 Accept invite for to a chatterbox session 3135 Accept invite for to a chatterbox session
1922 </summary> 3136 </summary>
1923 <param name="session_id"> 3137 <param name="session_id"><seealso cref="T:OpenMetaverse.UUID"/> of session to accept invite to</param>
1924 <seealso cref="T:OpenMetaverse.UUID" /> of session to accept invite to</param>
1925 </member> 3138 </member>
1926 <member name="M:OpenMetaverse.AgentManager.StartIMConference(System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.UUID)"> 3139 <member name="M:OpenMetaverse.AgentManager.StartIMConference(System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.UUID)">
1927 <summary> 3140 <summary>
1928 Start a friends conference 3141 Start a friends conference
1929 </summary> 3142 </summary>
1930 <param name="participants"> 3143 <param name="participants"><seealso cref="T:OpenMetaverse.UUID"/> List of UUIDs to start a conference with</param>
1931 <seealso cref="T:OpenMetaverse.UUID" /> List of UUIDs to start a conference with</param> 3144 <param name="tmp_session_id">the temportary session ID returned in the <see cref="!:OnJoinedGroupChat"/> callback&gt;</param>
1932 <param name="tmp_session_id">the temportary session ID returned in the <see cref="!:OnJoinedGroupChat" /> callback&gt;</param>
1933 </member> 3145 </member>
1934 <member name="M:OpenMetaverse.AgentManager.PointAtEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.PointAtType,OpenMetaverse.UUID)"> 3146 <member name="M:OpenMetaverse.AgentManager.PointAtEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.PointAtType,OpenMetaverse.UUID)">
1935 <summary> 3147 <summary>
1936 Start a particle stream between an agent and an object 3148 Start a particle stream between an agent and an object
1937 </summary> 3149 </summary>
1938 <param name="sourceAvatar"> 3150 <param name="sourceAvatar"><seealso cref="T:OpenMetaverse.UUID"/> Key of the source agent</param>
1939 <seealso cref="T:OpenMetaverse.UUID" /> Key of the source agent</param> 3151 <param name="targetObject"><seealso cref="T:OpenMetaverse.UUID"/> Key of the target object</param>
1940 <param name="targetObject"> 3152 <param name="globalOffset"></param>
1941 <seealso cref="T:OpenMetaverse.UUID" /> Key of the target object</param> 3153 <param name="type">The type from the <seealso cref="T:PointAtType"/> enum</param>
1942 <param name="globalOffset"> 3154 <param name="effectID">A unique <seealso cref="T:OpenMetaverse.UUID"/> for this effect</param>
1943 </param>
1944 <param name="type">The type from the <seealso cref="T:PointAtType" /> enum</param>
1945 <param name="effectID">A unique <seealso cref="T:OpenMetaverse.UUID" /> for this effect</param>
1946 </member> 3155 </member>
1947 <member name="M:OpenMetaverse.AgentManager.LookAtEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.LookAtType,OpenMetaverse.UUID)"> 3156 <member name="M:OpenMetaverse.AgentManager.LookAtEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.LookAtType,OpenMetaverse.UUID)">
1948 <summary> 3157 <summary>
1949 Start a particle stream between an agent and an object 3158 Start a particle stream between an agent and an object
1950 </summary> 3159 </summary>
1951 <param name="sourceAvatar"> 3160 <param name="sourceAvatar"><seealso cref="T:OpenMetaverse.UUID"/> Key of the source agent</param>
1952 <seealso cref="T:OpenMetaverse.UUID" /> Key of the source agent</param> 3161 <param name="targetObject"><seealso cref="T:OpenMetaverse.UUID"/> Key of the target object</param>
1953 <param name="targetObject"> 3162 <param name="globalOffset">A <seealso cref="T:OpenMetaverse.Vector3d"/> representing the beams offset from the source</param>
1954 <seealso cref="T:OpenMetaverse.UUID" /> Key of the target object</param> 3163 <param name="type">A <seealso cref="T:PointAtType"/> which sets the avatars lookat animation</param>
1955 <param name="globalOffset">A <seealso cref="T:OpenMetaverse.Vector3d" /> representing the beams offset from the source</param> 3164 <param name="effectID"><seealso cref="T:OpenMetaverse.UUID"/> of the Effect</param>
1956 <param name="type">A <seealso cref="T:PointAtType" /> which sets the avatars lookat animation</param>
1957 <param name="effectID">
1958 <seealso cref="T:OpenMetaverse.UUID" /> of the Effect</param>
1959 </member> 3165 </member>
1960 <member name="M:OpenMetaverse.AgentManager.BeamEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.Color4,System.Single,OpenMetaverse.UUID)"> 3166 <member name="M:OpenMetaverse.AgentManager.BeamEffect(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3d,OpenMetaverse.Color4,System.Single,OpenMetaverse.UUID)">
1961 <summary> 3167 <summary>
1962 Create a particle beam between an avatar and an primitive 3168 Create a particle beam between an avatar and an primitive
1963 </summary> 3169 </summary>
1964 <param name="sourceAvatar">The ID of source avatar</param> 3170 <param name="sourceAvatar">The ID of source avatar</param>
1965 <param name="targetObject">The ID of the target primitive</param> 3171 <param name="targetObject">The ID of the target primitive</param>
1966 <param name="globalOffset">global offset</param> 3172 <param name="globalOffset">global offset</param>
1967 <param name="color">A <see cref="T:OpenMetaverse.Color4" /> object containing the combined red, green, blue and alpha 3173 <param name="color">A <see cref="T:OpenMetaverse.Color4"/> object containing the combined red, green, blue and alpha
1968 color values of particle beam</param> 3174 color values of particle beam</param>
1969 <param name="duration">a float representing the duration the parcicle beam will last</param> 3175 <param name="duration">a float representing the duration the parcicle beam will last</param>
1970 <param name="effectID">A Unique ID for the beam</param> 3176 <param name="effectID">A Unique ID for the beam</param>
1971 <seealso cref="T:OpenMetaverse.Packets.ViewerEffectPacket" /> 3177 <seealso cref="T:OpenMetaverse.Packets.ViewerEffectPacket"/>
1972 </member> 3178 </member>
1973 <member name="M:OpenMetaverse.AgentManager.SphereEffect(OpenMetaverse.Vector3d,OpenMetaverse.Color4,System.Single,OpenMetaverse.UUID)"> 3179 <member name="M:OpenMetaverse.AgentManager.SphereEffect(OpenMetaverse.Vector3d,OpenMetaverse.Color4,System.Single,OpenMetaverse.UUID)">
1974 <summary> 3180 <summary>
1975 Create a particle swirl around a target position using a <seealso cref="T:OpenMetaverse.Packets.ViewerEffectPacket" /> packet 3181 Create a particle swirl around a target position using a <seealso cref="T:OpenMetaverse.Packets.ViewerEffectPacket"/> packet
1976 </summary> 3182 </summary>
1977 <param name="globalOffset">global offset</param> 3183 <param name="globalOffset">global offset</param>
1978 <param name="color">A <see cref="T:OpenMetaverse.Color4" /> object containing the combined red, green, blue and alpha 3184 <param name="color">A <see cref="T:OpenMetaverse.Color4"/> object containing the combined red, green, blue and alpha
1979 color values of particle beam</param> 3185 color values of particle beam</param>
1980 <param name="duration">a float representing the duration the parcicle beam will last</param> 3186 <param name="duration">a float representing the duration the parcicle beam will last</param>
1981 <param name="effectID">A Unique ID for the beam</param> 3187 <param name="effectID">A Unique ID for the beam</param>
@@ -1984,13 +3190,12 @@
1984 <summary> 3190 <summary>
1985 Sends a request to sit on the specified object 3191 Sends a request to sit on the specified object
1986 </summary> 3192 </summary>
1987 <param name="targetID"> 3193 <param name="targetID"><seealso cref="T:OpenMetaverse.UUID"/> of the object to sit on</param>
1988 <seealso cref="T:OpenMetaverse.UUID" /> of the object to sit on</param>
1989 <param name="offset">Sit at offset</param> 3194 <param name="offset">Sit at offset</param>
1990 </member> 3195 </member>
1991 <member name="M:OpenMetaverse.AgentManager.Sit"> 3196 <member name="M:OpenMetaverse.AgentManager.Sit">
1992 <summary> 3197 <summary>
1993 Follows a call to <seealso cref="M:OpenMetaverse.AgentManager.RequestSit(OpenMetaverse.UUID,OpenMetaverse.Vector3)" /> to actually sit on the object 3198 Follows a call to <seealso cref="M:OpenMetaverse.AgentManager.RequestSit(OpenMetaverse.UUID,OpenMetaverse.Vector3)"/> to actually sit on the object
1994 </summary> 3199 </summary>
1995 </member> 3200 </member>
1996 <member name="M:OpenMetaverse.AgentManager.Stand"> 3201 <member name="M:OpenMetaverse.AgentManager.Stand">
@@ -2057,15 +3262,14 @@
2057 Grabs an object 3262 Grabs an object
2058 </summary> 3263 </summary>
2059 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param> 3264 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param>
2060 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives" /> 3265 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives"/>
2061 </member> 3266 </member>
2062 <member name="M:OpenMetaverse.AgentManager.Grab(System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 3267 <member name="M:OpenMetaverse.AgentManager.Grab(System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
2063 <summary> 3268 <summary>
2064 Overload: Grab a simulated object 3269 Overload: Grab a simulated object
2065 </summary> 3270 </summary>
2066 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param> 3271 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param>
2067 <param name="grabOffset"> 3272 <param name="grabOffset"></param>
2068 </param>
2069 <param name="uvCoord">The texture coordinates to grab</param> 3273 <param name="uvCoord">The texture coordinates to grab</param>
2070 <param name="stCoord">The surface coordinates to grab</param> 3274 <param name="stCoord">The surface coordinates to grab</param>
2071 <param name="faceIndex">The face of the position to grab</param> 3275 <param name="faceIndex">The face of the position to grab</param>
@@ -2078,19 +3282,16 @@
2078 <summary> 3282 <summary>
2079 Drag an object 3283 Drag an object
2080 </summary> 3284 </summary>
2081 <param name="objectID"> 3285 <param name="objectID"><seealso cref="T:OpenMetaverse.UUID"/> of the object to drag</param>
2082 <seealso cref="T:OpenMetaverse.UUID" /> of the object to drag</param>
2083 <param name="grabPosition">Drag target in region coordinates</param> 3286 <param name="grabPosition">Drag target in region coordinates</param>
2084 </member> 3287 </member>
2085 <member name="M:OpenMetaverse.AgentManager.GrabUpdate(OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 3288 <member name="M:OpenMetaverse.AgentManager.GrabUpdate(OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
2086 <summary> 3289 <summary>
2087 Overload: Drag an object 3290 Overload: Drag an object
2088 </summary> 3291 </summary>
2089 <param name="objectID"> 3292 <param name="objectID"><seealso cref="T:OpenMetaverse.UUID"/> of the object to drag</param>
2090 <seealso cref="T:OpenMetaverse.UUID" /> of the object to drag</param>
2091 <param name="grabPosition">Drag target in region coordinates</param> 3293 <param name="grabPosition">Drag target in region coordinates</param>
2092 <param name="grabOffset"> 3294 <param name="grabOffset"></param>
2093 </param>
2094 <param name="uvCoord">The texture coordinates to grab</param> 3295 <param name="uvCoord">The texture coordinates to grab</param>
2095 <param name="stCoord">The surface coordinates to grab</param> 3296 <param name="stCoord">The surface coordinates to grab</param>
2096 <param name="faceIndex">The face of the position to grab</param> 3297 <param name="faceIndex">The face of the position to grab</param>
@@ -2104,9 +3305,9 @@
2104 Release a grabbed object 3305 Release a grabbed object
2105 </summary> 3306 </summary>
2106 <param name="objectLocalID">The Objects Simulator Local ID</param> 3307 <param name="objectLocalID">The Objects Simulator Local ID</param>
2107 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives" /> 3308 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives"/>
2108 <seealso cref="M:OpenMetaverse.AgentManager.Grab(System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)" /> 3309 <seealso cref="M:OpenMetaverse.AgentManager.Grab(System.UInt32)"/>
2109 <seealso cref="M:OpenMetaverse.AgentManager.GrabUpdate(OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)" /> 3310 <seealso cref="M:OpenMetaverse.AgentManager.GrabUpdate(OpenMetaverse.UUID,OpenMetaverse.Vector3)"/>
2110 </member> 3311 </member>
2111 <member name="M:OpenMetaverse.AgentManager.DeGrab(System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 3312 <member name="M:OpenMetaverse.AgentManager.DeGrab(System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
2112 <summary> 3313 <summary>
@@ -2126,7 +3327,7 @@
2126 Touches an object 3327 Touches an object
2127 </summary> 3328 </summary>
2128 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param> 3329 <param name="objectLocalID">an unsigned integer of the objects ID within the simulator</param>
2129 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives" /> 3330 <seealso cref="F:OpenMetaverse.Simulator.ObjectsPrimitives"/>
2130 </member> 3331 </member>
2131 <member name="M:OpenMetaverse.AgentManager.RequestBalance"> 3332 <member name="M:OpenMetaverse.AgentManager.RequestBalance">
2132 <summary> 3333 <summary>
@@ -2153,7 +3354,7 @@
2153 <summary> 3354 <summary>
2154 Give L$ to an object 3355 Give L$ to an object
2155 </summary> 3356 </summary>
2156 <param name="target">object <seealso cref="T:OpenMetaverse.UUID" /> to give money to</param> 3357 <param name="target">object <seealso cref="T:OpenMetaverse.UUID"/> to give money to</param>
2157 <param name="amount">amount of L$ to give</param> 3358 <param name="amount">amount of L$ to give</param>
2158 <param name="objectName">name of object</param> 3359 <param name="objectName">name of object</param>
2159 </member> 3360 </member>
@@ -2161,14 +3362,14 @@
2161 <summary> 3362 <summary>
2162 Give L$ to a group 3363 Give L$ to a group
2163 </summary> 3364 </summary>
2164 <param name="target">group <seealso cref="T:OpenMetaverse.UUID" /> to give money to</param> 3365 <param name="target">group <seealso cref="T:OpenMetaverse.UUID"/> to give money to</param>
2165 <param name="amount">amount of L$ to give</param> 3366 <param name="amount">amount of L$ to give</param>
2166 </member> 3367 </member>
2167 <member name="M:OpenMetaverse.AgentManager.GiveGroupMoney(OpenMetaverse.UUID,System.Int32,System.String)"> 3368 <member name="M:OpenMetaverse.AgentManager.GiveGroupMoney(OpenMetaverse.UUID,System.Int32,System.String)">
2168 <summary> 3369 <summary>
2169 Give L$ to a group 3370 Give L$ to a group
2170 </summary> 3371 </summary>
2171 <param name="target">group <seealso cref="T:OpenMetaverse.UUID" /> to give money to</param> 3372 <param name="target">group <seealso cref="T:OpenMetaverse.UUID"/> to give money to</param>
2172 <param name="amount">amount of L$ to give</param> 3373 <param name="amount">amount of L$ to give</param>
2173 <param name="description">description of transaction</param> 3374 <param name="description">description of transaction</param>
2174 </member> 3375 </member>
@@ -2198,33 +3399,33 @@
2198 <summary> 3399 <summary>
2199 Plays a gesture 3400 Plays a gesture
2200 </summary> 3401 </summary>
2201 <param name="gestureID">Asset <seealso cref="T:OpenMetaverse.UUID" /> of the gesture</param> 3402 <param name="gestureID">Asset <seealso cref="T:OpenMetaverse.UUID"/> of the gesture</param>
2202 </member> 3403 </member>
2203 <member name="M:OpenMetaverse.AgentManager.ActivateGesture(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 3404 <member name="M:OpenMetaverse.AgentManager.ActivateGesture(OpenMetaverse.UUID,OpenMetaverse.UUID)">
2204 <summary> 3405 <summary>
2205 Mark gesture active 3406 Mark gesture active
2206 </summary> 3407 </summary>
2207 <param name="invID">Inventory <seealso cref="T:OpenMetaverse.UUID" /> of the gesture</param> 3408 <param name="invID">Inventory <seealso cref="T:OpenMetaverse.UUID"/> of the gesture</param>
2208 <param name="assetID">Asset <seealso cref="T:OpenMetaverse.UUID" /> of the gesture</param> 3409 <param name="assetID">Asset <seealso cref="T:OpenMetaverse.UUID"/> of the gesture</param>
2209 </member> 3410 </member>
2210 <member name="M:OpenMetaverse.AgentManager.DeactivateGesture(OpenMetaverse.UUID)"> 3411 <member name="M:OpenMetaverse.AgentManager.DeactivateGesture(OpenMetaverse.UUID)">
2211 <summary> 3412 <summary>
2212 Mark gesture inactive 3413 Mark gesture inactive
2213 </summary> 3414 </summary>
2214 <param name="invID">Inventory <seealso cref="T:OpenMetaverse.UUID" /> of the gesture</param> 3415 <param name="invID">Inventory <seealso cref="T:OpenMetaverse.UUID"/> of the gesture</param>
2215 </member> 3416 </member>
2216 <member name="M:OpenMetaverse.AgentManager.AnimationStart(OpenMetaverse.UUID,System.Boolean)"> 3417 <member name="M:OpenMetaverse.AgentManager.AnimationStart(OpenMetaverse.UUID,System.Boolean)">
2217 <summary> 3418 <summary>
2218 Send an AgentAnimation packet that toggles a single animation on 3419 Send an AgentAnimation packet that toggles a single animation on
2219 </summary> 3420 </summary>
2220 <param name="animation">The <seealso cref="T:OpenMetaverse.UUID" /> of the animation to start playing</param> 3421 <param name="animation">The <seealso cref="T:OpenMetaverse.UUID"/> of the animation to start playing</param>
2221 <param name="reliable">Whether to ensure delivery of this packet or not</param> 3422 <param name="reliable">Whether to ensure delivery of this packet or not</param>
2222 </member> 3423 </member>
2223 <member name="M:OpenMetaverse.AgentManager.AnimationStop(OpenMetaverse.UUID,System.Boolean)"> 3424 <member name="M:OpenMetaverse.AgentManager.AnimationStop(OpenMetaverse.UUID,System.Boolean)">
2224 <summary> 3425 <summary>
2225 Send an AgentAnimation packet that toggles a single animation off 3426 Send an AgentAnimation packet that toggles a single animation off
2226 </summary> 3427 </summary>
2227 <param name="animation">The <seealso cref="T:OpenMetaverse.UUID" /> of a 3428 <param name="animation">The <seealso cref="T:OpenMetaverse.UUID"/> of a
2228 currently playing animation to stop playing</param> 3429 currently playing animation to stop playing</param>
2229 <param name="reliable">Whether to ensure delivery of this packet or not</param> 3430 <param name="reliable">Whether to ensure delivery of this packet or not</param>
2230 </member> 3431 </member>
@@ -2232,7 +3433,7 @@
2232 <summary> 3433 <summary>
2233 Send an AgentAnimation packet that will toggle animations on or off 3434 Send an AgentAnimation packet that will toggle animations on or off
2234 </summary> 3435 </summary>
2235 <param name="animations">A list of animation <seealso cref="T:OpenMetaverse.UUID" />s, and whether to 3436 <param name="animations">A list of animation <seealso cref="T:OpenMetaverse.UUID"/>s, and whether to
2236 turn that animation on or off</param> 3437 turn that animation on or off</param>
2237 <param name="reliable">Whether to ensure delivery of this packet or not</param> 3438 <param name="reliable">Whether to ensure delivery of this packet or not</param>
2238 </member> 3439 </member>
@@ -2246,8 +3447,7 @@
2246 <summary> 3447 <summary>
2247 Teleport agent to a landmark 3448 Teleport agent to a landmark
2248 </summary> 3449 </summary>
2249 <param name="landmark"> 3450 <param name="landmark"><seealso cref="T:OpenMetaverse.UUID"/> of the landmark to teleport agent to</param>
2250 <seealso cref="T:OpenMetaverse.UUID" /> of the landmark to teleport agent to</param>
2251 <returns>true on success, false on failure</returns> 3451 <returns>true on success, false on failure</returns>
2252 </member> 3452 </member>
2253 <member name="M:OpenMetaverse.AgentManager.Teleport(System.String,OpenMetaverse.Vector3)"> 3453 <member name="M:OpenMetaverse.AgentManager.Teleport(System.String,OpenMetaverse.Vector3)">
@@ -2276,8 +3476,7 @@
2276 Teleport agent to another region 3476 Teleport agent to another region
2277 </summary> 3477 </summary>
2278 <param name="regionHandle">handle of region to teleport agent to</param> 3478 <param name="regionHandle">handle of region to teleport agent to</param>
2279 <param name="position"> 3479 <param name="position"><seealso cref="T:OpenMetaverse.Vector3"/> position in destination sim to teleport to</param>
2280 <seealso cref="T:OpenMetaverse.Vector3" /> position in destination sim to teleport to</param>
2281 <returns>true on success, false on failure</returns> 3480 <returns>true on success, false on failure</returns>
2282 <remarks>This call is blocking</remarks> 3481 <remarks>This call is blocking</remarks>
2283 </member> 3482 </member>
@@ -2286,10 +3485,8 @@
2286 Teleport agent to another region 3485 Teleport agent to another region
2287 </summary> 3486 </summary>
2288 <param name="regionHandle">handle of region to teleport agent to</param> 3487 <param name="regionHandle">handle of region to teleport agent to</param>
2289 <param name="position"> 3488 <param name="position"><seealso cref="T:OpenMetaverse.Vector3"/> position in destination sim to teleport to</param>
2290 <seealso cref="T:OpenMetaverse.Vector3" /> position in destination sim to teleport to</param> 3489 <param name="lookAt"><seealso cref="T:OpenMetaverse.Vector3"/> direction in destination sim agent will look at</param>
2291 <param name="lookAt">
2292 <seealso cref="T:OpenMetaverse.Vector3" /> direction in destination sim agent will look at</param>
2293 <returns>true on success, false on failure</returns> 3490 <returns>true on success, false on failure</returns>
2294 <remarks>This call is blocking</remarks> 3491 <remarks>This call is blocking</remarks>
2295 </member> 3492 </member>
@@ -2298,62 +3495,56 @@
2298 Request teleport to a another simulator 3495 Request teleport to a another simulator
2299 </summary> 3496 </summary>
2300 <param name="regionHandle">handle of region to teleport agent to</param> 3497 <param name="regionHandle">handle of region to teleport agent to</param>
2301 <param name="position"> 3498 <param name="position"><seealso cref="T:OpenMetaverse.Vector3"/> position in destination sim to teleport to</param>
2302 <seealso cref="T:OpenMetaverse.Vector3" /> position in destination sim to teleport to</param>
2303 </member> 3499 </member>
2304 <member name="M:OpenMetaverse.AgentManager.RequestTeleport(System.UInt64,OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 3500 <member name="M:OpenMetaverse.AgentManager.RequestTeleport(System.UInt64,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
2305 <summary> 3501 <summary>
2306 Request teleport to a another simulator 3502 Request teleport to a another simulator
2307 </summary> 3503 </summary>
2308 <param name="regionHandle">handle of region to teleport agent to</param> 3504 <param name="regionHandle">handle of region to teleport agent to</param>
2309 <param name="position"> 3505 <param name="position"><seealso cref="T:OpenMetaverse.Vector3"/> position in destination sim to teleport to</param>
2310 <seealso cref="T:OpenMetaverse.Vector3" /> position in destination sim to teleport to</param> 3506 <param name="lookAt"><seealso cref="T:OpenMetaverse.Vector3"/> direction in destination sim agent will look at</param>
2311 <param name="lookAt">
2312 <seealso cref="T:OpenMetaverse.Vector3" /> direction in destination sim agent will look at</param>
2313 </member> 3507 </member>
2314 <member name="M:OpenMetaverse.AgentManager.RequestTeleport(OpenMetaverse.UUID)"> 3508 <member name="M:OpenMetaverse.AgentManager.RequestTeleport(OpenMetaverse.UUID)">
2315 <summary> 3509 <summary>
2316 Teleport agent to a landmark 3510 Teleport agent to a landmark
2317 </summary> 3511 </summary>
2318 <param name="landmark"> 3512 <param name="landmark"><seealso cref="T:OpenMetaverse.UUID"/> of the landmark to teleport agent to</param>
2319 <seealso cref="T:OpenMetaverse.UUID" /> of the landmark to teleport agent to</param>
2320 </member> 3513 </member>
2321 <member name="M:OpenMetaverse.AgentManager.SendTeleportLure(OpenMetaverse.UUID)"> 3514 <member name="M:OpenMetaverse.AgentManager.SendTeleportLure(OpenMetaverse.UUID)">
2322 <summary> 3515 <summary>
2323 Send a teleport lure to another avatar with default "Join me in ..." invitation message 3516 Send a teleport lure to another avatar with default "Join me in ..." invitation message
2324 </summary> 3517 </summary>
2325 <param name="targetID">target avatars <seealso cref="T:OpenMetaverse.UUID" /> to lure</param> 3518 <param name="targetID">target avatars <seealso cref="T:OpenMetaverse.UUID"/> to lure</param>
2326 </member> 3519 </member>
2327 <member name="M:OpenMetaverse.AgentManager.SendTeleportLure(OpenMetaverse.UUID,System.String)"> 3520 <member name="M:OpenMetaverse.AgentManager.SendTeleportLure(OpenMetaverse.UUID,System.String)">
2328 <summary> 3521 <summary>
2329 Send a teleport lure to another avatar with custom invitation message 3522 Send a teleport lure to another avatar with custom invitation message
2330 </summary> 3523 </summary>
2331 <param name="targetID">target avatars <seealso cref="T:OpenMetaverse.UUID" /> to lure</param> 3524 <param name="targetID">target avatars <seealso cref="T:OpenMetaverse.UUID"/> to lure</param>
2332 <param name="message">custom message to send with invitation</param> 3525 <param name="message">custom message to send with invitation</param>
2333 </member> 3526 </member>
2334 <member name="M:OpenMetaverse.AgentManager.TeleportLureRespond(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)"> 3527 <member name="M:OpenMetaverse.AgentManager.TeleportLureRespond(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)">
2335 <summary> 3528 <summary>
2336 Respond to a teleport lure by either accepting it and initiating 3529 Respond to a teleport lure by either accepting it and initiating
2337 the teleport, or denying it 3530 the teleport, or denying it
2338 </summary> 3531 </summary>
2339 <param name="requesterID"> 3532 <param name="requesterID"><seealso cref="T:OpenMetaverse.UUID"/> of the avatar sending the lure</param>
2340 <seealso cref="T:OpenMetaverse.UUID" /> of the avatar sending the lure</param> 3533 <param name="sessionID">IM session <seealso cref="T:OpenMetaverse.UUID"/> of the incoming lure request</param>
2341 <param name="sessionID">IM session <seealso cref="T:OpenMetaverse.UUID" /> of the incoming lure request</param>
2342 <param name="accept">true to accept the lure, false to decline it</param> 3534 <param name="accept">true to accept the lure, false to decline it</param>
2343 </member> 3535 </member>
2344 <member name="M:OpenMetaverse.AgentManager.UpdateProfile(OpenMetaverse.Avatar.AvatarProperties)"> 3536 <member name="M:OpenMetaverse.AgentManager.UpdateProfile(OpenMetaverse.Avatar.AvatarProperties)">
2345 <summary> 3537 <summary>
2346 Update agent profile 3538 Update agent profile
2347 </summary> 3539 </summary>
2348 <param name="profile"> 3540 <param name="profile"><seealso cref="T:OpenMetaverse.Avatar.AvatarProperties"/> struct containing updated
2349 <seealso cref="T:OpenMetaverse.Avatar.AvatarProperties" /> struct containing updated
2350 profile information</param> 3541 profile information</param>
2351 </member> 3542 </member>
2352 <member name="M:OpenMetaverse.AgentManager.UpdateInterests(OpenMetaverse.Avatar.Interests)"> 3543 <member name="M:OpenMetaverse.AgentManager.UpdateInterests(OpenMetaverse.Avatar.Interests)">
2353 <summary> 3544 <summary>
2354 Update agents profile interests 3545 Update agents profile interests
2355 </summary> 3546 </summary>
2356 <param name="interests">selection of interests from <seealso cref="T:OpenMetaverse.Avatar.Interests" /> struct</param> 3547 <param name="interests">selection of interests from <seealso cref="T:OpenMetaverse.Avatar.Interests"/> struct</param>
2357 </member> 3548 </member>
2358 <member name="M:OpenMetaverse.AgentManager.SetHeightWidth(System.UInt16,System.UInt16)"> 3549 <member name="M:OpenMetaverse.AgentManager.SetHeightWidth(System.UInt16,System.UInt16)">
2359 <summary> 3550 <summary>
@@ -2396,7 +3587,7 @@
2396 <summary> 3587 <summary>
2397 Sets home location to agents current position 3588 Sets home location to agents current position
2398 </summary> 3589 </summary>
2399 <remarks>will fire an AlertMessage (<seealso cref="E:OpenMetaverse.AgentManager.OnAlertMessage" />) with 3590 <remarks>will fire an AlertMessage (<seealso cref="E:OpenMetaverse.AgentManager.OnAlertMessage"/>) with
2400 success or failure message</remarks> 3591 success or failure message</remarks>
2401 </member> 3592 </member>
2402 <member name="M:OpenMetaverse.AgentManager.CompleteAgentMovement(OpenMetaverse.Simulator)"> 3593 <member name="M:OpenMetaverse.AgentManager.CompleteAgentMovement(OpenMetaverse.Simulator)">
@@ -2404,21 +3595,16 @@
2404 Move an agent in to a simulator. This packet is the last packet 3595 Move an agent in to a simulator. This packet is the last packet
2405 needed to complete the transition in to a new simulator 3596 needed to complete the transition in to a new simulator
2406 </summary> 3597 </summary>
2407 <param name="simulator"> 3598 <param name="simulator"><seealso cref="T:OpenMetaverse.Simulator"/> Object</param>
2408 <seealso cref="T:OpenMetaverse.Simulator" /> Object</param>
2409 </member> 3599 </member>
2410 <member name="M:OpenMetaverse.AgentManager.ScriptQuestionReply(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.ScriptPermission)"> 3600 <member name="M:OpenMetaverse.AgentManager.ScriptQuestionReply(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.ScriptPermission)">
2411 <summary> 3601 <summary>
2412 Reply to script permissions request 3602 Reply to script permissions request
2413 </summary> 3603 </summary>
2414 <param name="simulator"> 3604 <param name="simulator"><seealso cref="T:OpenMetaverse.Simulator"/> Object</param>
2415 <seealso cref="T:OpenMetaverse.Simulator" /> Object</param> 3605 <param name="itemID"><seealso cref="T:OpenMetaverse.UUID"/> of the itemID requesting permissions</param>
2416 <param name="itemID"> 3606 <param name="taskID"><seealso cref="T:OpenMetaverse.UUID"/> of the taskID requesting permissions</param>
2417 <seealso cref="T:OpenMetaverse.UUID" /> of the itemID requesting permissions</param> 3607 <param name="permissions"><seealso cref="T:OpenMetaverse.ScriptPermission"/> list of permissions to allow</param>
2418 <param name="taskID">
2419 <seealso cref="T:OpenMetaverse.UUID" /> of the taskID requesting permissions</param>
2420 <param name="permissions">
2421 <seealso cref="T:OpenMetaverse.ScriptPermission" /> list of permissions to allow</param>
2422 </member> 3608 </member>
2423 <member name="M:OpenMetaverse.AgentManager.GroupInviteRespond(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)"> 3609 <member name="M:OpenMetaverse.AgentManager.GroupInviteRespond(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)">
2424 <summary> 3610 <summary>
@@ -2519,8 +3705,8 @@
2519 </member> 3705 </member>
2520 <member name="M:OpenMetaverse.AgentManager.ChatHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 3706 <member name="M:OpenMetaverse.AgentManager.ChatHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
2521 <summary> 3707 <summary>
2522 Take an incoming Chat packet, auto-parse, and if OnChat is defined call 3708 Take an incoming Chat packet, auto-parse, and if OnChat is defined call
2523 that with the appropriate arguments. 3709 that with the appropriate arguments.
2524 </summary> 3710 </summary>
2525 <param name="sender">The sender</param> 3711 <param name="sender">The sender</param>
2526 <param name="e">The EventArgs object containing the packet data</param> 3712 <param name="e">The EventArgs object containing the packet data</param>
@@ -2582,7 +3768,7 @@
2582 </summary> 3768 </summary>
2583 <param name="capsKey">The message key</param> 3769 <param name="capsKey">The message key</param>
2584 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param> 3770 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
2585 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> which originated the packet</param> 3771 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> which originated the packet</param>
2586 </member> 3772 </member>
2587 <member name="M:OpenMetaverse.AgentManager.TeleportFailedEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 3773 <member name="M:OpenMetaverse.AgentManager.TeleportFailedEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
2588 <summary> 3774 <summary>
@@ -2622,7 +3808,7 @@
2622 </summary> 3808 </summary>
2623 <param name="capsKey">The message key</param> 3809 <param name="capsKey">The message key</param>
2624 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param> 3810 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
2625 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> which originated the packet</param> 3811 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> which originated the packet</param>
2626 </member> 3812 </member>
2627 <member name="M:OpenMetaverse.AgentManager.CrossedRegionHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 3813 <member name="M:OpenMetaverse.AgentManager.CrossedRegionHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
2628 <summary>Process an incoming packet and raise the appropriate events</summary> 3814 <summary>Process an incoming packet and raise the appropriate events</summary>
@@ -2636,28 +3822,23 @@
2636 </summary> 3822 </summary>
2637 <param name="capsKey">The capability Key</param> 3823 <param name="capsKey">The capability Key</param>
2638 <param name="message">IMessage object containing decoded data from OSD</param> 3824 <param name="message">IMessage object containing decoded data from OSD</param>
2639 <param name="simulator"> 3825 <param name="simulator"></param>
2640 </param>
2641 </member> 3826 </member>
2642 <member name="M:OpenMetaverse.AgentManager.ChatterBoxSessionStartReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 3827 <member name="M:OpenMetaverse.AgentManager.ChatterBoxSessionStartReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
2643 <summary> 3828 <summary>
2644 Response from request to join a group chat 3829 Response from request to join a group chat
2645 </summary> 3830 </summary>
2646 <param name="capsKey"> 3831 <param name="capsKey"></param>
2647 </param>
2648 <param name="message">IMessage object containing decoded data from OSD</param> 3832 <param name="message">IMessage object containing decoded data from OSD</param>
2649 <param name="simulator"> 3833 <param name="simulator"></param>
2650 </param>
2651 </member> 3834 </member>
2652 <member name="M:OpenMetaverse.AgentManager.ChatterBoxSessionAgentListUpdatesEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 3835 <member name="M:OpenMetaverse.AgentManager.ChatterBoxSessionAgentListUpdatesEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
2653 <summary> 3836 <summary>
2654 Someone joined or left group chat 3837 Someone joined or left group chat
2655 </summary> 3838 </summary>
2656 <param name="capsKey"> 3839 <param name="capsKey"></param>
2657 </param>
2658 <param name="message">IMessage object containing decoded data from OSD</param> 3840 <param name="message">IMessage object containing decoded data from OSD</param>
2659 <param name="simulator"> 3841 <param name="simulator"></param>
2660 </param>
2661 </member> 3842 </member>
2662 <member name="M:OpenMetaverse.AgentManager.ChatterBoxInvitationEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 3843 <member name="M:OpenMetaverse.AgentManager.ChatterBoxInvitationEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
2663 <summary> 3844 <summary>
@@ -2671,8 +3852,8 @@
2671 <summary> 3852 <summary>
2672 Moderate a chat session 3853 Moderate a chat session
2673 </summary> 3854 </summary>
2674 <param name="sessionID">the <see cref="T:OpenMetaverse.UUID" /> of the session to moderate, for group chats this will be the groups UUID</param> 3855 <param name="sessionID">the <see cref="T:OpenMetaverse.UUID"/> of the session to moderate, for group chats this will be the groups UUID</param>
2675 <param name="memberID">the <see cref="T:OpenMetaverse.UUID" /> of the avatar to moderate</param> 3856 <param name="memberID">the <see cref="T:OpenMetaverse.UUID"/> of the avatar to moderate</param>
2676 <param name="key">Either "voice" to moderate users voice, or "text" to moderate users text session</param> 3857 <param name="key">Either "voice" to moderate users voice, or "text" to moderate users text session</param>
2677 <param name="moderate">true to moderate (silence user), false to allow avatar to speak</param> 3858 <param name="moderate">true to moderate (silence user), false to allow avatar to speak</param>
2678 </member> 3859 </member>
@@ -2696,3348 +3877,4598 @@
2696 <param name="sender">The sender</param> 3877 <param name="sender">The sender</param>
2697 <param name="e">The EventArgs object containing the packet data</param> 3878 <param name="e">The EventArgs object containing the packet data</param>
2698 </member> 3879 </member>
2699 <member name="T:OpenMetaverse.ChatEventArgs"> 3880 <member name="E:OpenMetaverse.AgentManager.ChatFromSimulator">
3881 <summary>Raised when a scripted object or agent within range sends a public message</summary>
3882 </member>
3883 <member name="E:OpenMetaverse.AgentManager.ScriptDialog">
3884 <summary>Raised when a scripted object sends a dialog box containing possible
3885 options an agent can respond to</summary>
3886 </member>
3887 <member name="E:OpenMetaverse.AgentManager.ScriptQuestion">
3888 <summary>Raised when an object requests a change in the permissions an agent has permitted</summary>
3889 </member>
3890 <member name="E:OpenMetaverse.AgentManager.LoadURL">
3891 <summary>Raised when a script requests an agent open the specified URL</summary>
3892 </member>
3893 <member name="E:OpenMetaverse.AgentManager.MoneyBalance">
3894 <summary>Raised when an agents currency balance is updated</summary>
3895 </member>
3896 <member name="E:OpenMetaverse.AgentManager.MoneyBalanceReply">
3897 <summary>Raised when a transaction occurs involving currency such as a land purchase</summary>
3898 </member>
3899 <member name="E:OpenMetaverse.AgentManager.IM">
3900 <summary>Raised when an ImprovedInstantMessage packet is recieved from the simulator, this is used for everything from
3901 private messaging to friendship offers. The Dialog field defines what type of message has arrived</summary>
3902 </member>
3903 <member name="E:OpenMetaverse.AgentManager.TeleportProgress">
3904 <summary>Raised when an agent has requested a teleport to another location, or when responding to a lure. Raised multiple times
3905 for each teleport indicating the progress of the request</summary>
3906 </member>
3907 <member name="E:OpenMetaverse.AgentManager.AgentDataReply">
3908 <summary>Raised when a simulator sends agent specific information for our avatar.</summary>
3909 </member>
3910 <member name="E:OpenMetaverse.AgentManager.AnimationsChanged">
3911 <summary>Raised when our agents animation playlist changes</summary>
3912 </member>
3913 <member name="E:OpenMetaverse.AgentManager.MeanCollision">
3914 <summary>Raised when an object or avatar forcefully collides with our agent</summary>
3915 </member>
3916 <member name="E:OpenMetaverse.AgentManager.RegionCrossed">
3917 <summary>Raised when our agent crosses a region border into another region</summary>
3918 </member>
3919 <member name="E:OpenMetaverse.AgentManager.GroupChatJoined">
3920 <summary>Raised when our agent succeeds or fails to join a group chat session</summary>
3921 </member>
3922 <member name="E:OpenMetaverse.AgentManager.AlertMessage">
3923 <summary>Raised when a simulator sends an urgent message usually indication the recent failure of
3924 another action we have attempted to take such as an attempt to enter a parcel where we are denied access</summary>
3925 </member>
3926 <member name="E:OpenMetaverse.AgentManager.ScriptControlChange">
3927 <summary>Raised when a script attempts to take or release specified controls for our agent</summary>
3928 </member>
3929 <member name="E:OpenMetaverse.AgentManager.CameraConstraint">
3930 <summary>Raised when the simulator detects our agent is trying to view something
3931 beyond its limits</summary>
3932 </member>
3933 <member name="E:OpenMetaverse.AgentManager.ScriptSensorReply">
3934 <summary>Raised when a script sensor reply is received from a simulator</summary>
3935 </member>
3936 <member name="E:OpenMetaverse.AgentManager.AvatarSitResponse">
3937 <summary>Raised in response to a <see cref="M:OpenMetaverse.AgentManager.RequestSit(OpenMetaverse.UUID,OpenMetaverse.Vector3)"/> request</summary>
3938 </member>
3939 <member name="E:OpenMetaverse.AgentManager.ChatSessionMemberAdded">
3940 <summary>Raised when an avatar enters a group chat session we are participating in</summary>
3941 </member>
3942 <member name="E:OpenMetaverse.AgentManager.ChatSessionMemberLeft">
3943 <summary>Raised when an agent exits a group chat session we are participating in</summary>
3944 </member>
3945 <member name="E:OpenMetaverse.AgentManager.SetDisplayNameReply">
3946 <summary>Raised when the simulator sends us data containing
3947 the details of display name change</summary>
3948 </member>
3949 <member name="E:OpenMetaverse.AgentManager.MuteListUpdated">
3950 <summary>Raised when a scripted object or agent within range sends a public message</summary>
3951 </member>
3952 <member name="P:OpenMetaverse.AgentManager.AgentID">
3953 <summary>Your (client) avatars <see cref="T:OpenMetaverse.UUID"/></summary>
3954 <remarks>"client", "agent", and "avatar" all represent the same thing</remarks>
3955 </member>
3956 <member name="P:OpenMetaverse.AgentManager.SessionID">
3957 <summary>Temporary <seealso cref="T:OpenMetaverse.UUID"/> assigned to this session, used for
3958 verifying our identity in packets</summary>
3959 </member>
3960 <member name="P:OpenMetaverse.AgentManager.SecureSessionID">
3961 <summary>Shared secret <seealso cref="T:OpenMetaverse.UUID"/> that is never sent over the wire</summary>
3962 </member>
3963 <member name="P:OpenMetaverse.AgentManager.LocalID">
3964 <summary>Your (client) avatar ID, local to the current region/sim</summary>
3965 </member>
3966 <member name="P:OpenMetaverse.AgentManager.StartLocation">
3967 <summary>Where the avatar started at login. Can be "last", "home"
3968 or a login <seealso cref="T:OpenMetaverse.URI"/></summary>
3969 </member>
3970 <member name="P:OpenMetaverse.AgentManager.AgentAccess">
3971 <summary>The access level of this agent, usually M or PG</summary>
3972 </member>
3973 <member name="P:OpenMetaverse.AgentManager.CollisionPlane">
3974 <summary>The CollisionPlane of Agent</summary>
3975 </member>
3976 <member name="P:OpenMetaverse.AgentManager.Velocity">
3977 <summary>An <seealso cref="T:OpenMetaverse.Vector3"/> representing the velocity of our agent</summary>
3978 </member>
3979 <member name="P:OpenMetaverse.AgentManager.Acceleration">
3980 <summary>An <seealso cref="T:OpenMetaverse.Vector3"/> representing the acceleration of our agent</summary>
3981 </member>
3982 <member name="P:OpenMetaverse.AgentManager.AngularVelocity">
3983 <summary>A <seealso cref="T:OpenMetaverse.Vector3"/> which specifies the angular speed, and axis about which an Avatar is rotating.</summary>
3984 </member>
3985 <member name="P:OpenMetaverse.AgentManager.HomePosition">
3986 <summary>Position avatar client will goto when login to 'home' or during
3987 teleport request to 'home' region.</summary>
3988 </member>
3989 <member name="P:OpenMetaverse.AgentManager.HomeLookAt">
3990 <summary>LookAt point saved/restored with HomePosition</summary>
3991 </member>
3992 <member name="P:OpenMetaverse.AgentManager.FirstName">
3993 <summary>Avatar First Name (i.e. Philip)</summary>
3994 </member>
3995 <member name="P:OpenMetaverse.AgentManager.LastName">
3996 <summary>Avatar Last Name (i.e. Linden)</summary>
3997 </member>
3998 <member name="P:OpenMetaverse.AgentManager.Name">
3999 <summary>Avatar Full Name (i.e. Philip Linden)</summary>
4000 </member>
4001 <member name="P:OpenMetaverse.AgentManager.Health">
4002 <summary>Gets the health of the agent</summary>
4003 </member>
4004 <member name="P:OpenMetaverse.AgentManager.Balance">
4005 <summary>Gets the current balance of the agent</summary>
4006 </member>
4007 <member name="P:OpenMetaverse.AgentManager.SittingOn">
4008 <summary>Gets the local ID of the prim the agent is sitting on,
4009 zero if the avatar is not currently sitting</summary>
4010 </member>
4011 <member name="P:OpenMetaverse.AgentManager.ActiveGroup">
4012 <summary>Gets the <seealso cref="T:OpenMetaverse.UUID"/> of the agents active group.</summary>
4013 </member>
4014 <member name="P:OpenMetaverse.AgentManager.ActiveGroupPowers">
4015 <summary>Gets the Agents powers in the currently active group</summary>
4016 </member>
4017 <member name="P:OpenMetaverse.AgentManager.TeleportMessage">
4018 <summary>Current status message for teleporting</summary>
4019 </member>
4020 <member name="P:OpenMetaverse.AgentManager.RelativePosition">
4021 <summary>Current position of the agent as a relative offset from
4022 the simulator, or the parent object if we are sitting on something</summary>
4023 </member>
4024 <member name="P:OpenMetaverse.AgentManager.RelativeRotation">
4025 <summary>Current rotation of the agent as a relative rotation from
4026 the simulator, or the parent object if we are sitting on something</summary>
4027 </member>
4028 <member name="P:OpenMetaverse.AgentManager.SimPosition">
4029 <summary>Current position of the agent in the simulator</summary>
4030 </member>
4031 <member name="P:OpenMetaverse.AgentManager.SimRotation">
2700 <summary> 4032 <summary>
4033 A <seealso cref="T:OpenMetaverse.Quaternion"/> representing the agents current rotation
2701 </summary> 4034 </summary>
2702 </member> 4035 </member>
2703 <member name="M:OpenMetaverse.ChatEventArgs.#ctor(OpenMetaverse.Simulator,System.String,OpenMetaverse.ChatAudibleLevel,OpenMetaverse.ChatType,OpenMetaverse.ChatSourceType,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3)"> 4036 <member name="P:OpenMetaverse.AgentManager.GlobalPosition">
4037 <summary>Returns the global grid position of the avatar</summary>
4038 </member>
4039 <member name="T:OpenMetaverse.AgentManager.ControlFlags">
2704 <summary> 4040 <summary>
2705 Construct a new instance of the ChatEventArgs object 4041 Used to specify movement actions for your agent
2706 </summary> 4042 </summary>
2707 <param name="simulator">Sim from which the message originates</param>
2708 <param name="message">The message sent</param>
2709 <param name="audible">The audible level of the message</param>
2710 <param name="type">The type of message sent: whisper, shout, etc</param>
2711 <param name="sourceType">The source type of the message sender</param>
2712 <param name="fromName">The name of the agent or object sending the message</param>
2713 <param name="sourceId">The ID of the agent or object sending the message</param>
2714 <param name="ownerid">The ID of the object owner, or the agent ID sending the message</param>
2715 <param name="position">The position of the agent or object sending the message</param>
2716 </member> 4043 </member>
2717 <member name="P:OpenMetaverse.ChatEventArgs.Simulator"> 4044 <member name="F:OpenMetaverse.AgentManager.ControlFlags.NONE">
2718 <summary>Get the simulator sending the message</summary> 4045 <summary>Empty flag</summary>
2719 </member> 4046 </member>
2720 <member name="P:OpenMetaverse.ChatEventArgs.Message"> 4047 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AT_POS">
2721 <summary>Get the message sent</summary> 4048 <summary>Move Forward (SL Keybinding: W/Up Arrow)</summary>
2722 </member> 4049 </member>
2723 <member name="P:OpenMetaverse.ChatEventArgs.AudibleLevel"> 4050 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG">
2724 <summary>Get the audible level of the message</summary> 4051 <summary>Move Backward (SL Keybinding: S/Down Arrow)</summary>
2725 </member> 4052 </member>
2726 <member name="P:OpenMetaverse.ChatEventArgs.Type"> 4053 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS">
2727 <summary>Get the type of message sent: whisper, shout, etc</summary> 4054 <summary>Move Left (SL Keybinding: Shift-(A/Left Arrow))</summary>
2728 </member> 4055 </member>
2729 <member name="P:OpenMetaverse.ChatEventArgs.SourceType"> 4056 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG">
2730 <summary>Get the source type of the message sender</summary> 4057 <summary>Move Right (SL Keybinding: Shift-(D/Right Arrow))</summary>
2731 </member> 4058 </member>
2732 <member name="P:OpenMetaverse.ChatEventArgs.FromName"> 4059 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_UP_POS">
2733 <summary>Get the name of the agent or object sending the message</summary> 4060 <summary>Not Flying: Jump/Flying: Move Up (SL Keybinding: E)</summary>
2734 </member> 4061 </member>
2735 <member name="P:OpenMetaverse.ChatEventArgs.SourceID"> 4062 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG">
2736 <summary>Get the ID of the agent or object sending the message</summary> 4063 <summary>Not Flying: Croutch/Flying: Move Down (SL Keybinding: C)</summary>
2737 </member> 4064 </member>
2738 <member name="P:OpenMetaverse.ChatEventArgs.OwnerID"> 4065 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_PITCH_POS">
2739 <summary>Get the ID of the object owner, or the agent ID sending the message</summary> 4066 <summary>Unused</summary>
2740 </member> 4067 </member>
2741 <member name="P:OpenMetaverse.ChatEventArgs.Position"> 4068 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_PITCH_NEG">
2742 <summary>Get the position of the agent or object sending the message</summary> 4069 <summary>Unused</summary>
2743 </member> 4070 </member>
2744 <member name="T:OpenMetaverse.ScriptDialogEventArgs"> 4071 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS">
2745 <summary>Contains the data sent when a primitive opens a dialog with this agent</summary> 4072 <summary>Unused</summary>
2746 </member> 4073 </member>
2747 <member name="M:OpenMetaverse.ScriptDialogEventArgs.#ctor(System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,System.Int32,System.Collections.Generic.List{System.String},OpenMetaverse.UUID)"> 4074 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG">
2748 <summary> 4075 <summary>Unused</summary>
2749 Construct a new instance of the ScriptDialogEventArgs
2750 </summary>
2751 <param name="message">The dialog message</param>
2752 <param name="objectName">The name of the object that sent the dialog request</param>
2753 <param name="imageID">The ID of the image to be displayed</param>
2754 <param name="objectID">The ID of the primitive sending the dialog</param>
2755 <param name="firstName">The first name of the senders owner</param>
2756 <param name="lastName">The last name of the senders owner</param>
2757 <param name="chatChannel">The communication channel the dialog was sent on</param>
2758 <param name="buttons">The string labels containing the options presented in this dialog</param>
2759 <param name="ownerID">UUID of the scritped object owner</param>
2760 </member> 4076 </member>
2761 <member name="P:OpenMetaverse.ScriptDialogEventArgs.Message"> 4077 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_AT">
2762 <summary>Get the dialog message</summary> 4078 <summary>ORed with AGENT_CONTROL_AT_* if the keyboard is being used</summary>
2763 </member> 4079 </member>
2764 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ObjectName"> 4080 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_LEFT">
2765 <summary>Get the name of the object that sent the dialog request</summary> 4081 <summary>ORed with AGENT_CONTROL_LEFT_* if the keyboard is being used</summary>
2766 </member> 4082 </member>
2767 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ImageID"> 4083 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FAST_UP">
2768 <summary>Get the ID of the image to be displayed</summary> 4084 <summary>ORed with AGENT_CONTROL_UP_* if the keyboard is being used</summary>
2769 </member> 4085 </member>
2770 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ObjectID"> 4086 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FLY">
2771 <summary>Get the ID of the primitive sending the dialog</summary> 4087 <summary>Fly</summary>
2772 </member> 4088 </member>
2773 <member name="P:OpenMetaverse.ScriptDialogEventArgs.FirstName"> 4089 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_STOP">
2774 <summary>Get the first name of the senders owner</summary> 4090 <summary></summary>
2775 </member> 4091 </member>
2776 <member name="P:OpenMetaverse.ScriptDialogEventArgs.LastName"> 4092 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_FINISH_ANIM">
2777 <summary>Get the last name of the senders owner</summary> 4093 <summary>Finish our current animation</summary>
2778 </member> 4094 </member>
2779 <member name="P:OpenMetaverse.ScriptDialogEventArgs.Channel"> 4095 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP">
2780 <summary>Get the communication channel the dialog was sent on, responses 4096 <summary>Stand up from the ground or a prim seat</summary>
2781 should also send responses on this same channel</summary>
2782 </member> 4097 </member>
2783 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ButtonLabels"> 4098 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND">
2784 <summary>Get the string labels containing the options presented in this dialog</summary> 4099 <summary>Sit on the ground at our current location</summary>
2785 </member> 4100 </member>
2786 <member name="P:OpenMetaverse.ScriptDialogEventArgs.OwnerID"> 4101 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK">
2787 <summary>UUID of the scritped object owner</summary> 4102 <summary>Whether mouselook is currently enabled</summary>
2788 </member> 4103 </member>
2789 <member name="T:OpenMetaverse.ScriptQuestionEventArgs"> 4104 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS">
2790 <summary>Contains the data sent when a primitive requests debit or other permissions 4105 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2791 requesting a YES or NO answer</summary>
2792 </member> 4106 </member>
2793 <member name="M:OpenMetaverse.ScriptQuestionEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.ScriptPermission)"> 4107 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG">
2794 <summary> 4108 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2795 Construct a new instance of the ScriptQuestionEventArgs
2796 </summary>
2797 <param name="simulator">The simulator containing the object sending the request</param>
2798 <param name="taskID">The ID of the script making the request</param>
2799 <param name="itemID">The ID of the primitive containing the script making the request</param>
2800 <param name="objectName">The name of the primitive making the request</param>
2801 <param name="objectOwner">The name of the owner of the object making the request</param>
2802 <param name="questions">The permissions being requested</param>
2803 </member> 4109 </member>
2804 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.Simulator"> 4110 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS">
2805 <summary>Get the simulator containing the object sending the request</summary> 4111 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2806 </member> 4112 </member>
2807 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.TaskID"> 4113 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG">
2808 <summary>Get the ID of the script making the request</summary> 4114 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2809 </member> 4115 </member>
2810 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ItemID"> 4116 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS">
2811 <summary>Get the ID of the primitive containing the script making the request</summary> 4117 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2812 </member> 4118 </member>
2813 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ObjectName"> 4119 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG">
2814 <summary>Get the name of the primitive making the request</summary> 4120 <summary>Legacy, used if a key was pressed for less than a certain amount of time</summary>
2815 </member> 4121 </member>
2816 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ObjectOwnerName"> 4122 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT">
2817 <summary>Get the name of the owner of the object making the request</summary> 4123 <summary></summary>
2818 </member> 4124 </member>
2819 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.Questions"> 4125 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT">
2820 <summary>Get the permissions being requested</summary> 4126 <summary></summary>
2821 </member> 4127 </member>
2822 <member name="T:OpenMetaverse.LoadUrlEventArgs"> 4128 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_AWAY">
2823 <summary>Contains the data sent when a primitive sends a request 4129 <summary>Set when the avatar is idled or set to away. Note that the away animation is
2824 to an agent to open the specified URL</summary> 4130 activated separately from setting this flag</summary>
2825 </member> 4131 </member>
2826 <member name="M:OpenMetaverse.LoadUrlEventArgs.#ctor(System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.String,System.String)"> 4132 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN">
2827 <summary> 4133 <summary></summary>
2828 Construct a new instance of the LoadUrlEventArgs
2829 </summary>
2830 <param name="objectName">The name of the object sending the request</param>
2831 <param name="objectID">The ID of the object sending the request</param>
2832 <param name="ownerID">The ID of the owner of the object sending the request</param>
2833 <param name="ownerIsGroup">True if the object is owned by a group</param>
2834 <param name="message">The message sent with the request</param>
2835 <param name="URL">The URL the object sent</param>
2836 </member> 4134 </member>
2837 <member name="P:OpenMetaverse.LoadUrlEventArgs.ObjectName"> 4135 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP">
2838 <summary>Get the name of the object sending the request</summary> 4136 <summary></summary>
2839 </member> 4137 </member>
2840 <member name="P:OpenMetaverse.LoadUrlEventArgs.ObjectID"> 4138 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN">
2841 <summary>Get the ID of the object sending the request</summary> 4139 <summary></summary>
2842 </member> 4140 </member>
2843 <member name="P:OpenMetaverse.LoadUrlEventArgs.OwnerID"> 4141 <member name="F:OpenMetaverse.AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP">
2844 <summary>Get the ID of the owner of the object sending the request</summary> 4142 <summary></summary>
2845 </member> 4143 </member>
2846 <member name="P:OpenMetaverse.LoadUrlEventArgs.OwnerIsGroup"> 4144 <member name="T:OpenMetaverse.AgentManager.AgentMovement">
2847 <summary>True if the object is owned by a group</summary> 4145 <summary>
4146 Agent movement and camera control
4147
4148 Agent movement is controlled by setting specific <seealso cref="T:AgentManager.ControlFlags"/>
4149 After the control flags are set, An AgentUpdate is required to update the simulator of the specified flags
4150 This is most easily accomplished by setting one or more of the AgentMovement properties
4151
4152 Movement of an avatar is always based on a compass direction, for example AtPos will move the
4153 agent from West to East or forward on the X Axis, AtNeg will of course move agent from
4154 East to West or backward on the X Axis, LeftPos will be South to North or forward on the Y Axis
4155 The Z axis is Up, finer grained control of movements can be done using the Nudge properties
4156 </summary>
2848 </member> 4157 </member>
2849 <member name="P:OpenMetaverse.LoadUrlEventArgs.Message"> 4158 <member name="F:OpenMetaverse.AgentManager.AgentMovement.Camera">
2850 <summary>Get the message sent with the request</summary> 4159 <summary>Agent camera controls</summary>
2851 </member> 4160 </member>
2852 <member name="P:OpenMetaverse.LoadUrlEventArgs.URL"> 4161 <member name="F:OpenMetaverse.AgentManager.AgentMovement.Flags">
2853 <summary>Get the URL the object sent</summary> 4162 <summary>Currently only used for hiding your group title</summary>
2854 </member> 4163 </member>
2855 <member name="T:OpenMetaverse.InstantMessageEventArgs"> 4164 <member name="F:OpenMetaverse.AgentManager.AgentMovement.State">
2856 <summary>The date received from an ImprovedInstantMessage</summary> 4165 <summary>Action state of the avatar, which can currently be
4166 typing and editing</summary>
2857 </member> 4167 </member>
2858 <member name="M:OpenMetaverse.InstantMessageEventArgs.#ctor(OpenMetaverse.InstantMessage,OpenMetaverse.Simulator)"> 4168 <member name="F:OpenMetaverse.AgentManager.AgentMovement.BodyRotation">
4169 <summary></summary>
4170 </member>
4171 <member name="F:OpenMetaverse.AgentManager.AgentMovement.HeadRotation">
4172 <summary></summary>
4173 </member>
4174 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastBodyRotation">
4175 <summary></summary>
4176 </member>
4177 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastHeadRotation">
4178 <summary></summary>
4179 </member>
4180 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraCenter">
4181 <summary></summary>
4182 </member>
4183 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraXAxis">
4184 <summary></summary>
4185 </member>
4186 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraYAxis">
4187 <summary></summary>
4188 </member>
4189 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastCameraZAxis">
4190 <summary></summary>
4191 </member>
4192 <member name="F:OpenMetaverse.AgentManager.AgentMovement.LastFar">
4193 <summary></summary>
4194 </member>
4195 <member name="F:OpenMetaverse.AgentManager.AgentMovement.updateTimer">
4196 <summary>Timer for sending AgentUpdate packets</summary>
4197 </member>
4198 <member name="M:OpenMetaverse.AgentManager.AgentMovement.#ctor(OpenMetaverse.GridClient)">
4199 <summary>Default constructor</summary>
4200 </member>
4201 <member name="M:OpenMetaverse.AgentManager.AgentMovement.UpdateFromHeading(System.Double,System.Boolean)">
2859 <summary> 4202 <summary>
2860 Construct a new instance of the InstantMessageEventArgs object 4203 Send an AgentUpdate with the camera set at the current agent
4204 position and pointing towards the heading specified
2861 </summary> 4205 </summary>
2862 <param name="im">the InstantMessage object</param> 4206 <param name="heading">Camera rotation in radians</param>
2863 <param name="simulator">the simulator where the InstantMessage origniated</param> 4207 <param name="reliable">Whether to send the AgentUpdate reliable
4208 or not</param>
2864 </member> 4209 </member>
2865 <member name="P:OpenMetaverse.InstantMessageEventArgs.IM"> 4210 <member name="M:OpenMetaverse.AgentManager.AgentMovement.TurnToward(OpenMetaverse.Vector3)">
2866 <summary>Get the InstantMessage object</summary> 4211 <summary>
4212 Rotates the avatar body and camera toward a target position.
4213 This will also anchor the camera position on the avatar
4214 </summary>
4215 <param name="target">Region coordinates to turn toward</param>
2867 </member> 4216 </member>
2868 <member name="P:OpenMetaverse.InstantMessageEventArgs.Simulator"> 4217 <member name="M:OpenMetaverse.AgentManager.AgentMovement.TurnToward(OpenMetaverse.Vector3,System.Boolean)">
2869 <summary>Get the simulator where the InstantMessage origniated</summary> 4218 <summary>
4219 Rotates the avatar body and camera toward a target position.
4220 This will also anchor the camera position on the avatar
4221 </summary>
4222 <param name="target">Region coordinates to turn toward</param>
4223 <param name="sendUpdate">whether to send update or not</param>
2870 </member> 4224 </member>
2871 <member name="T:OpenMetaverse.BalanceEventArgs"> 4225 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate">
2872 <summary>Contains the currency balance</summary> 4226 <summary>
4227 Send new AgentUpdate packet to update our current camera
4228 position and rotation
4229 </summary>
2873 </member> 4230 </member>
2874 <member name="M:OpenMetaverse.BalanceEventArgs.#ctor(System.Int32)"> 4231 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate(System.Boolean)">
2875 <summary> 4232 <summary>
2876 Construct a new BalanceEventArgs object 4233 Send new AgentUpdate packet to update our current camera
4234 position and rotation
2877 </summary> 4235 </summary>
2878 <param name="balance">The currenct balance</param> 4236 <param name="reliable">Whether to require server acknowledgement
4237 of this packet</param>
2879 </member> 4238 </member>
2880 <member name="P:OpenMetaverse.BalanceEventArgs.Balance"> 4239 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendUpdate(System.Boolean,OpenMetaverse.Simulator)">
2881 <summary> 4240 <summary>
2882 Get the currenct balance 4241 Send new AgentUpdate packet to update our current camera
4242 position and rotation
2883 </summary> 4243 </summary>
4244 <param name="reliable">Whether to require server acknowledgement
4245 of this packet</param>
4246 <param name="simulator">Simulator to send the update to</param>
2884 </member> 4247 </member>
2885 <member name="T:OpenMetaverse.MoneyBalanceReplyEventArgs"> 4248 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SendManualUpdate(OpenMetaverse.AgentManager.ControlFlags,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Quaternion,System.Single,OpenMetaverse.AgentFlags,OpenMetaverse.AgentState,System.Boolean)">
2886 <summary>Contains the transaction summary when an item is purchased, 4249 <summary>
2887 money is given, or land is purchased</summary> 4250 Builds an AgentUpdate packet entirely from parameters. This
4251 will not touch the state of Self.Movement or
4252 Self.Movement.Camera in any way
4253 </summary>
4254 <param name="controlFlags"></param>
4255 <param name="position"></param>
4256 <param name="forwardAxis"></param>
4257 <param name="leftAxis"></param>
4258 <param name="upAxis"></param>
4259 <param name="bodyRotation"></param>
4260 <param name="headRotation"></param>
4261 <param name="farClip"></param>
4262 <param name="reliable"></param>
4263 <param name="flags"></param>
4264 <param name="state"></param>
2888 </member> 4265 </member>
2889 <member name="M:OpenMetaverse.MoneyBalanceReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,System.Int32,System.Int32,System.Int32,System.String,OpenMetaverse.TransactionInfo)"> 4266 <member name="M:OpenMetaverse.AgentManager.AgentMovement.SetFOVVerticalAngle(System.Single)">
2890 <summary> 4267 <summary>
2891 Construct a new instance of the MoneyBalanceReplyEventArgs object 4268 Sends update of Field of Vision vertical angle to the simulator
2892 </summary> 4269 </summary>
2893 <param name="transactionID">The ID of the transaction</param> 4270 <param name="angle">Angle in radians</param>
2894 <param name="transactionSuccess">True of the transaction was successful</param>
2895 <param name="balance">The current currency balance</param>
2896 <param name="metersCredit">The meters credited</param>
2897 <param name="metersCommitted">The meters comitted</param>
2898 <param name="description">A brief description of the transaction</param>
2899 </member> 4271 </member>
2900 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.TransactionID"> 4272 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AtPos">
2901 <summary>Get the ID of the transaction</summary> 4273 <summary>Move agent positive along the X axis</summary>
2902 </member> 4274 </member>
2903 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Success"> 4275 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AtNeg">
2904 <summary>True of the transaction was successful</summary> 4276 <summary>Move agent negative along the X axis</summary>
2905 </member> 4277 </member>
2906 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Balance"> 4278 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LeftPos">
2907 <summary>Get the remaining currency balance</summary> 4279 <summary>Move agent positive along the Y axis</summary>
2908 </member> 4280 </member>
2909 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.MetersCredit"> 4281 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LeftNeg">
2910 <summary>Get the meters credited</summary> 4282 <summary>Move agent negative along the Y axis</summary>
2911 </member> 4283 </member>
2912 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.MetersCommitted"> 4284 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpPos">
2913 <summary>Get the meters comitted</summary> 4285 <summary>Move agent positive along the Z axis</summary>
2914 </member> 4286 </member>
2915 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Description"> 4287 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpNeg">
2916 <summary>Get the description of the transaction</summary> 4288 <summary>Move agent negative along the Z axis</summary>
2917 </member> 4289 </member>
2918 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.TransactionInfo"> 4290 <member name="P:OpenMetaverse.AgentManager.AgentMovement.PitchPos">
2919 <summary>Detailed transaction information</summary> 4291 <summary></summary>
2920 </member> 4292 </member>
2921 <member name="T:OpenMetaverse.AgentDataReplyEventArgs"> 4293 <member name="P:OpenMetaverse.AgentManager.AgentMovement.PitchNeg">
2922 <summary>Data sent from the simulator containing information about your agent and active group information</summary> 4294 <summary></summary>
2923 </member> 4295 </member>
2924 <member name="M:OpenMetaverse.AgentDataReplyEventArgs.#ctor(System.String,System.String,OpenMetaverse.UUID,System.String,OpenMetaverse.GroupPowers,System.String)"> 4296 <member name="P:OpenMetaverse.AgentManager.AgentMovement.YawPos">
2925 <summary> 4297 <summary></summary>
2926 Construct a new instance of the AgentDataReplyEventArgs object
2927 </summary>
2928 <param name="firstName">The agents first name</param>
2929 <param name="lastName">The agents last name</param>
2930 <param name="activeGroupID">The agents active group ID</param>
2931 <param name="groupTitle">The group title of the agents active group</param>
2932 <param name="groupPowers">The combined group powers the agent has in the active group</param>
2933 <param name="groupName">The name of the group the agent has currently active</param>
2934 </member> 4298 </member>
2935 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.FirstName"> 4299 <member name="P:OpenMetaverse.AgentManager.AgentMovement.YawNeg">
2936 <summary>Get the agents first name</summary> 4300 <summary></summary>
2937 </member> 4301 </member>
2938 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.LastName"> 4302 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastAt">
2939 <summary>Get the agents last name</summary> 4303 <summary></summary>
2940 </member> 4304 </member>
2941 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.ActiveGroupID"> 4305 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastLeft">
2942 <summary>Get the active group ID of your agent</summary> 4306 <summary></summary>
2943 </member> 4307 </member>
2944 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupTitle"> 4308 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FastUp">
2945 <summary>Get the active groups title of your agent</summary> 4309 <summary></summary>
2946 </member> 4310 </member>
2947 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupPowers"> 4311 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Fly">
2948 <summary>Get the combined group powers of your agent</summary> 4312 <summary>Causes simulator to make agent fly</summary>
2949 </member> 4313 </member>
2950 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupName"> 4314 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Stop">
2951 <summary>Get the active group name of your agent</summary> 4315 <summary>Stop movement</summary>
2952 </member> 4316 </member>
2953 <member name="T:OpenMetaverse.AnimationsChangedEventArgs"> 4317 <member name="P:OpenMetaverse.AgentManager.AgentMovement.FinishAnim">
2954 <summary>Data sent by the simulator to indicate the active/changed animations 4318 <summary>Finish animation</summary>
2955 applied to your agent</summary>
2956 </member> 4319 </member>
2957 <member name="M:OpenMetaverse.AnimationsChangedEventArgs.#ctor(OpenMetaverse.InternalDictionary{OpenMetaverse.UUID,System.Int32})"> 4320 <member name="P:OpenMetaverse.AgentManager.AgentMovement.StandUp">
4321 <summary>Stand up from a sit</summary>
4322 </member>
4323 <member name="P:OpenMetaverse.AgentManager.AgentMovement.SitOnGround">
4324 <summary>Tells simulator to sit agent on ground</summary>
4325 </member>
4326 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Mouselook">
4327 <summary>Place agent into mouselook mode</summary>
4328 </member>
4329 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeAtPos">
4330 <summary>Nudge agent positive along the X axis</summary>
4331 </member>
4332 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeAtNeg">
4333 <summary>Nudge agent negative along the X axis</summary>
4334 </member>
4335 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeLeftPos">
4336 <summary>Nudge agent positive along the Y axis</summary>
4337 </member>
4338 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeLeftNeg">
4339 <summary>Nudge agent negative along the Y axis</summary>
4340 </member>
4341 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeUpPos">
4342 <summary>Nudge agent positive along the Z axis</summary>
4343 </member>
4344 <member name="P:OpenMetaverse.AgentManager.AgentMovement.NudgeUpNeg">
4345 <summary>Nudge agent negative along the Z axis</summary>
4346 </member>
4347 <member name="P:OpenMetaverse.AgentManager.AgentMovement.TurnLeft">
4348 <summary></summary>
4349 </member>
4350 <member name="P:OpenMetaverse.AgentManager.AgentMovement.TurnRight">
4351 <summary></summary>
4352 </member>
4353 <member name="P:OpenMetaverse.AgentManager.AgentMovement.Away">
4354 <summary>Tell simulator to mark agent as away</summary>
4355 </member>
4356 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LButtonDown">
4357 <summary></summary>
4358 </member>
4359 <member name="P:OpenMetaverse.AgentManager.AgentMovement.LButtonUp">
4360 <summary></summary>
4361 </member>
4362 <member name="P:OpenMetaverse.AgentManager.AgentMovement.MLButtonDown">
4363 <summary></summary>
4364 </member>
4365 <member name="P:OpenMetaverse.AgentManager.AgentMovement.MLButtonUp">
4366 <summary></summary>
4367 </member>
4368 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AlwaysRun">
2958 <summary> 4369 <summary>
2959 Construct a new instance of the AnimationsChangedEventArgs class 4370 Returns "always run" value, or changes it by sending a SetAlwaysRunPacket
2960 </summary> 4371 </summary>
2961 <param name="agentAnimations">The dictionary that contains the changed animations</param>
2962 </member> 4372 </member>
2963 <member name="P:OpenMetaverse.AnimationsChangedEventArgs.Animations"> 4373 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentControls">
2964 <summary>Get the dictionary that contains the changed animations</summary> 4374 <summary>The current value of the agent control flags</summary>
2965 </member> 4375 </member>
2966 <member name="T:OpenMetaverse.MeanCollisionEventArgs"> 4376 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpdateInterval">
4377 <summary>Gets or sets the interval in milliseconds at which
4378 AgentUpdate packets are sent to the current simulator. Setting
4379 this to a non-zero value will also enable the packet sending if
4380 it was previously off, and setting it to zero will disable</summary>
4381 </member>
4382 <member name="P:OpenMetaverse.AgentManager.AgentMovement.UpdateEnabled">
4383 <summary>Gets or sets whether AgentUpdate packets are sent to
4384 the current simulator</summary>
4385 </member>
4386 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AutoResetControls">
4387 <summary>Reset movement controls every time we send an update</summary>
4388 </member>
4389 <member name="T:OpenMetaverse.AgentManager.AgentMovement.AgentCamera">
2967 <summary> 4390 <summary>
2968 Data sent from a simulator indicating a collision with your agent 4391 Camera controls for the agent, mostly a thin wrapper around
4392 CoordinateFrame. This class is only responsible for state
4393 tracking and math, it does not send any packets
2969 </summary> 4394 </summary>
2970 </member> 4395 </member>
2971 <member name="M:OpenMetaverse.MeanCollisionEventArgs.#ctor(OpenMetaverse.MeanCollisionType,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,System.DateTime)"> 4396 <member name="F:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Far">
4397 <summary></summary>
4398 </member>
4399 <member name="F:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Frame">
4400 <summary>The camera is a local frame of reference inside of
4401 the larger grid space. This is where the math happens</summary>
4402 </member>
4403 <member name="M:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.#ctor">
2972 <summary> 4404 <summary>
2973 Construct a new instance of the MeanCollisionEventArgs class 4405 Default constructor
2974 </summary> 4406 </summary>
2975 <param name="type">The type of collision that occurred</param>
2976 <param name="perp">The ID of the agent or object that perpetrated the agression</param>
2977 <param name="victim">The ID of the Victim</param>
2978 <param name="magnitude">The strength of the collision</param>
2979 <param name="time">The Time the collision occurred</param>
2980 </member> 4407 </member>
2981 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Type"> 4408 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.Position">
2982 <summary>Get the Type of collision</summary> 4409 <summary></summary>
2983 </member> 4410 </member>
2984 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Aggressor"> 4411 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.AtAxis">
2985 <summary>Get the ID of the agent or object that collided with your agent</summary> 4412 <summary></summary>
2986 </member> 4413 </member>
2987 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Victim"> 4414 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.LeftAxis">
2988 <summary>Get the ID of the agent that was attacked</summary> 4415 <summary></summary>
2989 </member> 4416 </member>
2990 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Magnitude"> 4417 <member name="P:OpenMetaverse.AgentManager.AgentMovement.AgentCamera.UpAxis">
2991 <summary>A value indicating the strength of the collision</summary> 4418 <summary></summary>
2992 </member> 4419 </member>
2993 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Time"> 4420 <member name="T:OpenMetaverse.AgentManager.AttachmentResourcesCallback">
2994 <summary>Get the time the collision occurred</summary> 4421 <summary>
4422 Called once attachment resource usage information has been collected
4423 </summary>
4424 <param name="success">Indicates if operation was successfull</param>
4425 <param name="info">Attachment resource usage information</param>
2995 </member> 4426 </member>
2996 <member name="T:OpenMetaverse.RegionCrossedEventArgs"> 4427 <member name="T:OpenMetaverse.Assets.AssetClothing">
2997 <summary>Data sent to your agent when it crosses region boundaries</summary> 4428 <summary>
4429 Represents an <seealso cref="T:OpenMetaverse.Assets.AssetWearable"/> that can be worn on an avatar
4430 such as a Shirt, Pants, etc.
4431 </summary>
2998 </member> 4432 </member>
2999 <member name="M:OpenMetaverse.RegionCrossedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Simulator)"> 4433 <member name="T:OpenMetaverse.Assets.AssetWearable">
3000 <summary> 4434 <summary>
3001 Construct a new instance of the RegionCrossedEventArgs class 4435 Represents a Wearable Asset, Clothing, Hair, Skin, Etc
3002 </summary> 4436 </summary>
3003 <param name="oldSim">The simulator your agent just left</param>
3004 <param name="newSim">The simulator your agent is now in</param>
3005 </member> 4437 </member>
3006 <member name="P:OpenMetaverse.RegionCrossedEventArgs.OldSimulator"> 4438 <member name="F:OpenMetaverse.Assets.AssetWearable.Name">
3007 <summary>Get the simulator your agent just left</summary> 4439 <summary>A string containing the name of the asset</summary>
3008 </member> 4440 </member>
3009 <member name="P:OpenMetaverse.RegionCrossedEventArgs.NewSimulator"> 4441 <member name="F:OpenMetaverse.Assets.AssetWearable.Description">
3010 <summary>Get the simulator your agent is now in</summary> 4442 <summary>A string containing a short description of the asset</summary>
3011 </member> 4443 </member>
3012 <member name="T:OpenMetaverse.GroupChatJoinedEventArgs"> 4444 <member name="F:OpenMetaverse.Assets.AssetWearable.WearableType">
3013 <summary>Data sent from the simulator when your agent joins a group chat session</summary> 4445 <summary>The Assets WearableType</summary>
3014 </member> 4446 </member>
3015 <member name="M:OpenMetaverse.GroupChatJoinedEventArgs.#ctor(OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,System.Boolean)"> 4447 <member name="F:OpenMetaverse.Assets.AssetWearable.ForSale">
4448 <summary>The For-Sale status of the object</summary>
4449 </member>
4450 <member name="F:OpenMetaverse.Assets.AssetWearable.SalePrice">
4451 <summary>An Integer representing the purchase price of the asset</summary>
4452 </member>
4453 <member name="F:OpenMetaverse.Assets.AssetWearable.Creator">
4454 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the assets creator</summary>
4455 </member>
4456 <member name="F:OpenMetaverse.Assets.AssetWearable.Owner">
4457 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the assets current owner</summary>
4458 </member>
4459 <member name="F:OpenMetaverse.Assets.AssetWearable.LastOwner">
4460 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the assets prior owner</summary>
4461 </member>
4462 <member name="F:OpenMetaverse.Assets.AssetWearable.Group">
4463 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the Group this asset is set to</summary>
4464 </member>
4465 <member name="F:OpenMetaverse.Assets.AssetWearable.GroupOwned">
4466 <summary>True if the asset is owned by a <seealso cref="F:OpenMetaverse.Assets.AssetWearable.Group"/></summary>
4467 </member>
4468 <member name="F:OpenMetaverse.Assets.AssetWearable.Permissions">
4469 <summary>The Permissions mask of the asset</summary>
4470 </member>
4471 <member name="F:OpenMetaverse.Assets.AssetWearable.Params">
4472 <summary>A Dictionary containing Key/Value pairs of the objects parameters</summary>
4473 </member>
4474 <member name="F:OpenMetaverse.Assets.AssetWearable.Textures">
4475 <summary>A Dictionary containing Key/Value pairs where the Key is the textures Index and the Value is the Textures <seealso cref="T:OpenMetaverse.UUID"/></summary>
4476 </member>
4477 <member name="M:OpenMetaverse.Assets.AssetWearable.#ctor">
4478 <summary>Initializes a new instance of an AssetWearable object</summary>
4479 </member>
4480 <member name="M:OpenMetaverse.Assets.AssetWearable.#ctor(OpenMetaverse.UUID,System.Byte[])">
4481 <summary>Initializes a new instance of an AssetWearable object with parameters</summary>
4482 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
4483 <param name="assetData">A byte array containing the raw asset data</param>
4484 </member>
4485 <member name="M:OpenMetaverse.Assets.AssetWearable.Decode">
3016 <summary> 4486 <summary>
3017 Construct a new instance of the GroupChatJoinedEventArgs class 4487 Decode an assets byte encoded data to a string
3018 </summary> 4488 </summary>
3019 <param name="groupChatSessionID">The ID of the session</param> 4489 <returns>true if the asset data was decoded successfully</returns>
3020 <param name="sessionName">The name of the session</param>
3021 <param name="tmpSessionID">A temporary session id used for establishing new sessions</param>
3022 <param name="success">True of your agent successfully joined the session</param>
3023 </member>
3024 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.SessionID">
3025 <summary>Get the ID of the group chat session</summary>
3026 </member> 4490 </member>
3027 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.SessionName"> 4491 <member name="M:OpenMetaverse.Assets.AssetWearable.Encode">
3028 <summary>Get the name of the session</summary> 4492 <summary>
4493 Encode the assets string represantion into a format consumable by the asset server
4494 </summary>
3029 </member> 4495 </member>
3030 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.TmpSessionID"> 4496 <member name="M:OpenMetaverse.Assets.AssetClothing.#ctor">
3031 <summary>Get the temporary session ID used for establishing new sessions</summary> 4497 <summary>Initializes a new instance of an AssetScriptBinary object</summary>
3032 </member> 4498 </member>
3033 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.Success"> 4499 <member name="M:OpenMetaverse.Assets.AssetClothing.#ctor(OpenMetaverse.UUID,System.Byte[])">
3034 <summary>True if your agent successfully joined the session</summary> 4500 <summary>Initializes a new instance of an AssetScriptBinary object with parameters</summary>
4501 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
4502 <param name="assetData">A byte array containing the raw asset data</param>
3035 </member> 4503 </member>
3036 <member name="T:OpenMetaverse.AlertMessageEventArgs"> 4504 <member name="P:OpenMetaverse.Assets.AssetClothing.AssetType">
3037 <summary>Data sent by the simulator containing urgent messages</summary> 4505 <summary>Override the base classes AssetType</summary>
3038 </member> 4506 </member>
3039 <member name="M:OpenMetaverse.AlertMessageEventArgs.#ctor(System.String)"> 4507 <member name="T:OpenMetaverse.PacketFrequency">
3040 <summary> 4508 <summary>
3041 Construct a new instance of the AlertMessageEventArgs class 4509
3042 </summary> 4510 </summary>
3043 <param name="message">The alert message</param>
3044 </member> 4511 </member>
3045 <member name="P:OpenMetaverse.AlertMessageEventArgs.Message"> 4512 <member name="F:OpenMetaverse.PacketFrequency.Low">
3046 <summary>Get the alert message</summary> 4513 <summary></summary>
3047 </member> 4514 </member>
3048 <member name="T:OpenMetaverse.ScriptControlEventArgs"> 4515 <member name="F:OpenMetaverse.PacketFrequency.Medium">
3049 <summary>Data sent by a script requesting to take or release specified controls to your agent</summary> 4516 <summary></summary>
3050 </member> 4517 </member>
3051 <member name="M:OpenMetaverse.ScriptControlEventArgs.#ctor(OpenMetaverse.ScriptControlChange,System.Boolean,System.Boolean)"> 4518 <member name="F:OpenMetaverse.PacketFrequency.High">
4519 <summary></summary>
4520 </member>
4521 <member name="T:OpenMetaverse.Packets.MalformedDataException">
3052 <summary> 4522 <summary>
3053 Construct a new instance of the ScriptControlEventArgs class 4523 Thrown when a packet could not be successfully deserialized
3054 </summary> 4524 </summary>
3055 <param name="controls">The controls the script is attempting to take or release to the agent</param>
3056 <param name="pass">True if the script is passing controls back to the agent</param>
3057 <param name="take">True if the script is requesting controls be released to the script</param>
3058 </member> 4525 </member>
3059 <member name="P:OpenMetaverse.ScriptControlEventArgs.Controls"> 4526 <member name="M:OpenMetaverse.Packets.MalformedDataException.#ctor">
3060 <summary>Get the controls the script is attempting to take or release to the agent</summary> 4527 <summary>
4528 Default constructor
4529 </summary>
3061 </member> 4530 </member>
3062 <member name="P:OpenMetaverse.ScriptControlEventArgs.Pass"> 4531 <member name="M:OpenMetaverse.Packets.MalformedDataException.#ctor(System.String)">
3063 <summary>True if the script is passing controls back to the agent</summary> 4532 <summary>
4533 Constructor that takes an additional error message
4534 </summary>
4535 <param name="Message">An error message to attach to this exception</param>
3064 </member> 4536 </member>
3065 <member name="P:OpenMetaverse.ScriptControlEventArgs.Take"> 4537 <member name="T:OpenMetaverse.Packets.Header">
3066 <summary>True if the script is requesting controls be released to the script</summary> 4538 <summary>
4539 The header of a message template packet. Holds packet flags, sequence
4540 number, packet ID, and any ACKs that will be appended at the end of
4541 the packet
4542 </summary>
3067 </member> 4543 </member>
3068 <member name="T:OpenMetaverse.CameraConstraintEventArgs"> 4544 <member name="M:OpenMetaverse.Packets.Header.AcksToBytes(System.Byte[],System.Int32@)">
3069 <summary> 4545 <summary>
3070 Data sent from the simulator to an agent to indicate its view limits 4546 Convert the AckList to a byte array, used for packet serializing
3071 </summary> 4547 </summary>
4548 <param name="bytes">Reference to the target byte array</param>
4549 <param name="i">Beginning position to start writing to in the byte
4550 array, will be updated with the ending position of the ACK list</param>
3072 </member> 4551 </member>
3073 <member name="M:OpenMetaverse.CameraConstraintEventArgs.#ctor(OpenMetaverse.Vector4)"> 4552 <member name="M:OpenMetaverse.Packets.Header.BuildHeader(System.Byte[],System.Int32@,System.Int32@)">
3074 <summary> 4553 <summary>
3075 Construct a new instance of the CameraConstraintEventArgs class 4554
3076 </summary> 4555 </summary>
3077 <param name="collidePlane">The collision plane</param> 4556 <param name="bytes"></param>
4557 <param name="pos"></param>
4558 <param name="packetEnd"></param>
4559 <returns></returns>
3078 </member> 4560 </member>
3079 <member name="P:OpenMetaverse.CameraConstraintEventArgs.CollidePlane"> 4561 <member name="M:OpenMetaverse.Packets.Header.CreateAckList(OpenMetaverse.Packets.Header@,System.Byte[],System.Int32@)">
3080 <summary>Get the collision plane</summary> 4562 <summary>
4563
4564 </summary>
4565 <param name="header"></param>
4566 <param name="bytes"></param>
4567 <param name="packetEnd"></param>
3081 </member> 4568 </member>
3082 <member name="T:OpenMetaverse.ScriptSensorReplyEventArgs"> 4569 <member name="T:OpenMetaverse.Packets.PacketBlock">
3083 <summary> 4570 <summary>
3084 Data containing script sensor requests which allow an agent to know the specific details 4571 A block of data in a packet. Packets are composed of one or more blocks,
3085 of a primitive sending script sensor requests 4572 each block containing one or more fields
3086 </summary> 4573 </summary>
3087 </member> 4574 </member>
3088 <member name="M:OpenMetaverse.ScriptSensorReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3,System.Single,OpenMetaverse.Quaternion,OpenMetaverse.ScriptSensorTypeFlags,OpenMetaverse.Vector3)"> 4575 <member name="M:OpenMetaverse.Packets.PacketBlock.FromBytes(System.Byte[],System.Int32@)">
3089 <summary> 4576 <summary>
3090 Construct a new instance of the ScriptSensorReplyEventArgs 4577 Create a block from a byte array
3091 </summary> 4578 </summary>
3092 <param name="requestorID">The ID of the primitive sending the sensor</param> 4579 <param name="bytes">Byte array containing the serialized block</param>
3093 <param name="groupID">The ID of the group associated with the primitive</param> 4580 <param name="i">Starting position of the block in the byte array.
3094 <param name="name">The name of the primitive sending the sensor</param> 4581 This will point to the data after the end of the block when the
3095 <param name="objectID">The ID of the primitive sending the sensor</param> 4582 call returns</param>
3096 <param name="ownerID">The ID of the owner of the primitive sending the sensor</param>
3097 <param name="position">The position of the primitive sending the sensor</param>
3098 <param name="range">The range the primitive specified to scan</param>
3099 <param name="rotation">The rotation of the primitive sending the sensor</param>
3100 <param name="type">The type of sensor the primitive sent</param>
3101 <param name="velocity">The velocity of the primitive sending the sensor</param>
3102 </member> 4583 </member>
3103 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.RequestorID"> 4584 <member name="M:OpenMetaverse.Packets.PacketBlock.ToBytes(System.Byte[],System.Int32@)">
3104 <summary>Get the ID of the primitive sending the sensor</summary> 4585 <summary>
4586 Serialize this block into a byte array
4587 </summary>
4588 <param name="bytes">Byte array to serialize this block into</param>
4589 <param name="i">Starting position in the byte array to serialize to.
4590 This will point to the position directly after the end of the
4591 serialized block when the call returns</param>
3105 </member> 4592 </member>
3106 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.GroupID"> 4593 <member name="P:OpenMetaverse.Packets.PacketBlock.Length">
3107 <summary>Get the ID of the group associated with the primitive</summary> 4594 <summary>Current length of the data in this packet</summary>
3108 </member> 4595 </member>
3109 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Name"> 4596 <member name="F:OpenMetaverse.Packets.PacketType.Default">
3110 <summary>Get the name of the primitive sending the sensor</summary> 4597 <summary>A generic value, not an actual packet type</summary>
3111 </member> 4598 </member>
3112 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.ObjectID"> 4599 <member name="M:OpenMetaverse.Packets.Packet.BuildPacket(System.String,OpenMetaverse.StructuredData.OSDMap)">
3113 <summary>Get the ID of the primitive sending the sensor</summary> 4600 <summary>
4601 Attempts to convert an LLSD structure to a known Packet type
4602 </summary>
4603 <param name="capsEventName">Event name, this must match an actual
4604 packet name for a Packet to be successfully built</param>
4605 <param name="body">LLSD to convert to a Packet</param>
4606 <returns>A Packet on success, otherwise null</returns>
3114 </member> 4607 </member>
3115 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.OwnerID"> 4608 <member name="T:OpenMetaverse.Packets.TestMessagePacket">
3116 <summary>Get the ID of the owner of the primitive sending the sensor</summary> 4609 <exclude/>
3117 </member> 4610 </member>
3118 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Position"> 4611 <member name="T:OpenMetaverse.Packets.TestMessagePacket.TestBlock1Block">
3119 <summary>Get the position of the primitive sending the sensor</summary> 4612 <exclude/>
3120 </member> 4613 </member>
3121 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Range"> 4614 <member name="T:OpenMetaverse.Packets.TestMessagePacket.NeighborBlockBlock">
3122 <summary>Get the range the primitive specified to scan</summary> 4615 <exclude/>
3123 </member> 4616 </member>
3124 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Rotation"> 4617 <member name="T:OpenMetaverse.Packets.UseCircuitCodePacket">
3125 <summary>Get the rotation of the primitive sending the sensor</summary> 4618 <exclude/>
3126 </member> 4619 </member>
3127 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Type"> 4620 <member name="T:OpenMetaverse.Packets.UseCircuitCodePacket.CircuitCodeBlock">
3128 <summary>Get the type of sensor the primitive sent</summary> 4621 <exclude/>
3129 </member> 4622 </member>
3130 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Velocity"> 4623 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket">
3131 <summary>Get the velocity of the primitive sending the sensor</summary> 4624 <exclude/>
3132 </member> 4625 </member>
3133 <member name="T:OpenMetaverse.AvatarSitResponseEventArgs"> 4626 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket.TelehubBlockBlock">
3134 <summary>Contains the response data returned from the simulator in response to a <see cref="!:RequestSit" /></summary> 4627 <exclude/>
3135 </member> 4628 </member>
3136 <member name="M:OpenMetaverse.AvatarSitResponseEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Boolean,OpenMetaverse.Vector3,OpenMetaverse.Quaternion)"> 4629 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket.SpawnPointBlockBlock">
3137 <summary>Construct a new instance of the AvatarSitResponseEventArgs object</summary> 4630 <exclude/>
3138 </member> 4631 </member>
3139 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.ObjectID"> 4632 <member name="T:OpenMetaverse.Packets.EconomyDataRequestPacket">
3140 <summary>Get the ID of the primitive the agent will be sitting on</summary> 4633 <exclude/>
3141 </member> 4634 </member>
3142 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.Autopilot"> 4635 <member name="T:OpenMetaverse.Packets.EconomyDataPacket">
3143 <summary>True if the simulator Autopilot functions were involved</summary> 4636 <exclude/>
3144 </member> 4637 </member>
3145 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.CameraAtOffset"> 4638 <member name="T:OpenMetaverse.Packets.EconomyDataPacket.InfoBlock">
3146 <summary>Get the camera offset of the agent when seated</summary> 4639 <exclude/>
3147 </member> 4640 </member>
3148 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.CameraEyeOffset"> 4641 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket">
3149 <summary>Get the camera eye offset of the agent when seated</summary> 4642 <exclude/>
3150 </member> 4643 </member>
3151 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.ForceMouselook"> 4644 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket.AgentDataBlock">
3152 <summary>True of the agent will be in mouselook mode when seated</summary> 4645 <exclude/>
3153 </member> 4646 </member>
3154 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.SitPosition"> 4647 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket.DataBlock">
3155 <summary>Get the position of the agent when seated</summary> 4648 <exclude/>
3156 </member> 4649 </member>
3157 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.SitRotation"> 4650 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket">
3158 <summary>Get the rotation of the agent when seated</summary> 4651 <exclude/>
3159 </member> 4652 </member>
3160 <member name="T:OpenMetaverse.ChatSessionMemberAddedEventArgs"> 4653 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket.AgentDataBlock">
3161 <summary>Data sent when an agent joins a chat session your agent is currently participating in</summary> 4654 <exclude/>
3162 </member> 4655 </member>
3163 <member name="M:OpenMetaverse.ChatSessionMemberAddedEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 4656 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket.DataBlock">
3164 <summary> 4657 <exclude/>
3165 Construct a new instance of the ChatSessionMemberAddedEventArgs object
3166 </summary>
3167 <param name="sessionID">The ID of the chat session</param>
3168 <param name="agentID">The ID of the agent joining</param>
3169 </member> 4658 </member>
3170 <member name="P:OpenMetaverse.ChatSessionMemberAddedEventArgs.SessionID"> 4659 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket">
3171 <summary>Get the ID of the chat session</summary> 4660 <exclude/>
3172 </member> 4661 </member>
3173 <member name="P:OpenMetaverse.ChatSessionMemberAddedEventArgs.AgentID"> 4662 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.AgentDataBlock">
3174 <summary>Get the ID of the agent that joined</summary> 4663 <exclude/>
3175 </member> 4664 </member>
3176 <member name="T:OpenMetaverse.ChatSessionMemberLeftEventArgs"> 4665 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.TransactionDataBlock">
3177 <summary>Data sent when an agent exits a chat session your agent is currently participating in</summary> 4666 <exclude/>
3178 </member> 4667 </member>
3179 <member name="M:OpenMetaverse.ChatSessionMemberLeftEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 4668 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.QueryDataBlock">
3180 <summary> 4669 <exclude/>
3181 Construct a new instance of the ChatSessionMemberLeftEventArgs object
3182 </summary>
3183 <param name="sessionID">The ID of the chat session</param>
3184 <param name="agentID">The ID of the Agent that left</param>
3185 </member> 4670 </member>
3186 <member name="P:OpenMetaverse.ChatSessionMemberLeftEventArgs.SessionID"> 4671 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket">
3187 <summary>Get the ID of the chat session</summary> 4672 <exclude/>
3188 </member> 4673 </member>
3189 <member name="P:OpenMetaverse.ChatSessionMemberLeftEventArgs.AgentID"> 4674 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.AgentDataBlock">
3190 <summary>Get the ID of the agent that left</summary> 4675 <exclude/>
3191 </member> 4676 </member>
3192 <member name="T:OpenMetaverse.SetDisplayNameReplyEventArgs"> 4677 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.TransactionDataBlock">
3193 <summary>Event arguments with the result of setting display name operation</summary> 4678 <exclude/>
3194 </member> 4679 </member>
3195 <member name="M:OpenMetaverse.SetDisplayNameReplyEventArgs.#ctor(System.Int32,System.String,OpenMetaverse.AgentDisplayName)"> 4680 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.QueryDataBlock">
3196 <summary>Default constructor</summary> 4681 <exclude/>
3197 </member> 4682 </member>
3198 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.Status"> 4683 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket">
3199 <summary>Status code, 200 indicates settign display name was successful</summary> 4684 <exclude/>
3200 </member> 4685 </member>
3201 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.Reason"> 4686 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket.AgentDataBlock">
3202 <summary>Textual description of the status</summary> 4687 <exclude/>
3203 </member> 4688 </member>
3204 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.DisplayName"> 4689 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket.QueryDataBlock">
3205 <summary>Details of the newly set display name</summary> 4690 <exclude/>
3206 </member> 4691 </member>
3207 <member name="T:OpenMetaverse.AgentThrottle"> 4692 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket">
3208 <summary> 4693 <exclude/>
3209 Throttles the network traffic for various different traffic types.
3210 Access this class through GridClient.Throttle
3211 </summary>
3212 </member> 4694 </member>
3213 <member name="M:OpenMetaverse.AgentThrottle.#ctor(OpenMetaverse.GridClient)"> 4695 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket.AgentDataBlock">
3214 <summary> 4696 <exclude/>
3215 Default constructor, uses a default high total of 1500 KBps (1536000)
3216 </summary>
3217 </member> 4697 </member>
3218 <member name="M:OpenMetaverse.AgentThrottle.#ctor(System.Byte[],System.Int32)"> 4698 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket.QueryDataBlock">
3219 <summary> 4699 <exclude/>
3220 Constructor that decodes an existing AgentThrottle packet in to
3221 individual values
3222 </summary>
3223 <param name="data">Reference to the throttle data in an AgentThrottle
3224 packet</param>
3225 <param name="pos">Offset position to start reading at in the
3226 throttle data</param>
3227 <remarks>This is generally not needed in clients as the server will
3228 never send a throttle packet to the client</remarks>
3229 </member> 4700 </member>
3230 <member name="P:OpenMetaverse.AgentThrottle.Resend"> 4701 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket">
3231 <summary>Maximum bits per second for resending unacknowledged packets</summary> 4702 <exclude/>
3232 </member> 4703 </member>
3233 <member name="P:OpenMetaverse.AgentThrottle.Land"> 4704 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.AgentDataBlock">
3234 <summary>Maximum bits per second for LayerData terrain</summary> 4705 <exclude/>
3235 </member> 4706 </member>
3236 <member name="P:OpenMetaverse.AgentThrottle.Wind"> 4707 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.QueryDataBlock">
3237 <summary>Maximum bits per second for LayerData wind data</summary> 4708 <exclude/>
3238 </member> 4709 </member>
3239 <member name="P:OpenMetaverse.AgentThrottle.Cloud"> 4710 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.QueryRepliesBlock">
3240 <summary>Maximum bits per second for LayerData clouds</summary> 4711 <exclude/>
3241 </member> 4712 </member>
3242 <member name="P:OpenMetaverse.AgentThrottle.Task"> 4713 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.StatusDataBlock">
3243 <summary>Unknown, includes object data</summary> 4714 <exclude/>
3244 </member> 4715 </member>
3245 <member name="P:OpenMetaverse.AgentThrottle.Texture"> 4716 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket">
3246 <summary>Maximum bits per second for textures</summary> 4717 <exclude/>
3247 </member> 4718 </member>
3248 <member name="P:OpenMetaverse.AgentThrottle.Asset"> 4719 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.AgentDataBlock">
3249 <summary>Maximum bits per second for downloaded assets</summary> 4720 <exclude/>
3250 </member> 4721 </member>
3251 <member name="P:OpenMetaverse.AgentThrottle.Total"> 4722 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.QueryDataBlock">
3252 <summary>Maximum bits per second the entire connection, divided up 4723 <exclude/>
3253 between invidiual streams using default multipliers</summary>
3254 </member> 4724 </member>
3255 <member name="M:OpenMetaverse.AgentThrottle.Set"> 4725 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.QueryRepliesBlock">
3256 <summary> 4726 <exclude/>
3257 Send an AgentThrottle packet to the current server using the
3258 current values
3259 </summary>
3260 </member> 4727 </member>
3261 <member name="M:OpenMetaverse.AgentThrottle.Set(OpenMetaverse.Simulator)"> 4728 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket">
3262 <summary> 4729 <exclude/>
3263 Send an AgentThrottle packet to the specified server using the
3264 current values
3265 </summary>
3266 </member> 4730 </member>
3267 <member name="M:OpenMetaverse.AgentThrottle.ToBytes"> 4731 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.AgentDataBlock">
3268 <summary> 4732 <exclude/>
3269 Convert the current throttle values to a byte array that can be put
3270 in an AgentThrottle packet
3271 </summary>
3272 <returns>Byte array containing all the throttle values</returns>
3273 </member> 4733 </member>
3274 <member name="T:OpenMetaverse.Animations"> 4734 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.QueryDataBlock">
3275 <summary> 4735 <exclude/>
3276 Static pre-defined animations available to all agents
3277 </summary>
3278 </member> 4736 </member>
3279 <member name="F:OpenMetaverse.Animations.AFRAID"> 4737 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.QueryRepliesBlock">
3280 <summary>Agent with afraid expression on face</summary> 4738 <exclude/>
3281 </member> 4739 </member>
3282 <member name="F:OpenMetaverse.Animations.AIM_BAZOOKA_R"> 4740 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.StatusDataBlock">
3283 <summary>Agent aiming a bazooka (right handed)</summary> 4741 <exclude/>
3284 </member> 4742 </member>
3285 <member name="F:OpenMetaverse.Animations.AIM_BOW_L"> 4743 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket">
3286 <summary>Agent aiming a bow (left handed)</summary> 4744 <exclude/>
3287 </member> 4745 </member>
3288 <member name="F:OpenMetaverse.Animations.AIM_HANDGUN_R"> 4746 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.AgentDataBlock">
3289 <summary>Agent aiming a hand gun (right handed)</summary> 4747 <exclude/>
3290 </member> 4748 </member>
3291 <member name="F:OpenMetaverse.Animations.AIM_RIFLE_R"> 4749 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.QueryDataBlock">
3292 <summary>Agent aiming a rifle (right handed)</summary> 4750 <exclude/>
3293 </member> 4751 </member>
3294 <member name="F:OpenMetaverse.Animations.ANGRY"> 4752 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.QueryRepliesBlock">
3295 <summary>Agent with angry expression on face</summary> 4753 <exclude/>
3296 </member> 4754 </member>
3297 <member name="F:OpenMetaverse.Animations.AWAY"> 4755 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket">
3298 <summary>Agent hunched over (away)</summary> 4756 <exclude/>
3299 </member> 4757 </member>
3300 <member name="F:OpenMetaverse.Animations.BACKFLIP"> 4758 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket.AgentDataBlock">
3301 <summary>Agent doing a backflip</summary> 4759 <exclude/>
3302 </member> 4760 </member>
3303 <member name="F:OpenMetaverse.Animations.BELLY_LAUGH"> 4761 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket.QueryDataBlock">
3304 <summary>Agent laughing while holding belly</summary> 4762 <exclude/>
3305 </member> 4763 </member>
3306 <member name="F:OpenMetaverse.Animations.BLOW_KISS"> 4764 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket">
3307 <summary>Agent blowing a kiss</summary> 4765 <exclude/>
3308 </member> 4766 </member>
3309 <member name="F:OpenMetaverse.Animations.BORED"> 4767 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.AgentDataBlock">
3310 <summary>Agent with bored expression on face</summary> 4768 <exclude/>
3311 </member> 4769 </member>
3312 <member name="F:OpenMetaverse.Animations.BOW"> 4770 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.QueryDataBlock">
3313 <summary>Agent bowing to audience</summary> 4771 <exclude/>
3314 </member> 4772 </member>
3315 <member name="F:OpenMetaverse.Animations.BRUSH"> 4773 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.QueryRepliesBlock">
3316 <summary>Agent brushing himself/herself off</summary> 4774 <exclude/>
3317 </member> 4775 </member>
3318 <member name="F:OpenMetaverse.Animations.BUSY"> 4776 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.StatusDataBlock">
3319 <summary>Agent in busy mode</summary> 4777 <exclude/>
3320 </member> 4778 </member>
3321 <member name="F:OpenMetaverse.Animations.CLAP"> 4779 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket">
3322 <summary>Agent clapping hands</summary> 4780 <exclude/>
3323 </member> 4781 </member>
3324 <member name="F:OpenMetaverse.Animations.COURTBOW"> 4782 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket.AgentDataBlock">
3325 <summary>Agent doing a curtsey bow</summary> 4783 <exclude/>
3326 </member> 4784 </member>
3327 <member name="F:OpenMetaverse.Animations.CROUCH"> 4785 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket.DataBlock">
3328 <summary>Agent crouching</summary> 4786 <exclude/>
3329 </member> 4787 </member>
3330 <member name="F:OpenMetaverse.Animations.CROUCHWALK"> 4788 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket">
3331 <summary>Agent crouching while walking</summary> 4789 <exclude/>
3332 </member> 4790 </member>
3333 <member name="F:OpenMetaverse.Animations.CRY"> 4791 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket.AgentDataBlock">
3334 <summary>Agent crying</summary> 4792 <exclude/>
3335 </member> 4793 </member>
3336 <member name="F:OpenMetaverse.Animations.CUSTOMIZE"> 4794 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket.DataBlock">
3337 <summary>Agent unanimated with arms out (e.g. setting appearance)</summary> 4795 <exclude/>
3338 </member> 4796 </member>
3339 <member name="F:OpenMetaverse.Animations.CUSTOMIZE_DONE"> 4797 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket">
3340 <summary>Agent re-animated after set appearance finished</summary> 4798 <exclude/>
3341 </member> 4799 </member>
3342 <member name="F:OpenMetaverse.Animations.DANCE1"> 4800 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket.AgentDataBlock">
3343 <summary>Agent dancing</summary> 4801 <exclude/>
3344 </member> 4802 </member>
3345 <member name="F:OpenMetaverse.Animations.DANCE2"> 4803 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket.DataBlock">
3346 <summary>Agent dancing</summary> 4804 <exclude/>
3347 </member> 4805 </member>
3348 <member name="F:OpenMetaverse.Animations.DANCE3"> 4806 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket">
3349 <summary>Agent dancing</summary> 4807 <exclude/>
3350 </member> 4808 </member>
3351 <member name="F:OpenMetaverse.Animations.DANCE4"> 4809 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket.AgentDataBlock">
3352 <summary>Agent dancing</summary> 4810 <exclude/>
3353 </member> 4811 </member>
3354 <member name="F:OpenMetaverse.Animations.DANCE5"> 4812 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket.DataBlock">
3355 <summary>Agent dancing</summary> 4813 <exclude/>
3356 </member> 4814 </member>
3357 <member name="F:OpenMetaverse.Animations.DANCE6"> 4815 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket">
3358 <summary>Agent dancing</summary> 4816 <exclude/>
3359 </member> 4817 </member>
3360 <member name="F:OpenMetaverse.Animations.DANCE7"> 4818 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket.AgentDataBlock">
3361 <summary>Agent dancing</summary> 4819 <exclude/>
3362 </member> 4820 </member>
3363 <member name="F:OpenMetaverse.Animations.DANCE8"> 4821 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket.DataBlock">
3364 <summary>Agent dancing</summary> 4822 <exclude/>
3365 </member> 4823 </member>
3366 <member name="F:OpenMetaverse.Animations.DEAD"> 4824 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket">
3367 <summary>Agent on ground unanimated</summary> 4825 <exclude/>
3368 </member> 4826 </member>
3369 <member name="F:OpenMetaverse.Animations.DRINK"> 4827 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket.AgentDataBlock">
3370 <summary>Agent boozing it up</summary> 4828 <exclude/>
3371 </member> 4829 </member>
3372 <member name="F:OpenMetaverse.Animations.EMBARRASSED"> 4830 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket.DataBlock">
3373 <summary>Agent with embarassed expression on face</summary> 4831 <exclude/>
3374 </member> 4832 </member>
3375 <member name="F:OpenMetaverse.Animations.EXPRESS_AFRAID"> 4833 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket">
3376 <summary>Agent with afraid expression on face</summary> 4834 <exclude/>
3377 </member> 4835 </member>
3378 <member name="F:OpenMetaverse.Animations.EXPRESS_ANGER"> 4836 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket.AgentDataBlock">
3379 <summary>Agent with angry expression on face</summary> 4837 <exclude/>
3380 </member> 4838 </member>
3381 <member name="F:OpenMetaverse.Animations.EXPRESS_BORED"> 4839 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket.QueryDataBlock">
3382 <summary>Agent with bored expression on face</summary> 4840 <exclude/>
3383 </member> 4841 </member>
3384 <member name="F:OpenMetaverse.Animations.EXPRESS_CRY"> 4842 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket">
3385 <summary>Agent crying</summary> 4843 <exclude/>
3386 </member> 4844 </member>
3387 <member name="F:OpenMetaverse.Animations.EXPRESS_DISDAIN"> 4845 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.AgentDataBlock">
3388 <summary>Agent showing disdain (dislike) for something</summary> 4846 <exclude/>
3389 </member> 4847 </member>
3390 <member name="F:OpenMetaverse.Animations.EXPRESS_EMBARRASSED"> 4848 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.QueryDataBlock">
3391 <summary>Agent with embarassed expression on face</summary> 4849 <exclude/>
3392 </member> 4850 </member>
3393 <member name="F:OpenMetaverse.Animations.EXPRESS_FROWN"> 4851 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.QueryRepliesBlock">
3394 <summary>Agent with frowning expression on face</summary> 4852 <exclude/>
3395 </member> 4853 </member>
3396 <member name="F:OpenMetaverse.Animations.EXPRESS_KISS"> 4854 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket">
3397 <summary>Agent with kissy face</summary> 4855 <exclude/>
3398 </member> 4856 </member>
3399 <member name="F:OpenMetaverse.Animations.EXPRESS_LAUGH"> 4857 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket.AgentDataBlock">
3400 <summary>Agent expressing laughgter</summary> 4858 <exclude/>
3401 </member> 4859 </member>
3402 <member name="F:OpenMetaverse.Animations.EXPRESS_OPEN_MOUTH"> 4860 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket.QueryDataBlock">
3403 <summary>Agent with open mouth</summary> 4861 <exclude/>
3404 </member> 4862 </member>
3405 <member name="F:OpenMetaverse.Animations.EXPRESS_REPULSED"> 4863 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket">
3406 <summary>Agent with repulsed expression on face</summary> 4864 <exclude/>
3407 </member> 4865 </member>
3408 <member name="F:OpenMetaverse.Animations.EXPRESS_SAD"> 4866 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.AgentDataBlock">
3409 <summary>Agent expressing sadness</summary> 4867 <exclude/>
3410 </member> 4868 </member>
3411 <member name="F:OpenMetaverse.Animations.EXPRESS_SHRUG"> 4869 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.QueryDataBlock">
3412 <summary>Agent shrugging shoulders</summary> 4870 <exclude/>
3413 </member> 4871 </member>
3414 <member name="F:OpenMetaverse.Animations.EXPRESS_SMILE"> 4872 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.QueryRepliesBlock">
3415 <summary>Agent with a smile</summary> 4873 <exclude/>
3416 </member> 4874 </member>
3417 <member name="F:OpenMetaverse.Animations.EXPRESS_SURPRISE"> 4875 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket">
3418 <summary>Agent expressing surprise</summary> 4876 <exclude/>
3419 </member> 4877 </member>
3420 <member name="F:OpenMetaverse.Animations.EXPRESS_TONGUE_OUT"> 4878 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket.AgentDataBlock">
3421 <summary>Agent sticking tongue out</summary> 4879 <exclude/>
3422 </member> 4880 </member>
3423 <member name="F:OpenMetaverse.Animations.EXPRESS_TOOTHSMILE"> 4881 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket.DataBlock">
3424 <summary>Agent with big toothy smile</summary> 4882 <exclude/>
3425 </member> 4883 </member>
3426 <member name="F:OpenMetaverse.Animations.EXPRESS_WINK"> 4884 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket">
3427 <summary>Agent winking</summary> 4885 <exclude/>
3428 </member> 4886 </member>
3429 <member name="F:OpenMetaverse.Animations.EXPRESS_WORRY"> 4887 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket.AgentDataBlock">
3430 <summary>Agent expressing worry</summary> 4888 <exclude/>
3431 </member> 4889 </member>
3432 <member name="F:OpenMetaverse.Animations.FALLDOWN"> 4890 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket.DataBlock">
3433 <summary>Agent falling down</summary> 4891 <exclude/>
3434 </member> 4892 </member>
3435 <member name="F:OpenMetaverse.Animations.FEMALE_WALK"> 4893 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket">
3436 <summary>Agent walking (feminine version)</summary> 4894 <exclude/>
3437 </member> 4895 </member>
3438 <member name="F:OpenMetaverse.Animations.FINGER_WAG"> 4896 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket.AgentDataBlock">
3439 <summary>Agent wagging finger (disapproval)</summary> 4897 <exclude/>
3440 </member> 4898 </member>
3441 <member name="F:OpenMetaverse.Animations.FIST_PUMP"> 4899 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket.ParcelDataBlock">
3442 <summary>I'm not sure I want to know</summary> 4900 <exclude/>
3443 </member> 4901 </member>
3444 <member name="F:OpenMetaverse.Animations.FLY"> 4902 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersReplyPacket">
3445 <summary>Agent in superman position</summary> 4903 <exclude/>
3446 </member> 4904 </member>
3447 <member name="F:OpenMetaverse.Animations.FLYSLOW"> 4905 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersReplyPacket.DataBlock">
3448 <summary>Agent in superman position</summary> 4906 <exclude/>
3449 </member> 4907 </member>
3450 <member name="F:OpenMetaverse.Animations.HELLO"> 4908 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket">
3451 <summary>Agent greeting another</summary> 4909 <exclude/>
3452 </member> 4910 </member>
3453 <member name="F:OpenMetaverse.Animations.HOLD_BAZOOKA_R"> 4911 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket.AgentDataBlock">
3454 <summary>Agent holding bazooka (right handed)</summary> 4912 <exclude/>
3455 </member> 4913 </member>
3456 <member name="F:OpenMetaverse.Animations.HOLD_BOW_L"> 4914 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket.DataBlock">
3457 <summary>Agent holding a bow (left handed)</summary> 4915 <exclude/>
3458 </member> 4916 </member>
3459 <member name="F:OpenMetaverse.Animations.HOLD_HANDGUN_R"> 4917 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket">
3460 <summary>Agent holding a handgun (right handed)</summary> 4918 <exclude/>
3461 </member> 4919 </member>
3462 <member name="F:OpenMetaverse.Animations.HOLD_RIFLE_R"> 4920 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket.AgentDataBlock">
3463 <summary>Agent holding a rifle (right handed)</summary> 4921 <exclude/>
3464 </member> 4922 </member>
3465 <member name="F:OpenMetaverse.Animations.HOLD_THROW_R"> 4923 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket.DataBlock">
3466 <summary>Agent throwing an object (right handed)</summary> 4924 <exclude/>
3467 </member> 4925 </member>
3468 <member name="F:OpenMetaverse.Animations.HOVER"> 4926 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket">
3469 <summary>Agent in static hover</summary> 4927 <exclude/>
3470 </member> 4928 </member>
3471 <member name="F:OpenMetaverse.Animations.HOVER_DOWN"> 4929 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket.AgentDataBlock">
3472 <summary>Agent hovering downward</summary> 4930 <exclude/>
3473 </member> 4931 </member>
3474 <member name="F:OpenMetaverse.Animations.HOVER_UP"> 4932 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket.DataBlock">
3475 <summary>Agent hovering upward</summary> 4933 <exclude/>
3476 </member> 4934 </member>
3477 <member name="F:OpenMetaverse.Animations.IMPATIENT"> 4935 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket">
3478 <summary>Agent being impatient</summary> 4936 <exclude/>
3479 </member> 4937 </member>
3480 <member name="F:OpenMetaverse.Animations.JUMP"> 4938 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket.AgentDataBlock">
3481 <summary>Agent jumping</summary> 4939 <exclude/>
3482 </member> 4940 </member>
3483 <member name="F:OpenMetaverse.Animations.JUMP_FOR_JOY"> 4941 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket.InfoBlock">
3484 <summary>Agent jumping with fervor</summary> 4942 <exclude/>
3485 </member> 4943 </member>
3486 <member name="F:OpenMetaverse.Animations.KISS_MY_BUTT"> 4944 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket">
3487 <summary>Agent point to lips then rear end</summary> 4945 <exclude/>
3488 </member> 4946 </member>
3489 <member name="F:OpenMetaverse.Animations.LAND"> 4947 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket.AgentDataBlock">
3490 <summary>Agent landing from jump, finished flight, etc</summary> 4948 <exclude/>
3491 </member> 4949 </member>
3492 <member name="F:OpenMetaverse.Animations.LAUGH_SHORT"> 4950 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket.InfoBlock">
3493 <summary>Agent laughing</summary> 4951 <exclude/>
3494 </member> 4952 </member>
3495 <member name="F:OpenMetaverse.Animations.MEDIUM_LAND"> 4953 <member name="T:OpenMetaverse.Packets.TeleportLocalPacket">
3496 <summary>Agent landing from jump, finished flight, etc</summary> 4954 <exclude/>
3497 </member> 4955 </member>
3498 <member name="F:OpenMetaverse.Animations.MOTORCYCLE_SIT"> 4956 <member name="T:OpenMetaverse.Packets.TeleportLocalPacket.InfoBlock">
3499 <summary>Agent sitting on a motorcycle</summary> 4957 <exclude/>
3500 </member> 4958 </member>
3501 <member name="F:OpenMetaverse.Animations.MUSCLE_BEACH"> 4959 <member name="T:OpenMetaverse.Packets.TeleportLandmarkRequestPacket">
3502 <summary> 4960 <exclude/>
3503 </summary>
3504 </member> 4961 </member>
3505 <member name="F:OpenMetaverse.Animations.NO"> 4962 <member name="T:OpenMetaverse.Packets.TeleportLandmarkRequestPacket.InfoBlock">
3506 <summary>Agent moving head side to side</summary> 4963 <exclude/>
3507 </member> 4964 </member>
3508 <member name="F:OpenMetaverse.Animations.NO_UNHAPPY"> 4965 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket">
3509 <summary>Agent moving head side to side with unhappy expression</summary> 4966 <exclude/>
3510 </member> 4967 </member>
3511 <member name="F:OpenMetaverse.Animations.NYAH_NYAH"> 4968 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket.AgentDataBlock">
3512 <summary>Agent taunting another</summary> 4969 <exclude/>
3513 </member> 4970 </member>
3514 <member name="F:OpenMetaverse.Animations.ONETWO_PUNCH"> 4971 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket.InfoBlock">
3515 <summary> 4972 <exclude/>
3516 </summary>
3517 </member> 4973 </member>
3518 <member name="F:OpenMetaverse.Animations.PEACE"> 4974 <member name="T:OpenMetaverse.Packets.TeleportFinishPacket">
3519 <summary>Agent giving peace sign</summary> 4975 <exclude/>
3520 </member> 4976 </member>
3521 <member name="F:OpenMetaverse.Animations.POINT_ME"> 4977 <member name="T:OpenMetaverse.Packets.TeleportFinishPacket.InfoBlock">
3522 <summary>Agent pointing at self</summary> 4978 <exclude/>
3523 </member> 4979 </member>
3524 <member name="F:OpenMetaverse.Animations.POINT_YOU"> 4980 <member name="T:OpenMetaverse.Packets.StartLurePacket">
3525 <summary>Agent pointing at another</summary> 4981 <exclude/>
3526 </member> 4982 </member>
3527 <member name="F:OpenMetaverse.Animations.PRE_JUMP"> 4983 <member name="T:OpenMetaverse.Packets.StartLurePacket.AgentDataBlock">
3528 <summary>Agent preparing for jump (bending knees)</summary> 4984 <exclude/>
3529 </member> 4985 </member>
3530 <member name="F:OpenMetaverse.Animations.PUNCH_LEFT"> 4986 <member name="T:OpenMetaverse.Packets.StartLurePacket.InfoBlock">
3531 <summary>Agent punching with left hand</summary> 4987 <exclude/>
3532 </member> 4988 </member>
3533 <member name="F:OpenMetaverse.Animations.PUNCH_RIGHT"> 4989 <member name="T:OpenMetaverse.Packets.StartLurePacket.TargetDataBlock">
3534 <summary>Agent punching with right hand</summary> 4990 <exclude/>
3535 </member> 4991 </member>
3536 <member name="F:OpenMetaverse.Animations.REPULSED"> 4992 <member name="T:OpenMetaverse.Packets.TeleportLureRequestPacket">
3537 <summary>Agent acting repulsed</summary> 4993 <exclude/>
3538 </member> 4994 </member>
3539 <member name="F:OpenMetaverse.Animations.ROUNDHOUSE_KICK"> 4995 <member name="T:OpenMetaverse.Packets.TeleportLureRequestPacket.InfoBlock">
3540 <summary>Agent trying to be Chuck Norris</summary> 4996 <exclude/>
3541 </member> 4997 </member>
3542 <member name="F:OpenMetaverse.Animations.RPS_COUNTDOWN"> 4998 <member name="T:OpenMetaverse.Packets.TeleportCancelPacket">
3543 <summary>Rocks, Paper, Scissors 1, 2, 3</summary> 4999 <exclude/>
3544 </member> 5000 </member>
3545 <member name="F:OpenMetaverse.Animations.RPS_PAPER"> 5001 <member name="T:OpenMetaverse.Packets.TeleportCancelPacket.InfoBlock">
3546 <summary>Agent with hand flat over other hand</summary> 5002 <exclude/>
3547 </member> 5003 </member>
3548 <member name="F:OpenMetaverse.Animations.RPS_ROCK"> 5004 <member name="T:OpenMetaverse.Packets.TeleportStartPacket">
3549 <summary>Agent with fist over other hand</summary> 5005 <exclude/>
3550 </member> 5006 </member>
3551 <member name="F:OpenMetaverse.Animations.RPS_SCISSORS"> 5007 <member name="T:OpenMetaverse.Packets.TeleportStartPacket.InfoBlock">
3552 <summary>Agent with two fingers spread over other hand</summary> 5008 <exclude/>
3553 </member> 5009 </member>
3554 <member name="F:OpenMetaverse.Animations.RUN"> 5010 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket">
3555 <summary>Agent running</summary> 5011 <exclude/>
3556 </member> 5012 </member>
3557 <member name="F:OpenMetaverse.Animations.SAD"> 5013 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket.InfoBlock">
3558 <summary>Agent appearing sad</summary> 5014 <exclude/>
3559 </member> 5015 </member>
3560 <member name="F:OpenMetaverse.Animations.SALUTE"> 5016 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket.AlertInfoBlock">
3561 <summary>Agent saluting</summary> 5017 <exclude/>
3562 </member> 5018 </member>
3563 <member name="F:OpenMetaverse.Animations.SHOOT_BOW_L"> 5019 <member name="T:OpenMetaverse.Packets.UndoPacket">
3564 <summary>Agent shooting bow (left handed)</summary> 5020 <exclude/>
3565 </member> 5021 </member>
3566 <member name="F:OpenMetaverse.Animations.SHOUT"> 5022 <member name="T:OpenMetaverse.Packets.UndoPacket.AgentDataBlock">
3567 <summary>Agent cupping mouth as if shouting</summary> 5023 <exclude/>
3568 </member> 5024 </member>
3569 <member name="F:OpenMetaverse.Animations.SHRUG"> 5025 <member name="T:OpenMetaverse.Packets.UndoPacket.ObjectDataBlock">
3570 <summary>Agent shrugging shoulders</summary> 5026 <exclude/>
3571 </member> 5027 </member>
3572 <member name="F:OpenMetaverse.Animations.SIT"> 5028 <member name="T:OpenMetaverse.Packets.RedoPacket">
3573 <summary>Agent in sit position</summary> 5029 <exclude/>
3574 </member> 5030 </member>
3575 <member name="F:OpenMetaverse.Animations.SIT_FEMALE"> 5031 <member name="T:OpenMetaverse.Packets.RedoPacket.AgentDataBlock">
3576 <summary>Agent in sit position (feminine)</summary> 5032 <exclude/>
3577 </member> 5033 </member>
3578 <member name="F:OpenMetaverse.Animations.SIT_GENERIC"> 5034 <member name="T:OpenMetaverse.Packets.RedoPacket.ObjectDataBlock">
3579 <summary>Agent in sit position (generic)</summary> 5035 <exclude/>
3580 </member> 5036 </member>
3581 <member name="F:OpenMetaverse.Animations.SIT_GROUND"> 5037 <member name="T:OpenMetaverse.Packets.UndoLandPacket">
3582 <summary>Agent sitting on ground</summary> 5038 <exclude/>
3583 </member> 5039 </member>
3584 <member name="F:OpenMetaverse.Animations.SIT_GROUND_staticRAINED"> 5040 <member name="T:OpenMetaverse.Packets.UndoLandPacket.AgentDataBlock">
3585 <summary>Agent sitting on ground</summary> 5041 <exclude/>
3586 </member> 5042 </member>
3587 <member name="F:OpenMetaverse.Animations.SIT_TO_STAND"> 5043 <member name="T:OpenMetaverse.Packets.AgentPausePacket">
3588 <summary> 5044 <exclude/>
3589 </summary>
3590 </member> 5045 </member>
3591 <member name="F:OpenMetaverse.Animations.SLEEP"> 5046 <member name="T:OpenMetaverse.Packets.AgentPausePacket.AgentDataBlock">
3592 <summary>Agent sleeping on side</summary> 5047 <exclude/>
3593 </member> 5048 </member>
3594 <member name="F:OpenMetaverse.Animations.SMOKE_IDLE"> 5049 <member name="T:OpenMetaverse.Packets.AgentResumePacket">
3595 <summary>Agent smoking</summary> 5050 <exclude/>
3596 </member> 5051 </member>
3597 <member name="F:OpenMetaverse.Animations.SMOKE_INHALE"> 5052 <member name="T:OpenMetaverse.Packets.AgentResumePacket.AgentDataBlock">
3598 <summary>Agent inhaling smoke</summary> 5053 <exclude/>
3599 </member> 5054 </member>
3600 <member name="F:OpenMetaverse.Animations.SMOKE_THROW_DOWN"> 5055 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket">
3601 <summary> 5056 <exclude/>
3602 </summary>
3603 </member> 5057 </member>
3604 <member name="F:OpenMetaverse.Animations.SNAPSHOT"> 5058 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket.AgentDataBlock">
3605 <summary>Agent taking a picture</summary> 5059 <exclude/>
3606 </member> 5060 </member>
3607 <member name="F:OpenMetaverse.Animations.STAND"> 5061 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket.ChatDataBlock">
3608 <summary>Agent standing</summary> 5062 <exclude/>
3609 </member> 5063 </member>
3610 <member name="F:OpenMetaverse.Animations.STANDUP"> 5064 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket">
3611 <summary>Agent standing up</summary> 5065 <exclude/>
3612 </member> 5066 </member>
3613 <member name="F:OpenMetaverse.Animations.STAND_1"> 5067 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket.AgentDataBlock">
3614 <summary>Agent standing</summary> 5068 <exclude/>
3615 </member> 5069 </member>
3616 <member name="F:OpenMetaverse.Animations.STAND_2"> 5070 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket.ThrottleBlock">
3617 <summary>Agent standing</summary> 5071 <exclude/>
3618 </member> 5072 </member>
3619 <member name="F:OpenMetaverse.Animations.STAND_3"> 5073 <member name="T:OpenMetaverse.Packets.AgentFOVPacket">
3620 <summary>Agent standing</summary> 5074 <exclude/>
3621 </member> 5075 </member>
3622 <member name="F:OpenMetaverse.Animations.STAND_4"> 5076 <member name="T:OpenMetaverse.Packets.AgentFOVPacket.AgentDataBlock">
3623 <summary>Agent standing</summary> 5077 <exclude/>
3624 </member> 5078 </member>
3625 <member name="F:OpenMetaverse.Animations.STRETCH"> 5079 <member name="T:OpenMetaverse.Packets.AgentFOVPacket.FOVBlockBlock">
3626 <summary>Agent stretching</summary> 5080 <exclude/>
3627 </member> 5081 </member>
3628 <member name="F:OpenMetaverse.Animations.STRIDE"> 5082 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket">
3629 <summary>Agent in stride (fast walk)</summary> 5083 <exclude/>
3630 </member> 5084 </member>
3631 <member name="F:OpenMetaverse.Animations.SURF"> 5085 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket.AgentDataBlock">
3632 <summary>Agent surfing</summary> 5086 <exclude/>
3633 </member> 5087 </member>
3634 <member name="F:OpenMetaverse.Animations.SURPRISE"> 5088 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket.HeightWidthBlockBlock">
3635 <summary>Agent acting surprised</summary> 5089 <exclude/>
3636 </member> 5090 </member>
3637 <member name="F:OpenMetaverse.Animations.SWORD_STRIKE"> 5091 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket">
3638 <summary>Agent striking with a sword</summary> 5092 <exclude/>
3639 </member> 5093 </member>
3640 <member name="F:OpenMetaverse.Animations.TALK"> 5094 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.AgentDataBlock">
3641 <summary>Agent talking (lips moving)</summary> 5095 <exclude/>
3642 </member> 5096 </member>
3643 <member name="F:OpenMetaverse.Animations.TANTRUM"> 5097 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.WearableDataBlock">
3644 <summary>Agent throwing a tantrum</summary> 5098 <exclude/>
3645 </member> 5099 </member>
3646 <member name="F:OpenMetaverse.Animations.THROW_R"> 5100 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.ObjectDataBlock">
3647 <summary>Agent throwing an object (right handed)</summary> 5101 <exclude/>
3648 </member> 5102 </member>
3649 <member name="F:OpenMetaverse.Animations.TRYON_SHIRT"> 5103 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.VisualParamBlock">
3650 <summary>Agent trying on a shirt</summary> 5104 <exclude/>
3651 </member> 5105 </member>
3652 <member name="F:OpenMetaverse.Animations.TURNLEFT"> 5106 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket">
3653 <summary>Agent turning to the left</summary> 5107 <exclude/>
3654 </member> 5108 </member>
3655 <member name="F:OpenMetaverse.Animations.TURNRIGHT"> 5109 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket.AgentDataBlock">
3656 <summary>Agent turning to the right</summary> 5110 <exclude/>
3657 </member> 5111 </member>
3658 <member name="F:OpenMetaverse.Animations.TYPE"> 5112 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket.FuseBlockBlock">
3659 <summary>Agent typing</summary> 5113 <exclude/>
3660 </member> 5114 </member>
3661 <member name="F:OpenMetaverse.Animations.WALK"> 5115 <member name="T:OpenMetaverse.Packets.ImageNotInDatabasePacket">
3662 <summary>Agent walking</summary> 5116 <exclude/>
3663 </member> 5117 </member>
3664 <member name="F:OpenMetaverse.Animations.WHISPER"> 5118 <member name="T:OpenMetaverse.Packets.ImageNotInDatabasePacket.ImageIDBlock">
3665 <summary>Agent whispering</summary> 5119 <exclude/>
3666 </member> 5120 </member>
3667 <member name="F:OpenMetaverse.Animations.WHISTLE"> 5121 <member name="T:OpenMetaverse.Packets.RebakeAvatarTexturesPacket">
3668 <summary>Agent whispering with fingers in mouth</summary> 5122 <exclude/>
3669 </member> 5123 </member>
3670 <member name="F:OpenMetaverse.Animations.WINK"> 5124 <member name="T:OpenMetaverse.Packets.RebakeAvatarTexturesPacket.TextureDataBlock">
3671 <summary>Agent winking</summary> 5125 <exclude/>
3672 </member> 5126 </member>
3673 <member name="F:OpenMetaverse.Animations.WINK_HOLLYWOOD"> 5127 <member name="T:OpenMetaverse.Packets.SetAlwaysRunPacket">
3674 <summary>Agent winking</summary> 5128 <exclude/>
3675 </member> 5129 </member>
3676 <member name="F:OpenMetaverse.Animations.WORRY"> 5130 <member name="T:OpenMetaverse.Packets.SetAlwaysRunPacket.AgentDataBlock">
3677 <summary>Agent worried</summary> 5131 <exclude/>
3678 </member> 5132 </member>
3679 <member name="F:OpenMetaverse.Animations.YES"> 5133 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket">
3680 <summary>Agent nodding yes</summary> 5134 <exclude/>
3681 </member> 5135 </member>
3682 <member name="F:OpenMetaverse.Animations.YES_HAPPY"> 5136 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket.AgentDataBlock">
3683 <summary>Agent nodding yes with happy face</summary> 5137 <exclude/>
3684 </member> 5138 </member>
3685 <member name="F:OpenMetaverse.Animations.YOGA_FLOAT"> 5139 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket.ObjectDataBlock">
3686 <summary>Agent floating with legs and arms crossed</summary> 5140 <exclude/>
3687 </member> 5141 </member>
3688 <member name="M:OpenMetaverse.Animations.ToDictionary"> 5142 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket">
3689 <summary> 5143 <exclude/>
3690 A dictionary containing all pre-defined animations
3691 </summary>
3692 <returns>A dictionary containing the pre-defined animations,
3693 where the key is the animations ID, and the value is a string
3694 containing a name to identify the purpose of the animation</returns>
3695 </member> 5144 </member>
3696 <member name="T:OpenMetaverse.AvatarTextureIndex"> 5145 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.AgentDataBlock">
3697 <summary> 5146 <exclude/>
3698 Index of TextureEntry slots for avatar appearances
3699 </summary>
3700 </member> 5147 </member>
3701 <member name="T:OpenMetaverse.BakeType"> 5148 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.SharedDataBlock">
3702 <summary> 5149 <exclude/>
3703 Bake layers for avatar appearance
3704 </summary>
3705 </member> 5150 </member>
3706 <member name="M:OpenMetaverse.AppearanceManager.#ctor(OpenMetaverse.GridClient)"> 5151 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.ObjectDataBlock">
3707 <summary> 5152 <exclude/>
3708 Default constructor
3709 </summary>
3710 <param name="client">A reference to our agent</param>
3711 </member> 5153 </member>
3712 <member name="T:OpenMetaverse.AppearanceManager.WearableData"> 5154 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket">
3713 <summary> 5155 <exclude/>
3714 Contains information about a wearable inventory item
3715 </summary>
3716 </member> 5156 </member>
3717 <member name="F:OpenMetaverse.AppearanceManager.WearableData.ItemID"> 5157 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket.AgentDataBlock">
3718 <summary>Inventory ItemID of the wearable</summary> 5158 <exclude/>
3719 </member> 5159 </member>
3720 <member name="F:OpenMetaverse.AppearanceManager.WearableData.AssetID"> 5160 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket.ObjectDataBlock">
3721 <summary>AssetID of the wearable asset</summary> 5161 <exclude/>
3722 </member> 5162 </member>
3723 <member name="F:OpenMetaverse.AppearanceManager.WearableData.WearableType"> 5163 <member name="T:OpenMetaverse.Packets.ObjectScalePacket">
3724 <summary>WearableType of the wearable</summary> 5164 <exclude/>
3725 </member> 5165 </member>
3726 <member name="F:OpenMetaverse.AppearanceManager.WearableData.AssetType"> 5166 <member name="T:OpenMetaverse.Packets.ObjectScalePacket.AgentDataBlock">
3727 <summary>AssetType of the wearable</summary> 5167 <exclude/>
3728 </member> 5168 </member>
3729 <member name="F:OpenMetaverse.AppearanceManager.WearableData.Asset"> 5169 <member name="T:OpenMetaverse.Packets.ObjectScalePacket.ObjectDataBlock">
3730 <summary>Asset data for the wearable</summary> 5170 <exclude/>
3731 </member> 5171 </member>
3732 <member name="T:OpenMetaverse.AppearanceManager.ColorParamInfo"> 5172 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket">
3733 <summary> 5173 <exclude/>
3734 Data collected from visual params for each wearable
3735 needed for the calculation of the color
3736 </summary>
3737 </member> 5174 </member>
3738 <member name="T:OpenMetaverse.AppearanceManager.TextureData"> 5175 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket.AgentDataBlock">
3739 <summary> 5176 <exclude/>
3740 Holds a texture assetID and the data needed to bake this layer into
3741 an outfit texture. Used to keep track of currently worn textures
3742 and baking data
3743 </summary>
3744 </member> 5177 </member>
3745 <member name="F:OpenMetaverse.AppearanceManager.TextureData.TextureID"> 5178 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket.ObjectDataBlock">
3746 <summary>A texture AssetID</summary> 5179 <exclude/>
3747 </member> 5180 </member>
3748 <member name="F:OpenMetaverse.AppearanceManager.TextureData.Texture"> 5181 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket">
3749 <summary>Asset data for the texture</summary> 5182 <exclude/>
3750 </member> 5183 </member>
3751 <member name="F:OpenMetaverse.AppearanceManager.TextureData.AlphaMasks"> 5184 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket.AgentDataBlock">
3752 <summary>Collection of alpha masks that needs applying</summary> 5185 <exclude/>
3753 </member> 5186 </member>
3754 <member name="F:OpenMetaverse.AppearanceManager.TextureData.Color"> 5187 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket.ExtraPhysicsBlock">
3755 <summary>Tint that should be applied to the texture</summary> 5188 <exclude/>
3756 </member> 5189 </member>
3757 <member name="F:OpenMetaverse.AppearanceManager.TextureData.TextureIndex"> 5190 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket">
3758 <summary>Where on avatar does this texture belong</summary> 5191 <exclude/>
3759 </member> 5192 </member>
3760 <member name="F:OpenMetaverse.AppearanceManager.MAX_CONCURRENT_DOWNLOADS"> 5193 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket.AgentDataBlock">
3761 <summary>Maximum number of concurrent downloads for wearable assets and textures</summary> 5194 <exclude/>
3762 </member> 5195 </member>
3763 <member name="F:OpenMetaverse.AppearanceManager.MAX_CONCURRENT_UPLOADS"> 5196 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket.ObjectDataBlock">
3764 <summary>Maximum number of concurrent uploads for baked textures</summary> 5197 <exclude/>
3765 </member> 5198 </member>
3766 <member name="F:OpenMetaverse.AppearanceManager.INVENTORY_TIMEOUT"> 5199 <member name="T:OpenMetaverse.Packets.ObjectImagePacket">
3767 <summary>Timeout for fetching inventory listings</summary> 5200 <exclude/>
3768 </member> 5201 </member>
3769 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_TIMEOUT"> 5202 <member name="T:OpenMetaverse.Packets.ObjectImagePacket.AgentDataBlock">
3770 <summary>Timeout for fetching a single wearable, or receiving a single packet response</summary> 5203 <exclude/>
3771 </member> 5204 </member>
3772 <member name="F:OpenMetaverse.AppearanceManager.TEXTURE_TIMEOUT"> 5205 <member name="T:OpenMetaverse.Packets.ObjectImagePacket.ObjectDataBlock">
3773 <summary>Timeout for fetching a single texture</summary> 5206 <exclude/>
3774 </member> 5207 </member>
3775 <member name="F:OpenMetaverse.AppearanceManager.UPLOAD_TIMEOUT"> 5208 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket">
3776 <summary>Timeout for uploading a single baked texture</summary> 5209 <exclude/>
3777 </member> 5210 </member>
3778 <member name="F:OpenMetaverse.AppearanceManager.UPLOAD_RETRIES"> 5211 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket.AgentDataBlock">
3779 <summary>Number of times to retry bake upload</summary> 5212 <exclude/>
3780 </member> 5213 </member>
3781 <member name="F:OpenMetaverse.AppearanceManager.REBAKE_DELAY"> 5214 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket.ObjectDataBlock">
3782 <summary>When changing outfit, kick off rebake after 5215 <exclude/>
3783 20 seconds has passed since the last change</summary>
3784 </member> 5216 </member>
3785 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_COUNT"> 5217 <member name="T:OpenMetaverse.Packets.ObjectShapePacket">
3786 <summary>Total number of wearables for each avatar</summary> 5218 <exclude/>
3787 </member> 5219 </member>
3788 <member name="F:OpenMetaverse.AppearanceManager.BAKED_TEXTURE_COUNT"> 5220 <member name="T:OpenMetaverse.Packets.ObjectShapePacket.AgentDataBlock">
3789 <summary>Total number of baked textures on each avatar</summary> 5221 <exclude/>
3790 </member> 5222 </member>
3791 <member name="F:OpenMetaverse.AppearanceManager.WEARABLES_PER_LAYER"> 5223 <member name="T:OpenMetaverse.Packets.ObjectShapePacket.ObjectDataBlock">
3792 <summary>Total number of wearables per bake layer</summary> 5224 <exclude/>
3793 </member> 5225 </member>
3794 <member name="F:OpenMetaverse.AppearanceManager.BakeIndexToTextureIndex"> 5226 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket">
3795 <summary>Mapping between BakeType and AvatarTextureIndex</summary> 5227 <exclude/>
3796 </member> 5228 </member>
3797 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_BAKE_MAP"> 5229 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket.AgentDataBlock">
3798 <summary>Map of what wearables are included in each bake</summary> 5230 <exclude/>
3799 </member> 5231 </member>
3800 <member name="F:OpenMetaverse.AppearanceManager.BAKED_TEXTURE_HASH"> 5232 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket.ObjectDataBlock">
3801 <summary>Magic values to finalize the cache check hashes for each 5233 <exclude/>
3802 bake</summary>
3803 </member> 5234 </member>
3804 <member name="F:OpenMetaverse.AppearanceManager.DEFAULT_AVATAR_TEXTURE"> 5235 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket">
3805 <summary>Default avatar texture, used to detect when a custom 5236 <exclude/>
3806 texture is not set for a face</summary>
3807 </member> 5237 </member>
3808 <member name="F:OpenMetaverse.AppearanceManager.m_AgentWearablesReply"> 5238 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.AgentDataBlock">
3809 <summary>The event subscribers. null if no subcribers</summary> 5239 <exclude/>
3810 </member> 5240 </member>
3811 <member name="F:OpenMetaverse.AppearanceManager.m_AgentWearablesLock"> 5241 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.HeaderDataBlock">
3812 <summary>Thread sync lock object</summary> 5242 <exclude/>
3813 </member> 5243 </member>
3814 <member name="F:OpenMetaverse.AppearanceManager.m_AgentCachedBakesReply"> 5244 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.ObjectDataBlock">
3815 <summary>The event subscribers. null if no subcribers</summary> 5245 <exclude/>
3816 </member> 5246 </member>
3817 <member name="F:OpenMetaverse.AppearanceManager.m_AgentCachedBakesLock"> 5247 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket">
3818 <summary>Thread sync lock object</summary> 5248 <exclude/>
3819 </member> 5249 </member>
3820 <member name="F:OpenMetaverse.AppearanceManager.m_AppearanceSet"> 5250 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket.AgentDataBlock">
3821 <summary>The event subscribers. null if no subcribers</summary> 5251 <exclude/>
3822 </member> 5252 </member>
3823 <member name="F:OpenMetaverse.AppearanceManager.m_AppearanceSetLock"> 5253 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket.ObjectDataBlock">
3824 <summary>Thread sync lock object</summary> 5254 <exclude/>
3825 </member> 5255 </member>
3826 <member name="F:OpenMetaverse.AppearanceManager.m_RebakeAvatarReply"> 5256 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket">
3827 <summary>The event subscribers. null if no subcribers</summary> 5257 <exclude/>
3828 </member> 5258 </member>
3829 <member name="F:OpenMetaverse.AppearanceManager.m_RebakeAvatarLock"> 5259 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket.AgentDataBlock">
3830 <summary>Thread sync lock object</summary> 5260 <exclude/>
3831 </member> 5261 </member>
3832 <member name="F:OpenMetaverse.AppearanceManager.MyVisualParameters"> 5262 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket.ObjectDataBlock">
3833 <summary>Visual parameters last sent to the sim</summary> 5263 <exclude/>
3834 </member> 5264 </member>
3835 <member name="F:OpenMetaverse.AppearanceManager.MyTextures"> 5265 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket">
3836 <summary>Textures about this client sent to the sim</summary> 5266 <exclude/>
3837 </member> 5267 </member>
3838 <member name="F:OpenMetaverse.AppearanceManager.Wearables"> 5268 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket.AgentDataBlock">
3839 <summary>A cache of wearables currently being worn</summary> 5269 <exclude/>
3840 </member> 5270 </member>
3841 <member name="F:OpenMetaverse.AppearanceManager.Textures"> 5271 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket.DataBlock">
3842 <summary>A cache of textures currently being worn</summary> 5272 <exclude/>
3843 </member> 5273 </member>
3844 <member name="F:OpenMetaverse.AppearanceManager.CacheCheckSerialNum"> 5274 <member name="T:OpenMetaverse.Packets.DerezContainerPacket">
3845 <summary>Incrementing serial number for AgentCachedTexture packets</summary> 5275 <exclude/>
3846 </member> 5276 </member>
3847 <member name="F:OpenMetaverse.AppearanceManager.SetAppearanceSerialNum"> 5277 <member name="T:OpenMetaverse.Packets.DerezContainerPacket.DataBlock">
3848 <summary>Incrementing serial number for AgentSetAppearance packets</summary> 5278 <exclude/>
3849 </member> 5279 </member>
3850 <member name="F:OpenMetaverse.AppearanceManager.AppearanceThreadRunning"> 5280 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket">
3851 <summary>Indicates whether or not the appearance thread is currently 5281 <exclude/>
3852 running, to prevent multiple appearance threads from running
3853 simultaneously</summary>
3854 </member> 5282 </member>
3855 <member name="F:OpenMetaverse.AppearanceManager.Client"> 5283 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.AgentDataBlock">
3856 <summary>Reference to our agent</summary> 5284 <exclude/>
3857 </member> 5285 </member>
3858 <member name="F:OpenMetaverse.AppearanceManager.RebakeScheduleTimer"> 5286 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.HeaderDataBlock">
3859 <summary> 5287 <exclude/>
3860 Timer used for delaying rebake on changing outfit
3861 </summary>
3862 </member> 5288 </member>
3863 <member name="F:OpenMetaverse.AppearanceManager.AppearanceThread"> 5289 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.ObjectDataBlock">
3864 <summary> 5290 <exclude/>
3865 Main appearance thread
3866 </summary>
3867 </member> 5291 </member>
3868 <member name="E:OpenMetaverse.AppearanceManager.AgentWearablesReply"> 5292 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket">
3869 <summary>Triggered when an AgentWearablesUpdate packet is received, 5293 <exclude/>
3870 telling us what our avatar is currently wearing
3871 <see cref="M:OpenMetaverse.AppearanceManager.RequestAgentWearables" /> request.</summary>
3872 </member> 5294 </member>
3873 <member name="E:OpenMetaverse.AppearanceManager.CachedBakesReply"> 5295 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket.AgentDataBlock">
3874 <summary>Raised when an AgentCachedTextureResponse packet is 5296 <exclude/>
3875 received, giving a list of cached bakes that were found on the
3876 simulator
3877 <seealso cref="M:OpenMetaverse.AppearanceManager.RequestCachedBakes" /> request.</summary>
3878 </member> 5297 </member>
3879 <member name="E:OpenMetaverse.AppearanceManager.AppearanceSet"> 5298 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket.ObjectDataBlock">
3880 <summary> 5299 <exclude/>
3881 Raised when appearance data is sent to the simulator, also indicates
3882 the main appearance thread is finished.
3883 </summary>
3884 <seealso cref="M:OpenMetaverse.AppearanceManager.RequestAgentSetAppearance" /> request.</member>
3885 <member name="E:OpenMetaverse.AppearanceManager.RebakeAvatarRequested">
3886 <summary>
3887 Triggered when the simulator requests the agent rebake its appearance.
3888 </summary>
3889 <seealso cref="!:RebakeAvatarRequest" />
3890 </member> 5300 </member>
3891 <member name="P:OpenMetaverse.AppearanceManager.ManagerBusy"> 5301 <member name="T:OpenMetaverse.Packets.ObjectNamePacket">
3892 <summary> 5302 <exclude/>
3893 Returns true if AppearanceManager is busy and trying to set or change appearance will fail
3894 </summary>
3895 </member> 5303 </member>
3896 <member name="M:OpenMetaverse.AppearanceManager.OnAgentWearables(OpenMetaverse.AgentWearablesReplyEventArgs)"> 5304 <member name="T:OpenMetaverse.Packets.ObjectNamePacket.AgentDataBlock">
3897 <summary>Raises the AgentWearablesReply event</summary> 5305 <exclude/>
3898 <param name="e">An AgentWearablesReplyEventArgs object containing the
3899 data returned from the data server</param>
3900 </member> 5306 </member>
3901 <member name="M:OpenMetaverse.AppearanceManager.OnAgentCachedBakes(OpenMetaverse.AgentCachedBakesReplyEventArgs)"> 5307 <member name="T:OpenMetaverse.Packets.ObjectNamePacket.ObjectDataBlock">
3902 <summary>Raises the CachedBakesReply event</summary> 5308 <exclude/>
3903 <param name="e">An AgentCachedBakesReplyEventArgs object containing the
3904 data returned from the data server AgentCachedTextureResponse</param>
3905 </member> 5309 </member>
3906 <member name="M:OpenMetaverse.AppearanceManager.OnAppearanceSet(OpenMetaverse.AppearanceSetEventArgs)"> 5310 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket">
3907 <summary>Raises the AppearanceSet event</summary> 5311 <exclude/>
3908 <param name="e">An AppearanceSetEventArgs object indicating if the operatin was successfull</param>
3909 </member> 5312 </member>
3910 <member name="M:OpenMetaverse.AppearanceManager.OnRebakeAvatar(OpenMetaverse.RebakeAvatarTexturesEventArgs)"> 5313 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket.AgentDataBlock">
3911 <summary>Raises the RebakeAvatarRequested event</summary> 5314 <exclude/>
3912 <param name="e">An RebakeAvatarTexturesEventArgs object containing the
3913 data returned from the data server</param>
3914 </member> 5315 </member>
3915 <member name="M:OpenMetaverse.AppearanceManager.SetPreviousAppearance"> 5316 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket.ObjectDataBlock">
3916 <summary> 5317 <exclude/>
3917 Obsolete method for setting appearance. This function no longer does anything.
3918 Use RequestSetAppearance() to manually start the appearance thread
3919 </summary>
3920 </member> 5318 </member>
3921 <member name="M:OpenMetaverse.AppearanceManager.SetPreviousAppearance(System.Boolean)"> 5319 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket">
3922 <summary> 5320 <exclude/>
3923 Obsolete method for setting appearance. This function no longer does anything.
3924 Use RequestSetAppearance() to manually start the appearance thread
3925 </summary>
3926 <param name="allowBake">Unused parameter</param>
3927 </member> 5321 </member>
3928 <member name="M:OpenMetaverse.AppearanceManager.RequestSetAppearance"> 5322 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket.AgentDataBlock">
3929 <summary> 5323 <exclude/>
3930 Starts the appearance setting thread
3931 </summary>
3932 </member> 5324 </member>
3933 <member name="M:OpenMetaverse.AppearanceManager.RequestSetAppearance(System.Boolean)"> 5325 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket.ObjectDataBlock">
3934 <summary> 5326 <exclude/>
3935 Starts the appearance setting thread
3936 </summary>
3937 <param name="forceRebake">True to force rebaking, otherwise false</param>
3938 </member> 5327 </member>
3939 <member name="M:OpenMetaverse.AppearanceManager.RequestAgentWearables"> 5328 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket">
3940 <summary> 5329 <exclude/>
3941 Ask the server what textures our agent is currently wearing
3942 </summary>
3943 </member> 5330 </member>
3944 <member name="M:OpenMetaverse.AppearanceManager.RequestCachedBakes"> 5331 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket.AgentDataBlock">
3945 <summary> 5332 <exclude/>
3946 Build hashes out of the texture assetIDs for each baking layer to
3947 ask the simulator whether it has cached copies of each baked texture
3948 </summary>
3949 </member> 5333 </member>
3950 <member name="M:OpenMetaverse.AppearanceManager.GetWearableAsset(OpenMetaverse.WearableType)"> 5334 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket.ObjectDataBlock">
3951 <summary> 5335 <exclude/>
3952 Returns the AssetID of the asset that is currently being worn in a
3953 given WearableType slot
3954 </summary>
3955 <param name="type">WearableType slot to get the AssetID for</param>
3956 <returns>The UUID of the asset being worn in the given slot, or
3957 UUID.Zero if no wearable is attached to the given slot or wearables
3958 have not been downloaded yet</returns>
3959 </member> 5336 </member>
3960 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(OpenMetaverse.InventoryItem)"> 5337 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket">
3961 <summary> 5338 <exclude/>
3962 Add a wearable to the current outfit and set appearance
3963 </summary>
3964 <param name="wearableItem">Wearable to be added to the outfit</param>
3965 </member> 5339 </member>
3966 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})"> 5340 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket.AgentDataBlock">
3967 <summary> 5341 <exclude/>
3968 Add a list of wearables to the current outfit and set appearance
3969 </summary>
3970 <param name="wearableItems">List of wearable inventory items to
3971 be added to the outfit</param>
3972 </member> 5342 </member>
3973 <member name="M:OpenMetaverse.AppearanceManager.RemoveFromOutfit(OpenMetaverse.InventoryItem)"> 5343 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket.ObjectDataBlock">
3974 <summary> 5344 <exclude/>
3975 Remove a wearable from the current outfit and set appearance
3976 </summary>
3977 <param name="wearableItem">Wearable to be removed from the outfit</param>
3978 </member> 5345 </member>
3979 <member name="M:OpenMetaverse.AppearanceManager.RemoveFromOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})"> 5346 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket">
3980 <summary> 5347 <exclude/>
3981 Removes a list of wearables from the current outfit and set appearance
3982 </summary>
3983 <param name="wearableItems">List of wearable inventory items to
3984 be removed from the outfit</param>
3985 </member> 5348 </member>
3986 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})"> 5349 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket.AgentDataBlock">
3987 <summary> 5350 <exclude/>
3988 Replace the current outfit with a list of wearables and set appearance
3989 </summary>
3990 <param name="wearableItems">List of wearable inventory items that
3991 define a new outfit</param>
3992 </member> 5351 </member>
3993 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean)"> 5352 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket.ObjectDataBlock">
3994 <summary> 5353 <exclude/>
3995 Replace the current outfit with a list of wearables and set appearance
3996 </summary>
3997 <param name="wearableItems">List of wearable inventory items that
3998 define a new outfit</param>
3999 <param name="safe">Check if we have all body parts, set this to false only
4000 if you know what you're doing</param>
4001 </member> 5354 </member>
4002 <member name="M:OpenMetaverse.AppearanceManager.IsItemWorn(OpenMetaverse.InventoryItem)"> 5355 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket">
4003 <summary> 5356 <exclude/>
4004 Checks if an inventory item is currently being worn
4005 </summary>
4006 <param name="item">The inventory item to check against the agent
4007 wearables</param>
4008 <returns>The WearableType slot that the item is being worn in,
4009 or WearbleType.Invalid if it is not currently being worn</returns>
4010 </member> 5357 </member>
4011 <member name="M:OpenMetaverse.AppearanceManager.GetWearables"> 5358 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket.AgentDataBlock">
4012 <summary> 5359 <exclude/>
4013 Returns a copy of the agents currently worn wearables
4014 </summary>
4015 <returns>A copy of the agents currently worn wearables</returns>
4016 <remarks>Avoid calling this function multiple times as it will make
4017 a copy of all of the wearable data each time</remarks>
4018 </member> 5360 </member>
4019 <member name="M:OpenMetaverse.AppearanceManager.WearOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryBase},System.Boolean)"> 5361 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket.ObjectDataBlock">
4020 <summary> 5362 <exclude/>
4021 Calls either <seealso cref="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryWearable})" /> or
4022 <seealso cref="M:OpenMetaverse.AppearanceManager.AddToOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})" /> depending on the value of
4023 replaceItems
4024 </summary>
4025 <param name="wearables">List of wearable inventory items to add
4026 to the outfit or become a new outfit</param>
4027 <param name="replaceItems">True to replace existing items with the
4028 new list of items, false to add these items to the existing outfit</param>
4029 </member> 5363 </member>
4030 <member name="M:OpenMetaverse.AppearanceManager.AddAttachments(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean)"> 5364 <member name="T:OpenMetaverse.Packets.ObjectDropPacket">
4031 <summary> 5365 <exclude/>
4032 Adds a list of attachments to our agent
4033 </summary>
4034 <param name="attachments">A List containing the attachments to add</param>
4035 <param name="removeExistingFirst">If true, tells simulator to remove existing attachment
4036 first</param>
4037 </member> 5366 </member>
4038 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.InventoryItem,OpenMetaverse.AttachmentPoint)"> 5367 <member name="T:OpenMetaverse.Packets.ObjectDropPacket.AgentDataBlock">
4039 <summary> 5368 <exclude/>
4040 Attach an item to our agent at a specific attach point
4041 </summary>
4042 <param name="item">A <seealso cref="T:OpenMetaverse.InventoryItem" /> to attach</param>
4043 <param name="attachPoint">the <seealso cref="T:OpenMetaverse.AttachmentPoint" /> on the avatar
4044 to attach the item to</param>
4045 </member> 5369 </member>
4046 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.Permissions,System.UInt32,OpenMetaverse.AttachmentPoint)"> 5370 <member name="T:OpenMetaverse.Packets.ObjectDropPacket.ObjectDataBlock">
4047 <summary> 5371 <exclude/>
4048 Attach an item to our agent specifying attachment details
4049 </summary>
4050 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the item to attach</param>
4051 <param name="ownerID">The <seealso cref="T:OpenMetaverse.UUID" /> attachments owner</param>
4052 <param name="name">The name of the attachment</param>
4053 <param name="description">The description of the attahment</param>
4054 <param name="perms">The <seealso cref="T:OpenMetaverse.Permissions" /> to apply when attached</param>
4055 <param name="itemFlags">The <seealso cref="T:OpenMetaverse.InventoryItemFlags" /> of the attachment</param>
4056 <param name="attachPoint">The <seealso cref="T:OpenMetaverse.AttachmentPoint" /> on the agent
4057 to attach the item to</param>
4058 </member> 5372 </member>
4059 <member name="M:OpenMetaverse.AppearanceManager.Detach(OpenMetaverse.InventoryItem)"> 5373 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket">
4060 <summary> 5374 <exclude/>
4061 Detach an item from our agent using an <seealso cref="T:OpenMetaverse.InventoryItem" /> object
4062 </summary>
4063 <param name="item">An <seealso cref="T:OpenMetaverse.InventoryItem" /> object</param>
4064 </member> 5375 </member>
4065 <member name="M:OpenMetaverse.AppearanceManager.Detach(OpenMetaverse.UUID)"> 5376 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket.AgentDataBlock">
4066 <summary> 5377 <exclude/>
4067 Detach an item from our agent
4068 </summary>
4069 <param name="itemID">The inventory itemID of the item to detach</param>
4070 </member> 5378 </member>
4071 <member name="M:OpenMetaverse.AppearanceManager.SendAgentIsNowWearing"> 5379 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket.ObjectDataBlock">
4072 <summary> 5380 <exclude/>
4073 Inform the sim which wearables are part of our current outfit
4074 </summary>
4075 </member> 5381 </member>
4076 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryWearable})"> 5382 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket">
4077 <summary> 5383 <exclude/>
4078 Replaces the Wearables collection with a list of new wearable items
4079 </summary>
4080 <param name="wearableItems">Wearable items to replace the Wearables collection with</param>
4081 </member> 5384 </member>
4082 <member name="M:OpenMetaverse.AppearanceManager.GetColorFromParams(System.Collections.Generic.List{OpenMetaverse.AppearanceManager.ColorParamInfo})"> 5385 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket.AgentDataBlock">
4083 <summary> 5386 <exclude/>
4084 Calculates base color/tint for a specific wearable
4085 based on its params
4086 </summary>
4087 <param name="param">All the color info gathered from wearable's VisualParams
4088 passed as list of ColorParamInfo tuples</param>
4089 <returns>Base color/tint for the wearable</returns>
4090 </member> 5387 </member>
4091 <member name="M:OpenMetaverse.AppearanceManager.GetAgentWearables"> 5388 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket.ObjectDataBlock">
4092 <summary> 5389 <exclude/>
4093 Blocking method to populate the Wearables dictionary
4094 </summary>
4095 <returns>True on success, otherwise false</returns>
4096 </member> 5390 </member>
4097 <member name="M:OpenMetaverse.AppearanceManager.GetCachedBakes"> 5391 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket">
4098 <summary> 5392 <exclude/>
4099 Blocking method to populate the Textures array with cached bakes
4100 </summary>
4101 <returns>True on success, otherwise false</returns>
4102 </member> 5393 </member>
4103 <member name="M:OpenMetaverse.AppearanceManager.DecodeWearableParams(OpenMetaverse.AppearanceManager.WearableData)"> 5394 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.AgentDataBlock">
4104 <summary> 5395 <exclude/>
4105 Populates textures and visual params from a decoded asset
4106 </summary>
4107 <param name="wearable">Wearable to decode</param>
4108 </member> 5396 </member>
4109 <member name="M:OpenMetaverse.AppearanceManager.DownloadWearables"> 5397 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.ObjectDataBlock">
4110 <summary> 5398 <exclude/>
4111 Blocking method to download and parse currently worn wearable assets
4112 </summary>
4113 <returns>True on success, otherwise false</returns>
4114 </member> 5399 </member>
4115 <member name="M:OpenMetaverse.AppearanceManager.GetTextureDownloadList(OpenMetaverse.BakeType)"> 5400 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.SurfaceInfoBlock">
4116 <summary> 5401 <exclude/>
4117 Get a list of all of the textures that need to be downloaded for a
4118 single bake layer
4119 </summary>
4120 <param name="bakeType">Bake layer to get texture AssetIDs for</param>
4121 <returns>A list of texture AssetIDs to download</returns>
4122 </member> 5402 </member>
4123 <member name="M:OpenMetaverse.AppearanceManager.AddTextureDownload(OpenMetaverse.AvatarTextureIndex,System.Collections.Generic.List{OpenMetaverse.UUID})"> 5403 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket">
4124 <summary> 5404 <exclude/>
4125 Helper method to lookup the TextureID for a single layer and add it
4126 to a list if it is not already present
4127 </summary>
4128 <param name="index">
4129 </param>
4130 <param name="textures">
4131 </param>
4132 </member> 5405 </member>
4133 <member name="M:OpenMetaverse.AppearanceManager.DownloadTextures(System.Collections.Generic.List{OpenMetaverse.BakeType})"> 5406 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.AgentDataBlock">
4134 <summary> 5407 <exclude/>
4135 Blocking method to download all of the textures needed for baking
4136 the given bake layers
4137 </summary>
4138 <param name="bakeLayers">A list of layers that need baking</param>
4139 <remarks>No return value is given because the baking will happen
4140 whether or not all textures are successfully downloaded</remarks>
4141 </member> 5408 </member>
4142 <member name="M:OpenMetaverse.AppearanceManager.CreateBakes"> 5409 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.ObjectDataBlock">
4143 <summary> 5410 <exclude/>
4144 Blocking method to create and upload baked textures for all of the
4145 missing bakes
4146 </summary>
4147 <returns>True on success, otherwise false</returns>
4148 </member> 5411 </member>
4149 <member name="M:OpenMetaverse.AppearanceManager.CreateBake(OpenMetaverse.BakeType)"> 5412 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.SurfaceInfoBlock">
4150 <summary> 5413 <exclude/>
4151 Blocking method to create and upload a baked texture for a single
4152 bake layer
4153 </summary>
4154 <param name="bakeType">Layer to bake</param>
4155 <returns>True on success, otherwise false</returns>
4156 </member> 5414 </member>
4157 <member name="M:OpenMetaverse.AppearanceManager.UploadBake(System.Byte[])"> 5415 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket">
4158 <summary> 5416 <exclude/>
4159 Blocking method to upload a baked texture
4160 </summary>
4161 <param name="textureData">Five channel JPEG2000 texture data to upload</param>
4162 <returns>UUID of the newly created asset on success, otherwise UUID.Zero</returns>
4163 </member> 5417 </member>
4164 <member name="M:OpenMetaverse.AppearanceManager.MakeParamValues"> 5418 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.AgentDataBlock">
4165 <summary> 5419 <exclude/>
4166 Creates a dictionary of visual param values from the downloaded wearables
4167 </summary>
4168 <returns>A dictionary of visual param indices mapping to visual param
4169 values for our agent that can be fed to the Baker class</returns>
4170 </member> 5420 </member>
4171 <member name="M:OpenMetaverse.AppearanceManager.RequestAgentSetAppearance"> 5421 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.ObjectDataBlock">
4172 <summary> 5422 <exclude/>
4173 Create an AgentSetAppearance packet from Wearables data and the
4174 Textures array and send it
4175 </summary>
4176 </member> 5423 </member>
4177 <member name="M:OpenMetaverse.AppearanceManager.WearableTypeToAssetType(OpenMetaverse.WearableType)"> 5424 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.SurfaceInfoBlock">
4178 <summary> 5425 <exclude/>
4179 Converts a WearableType to a bodypart or clothing WearableType
4180 </summary>
4181 <param name="type">A WearableType</param>
4182 <returns>AssetType.Bodypart or AssetType.Clothing or AssetType.Unknown</returns>
4183 </member> 5426 </member>
4184 <member name="M:OpenMetaverse.AppearanceManager.BakeTypeToAgentTextureIndex(OpenMetaverse.BakeType)"> 5427 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket">
4185 <summary> 5428 <exclude/>
4186 Converts a BakeType to the corresponding baked texture slot in AvatarTextureIndex
4187 </summary>
4188 <param name="index">A BakeType</param>
4189 <returns>The AvatarTextureIndex slot that holds the given BakeType</returns>
4190 </member> 5429 </member>
4191 <member name="M:OpenMetaverse.AppearanceManager.MorphLayerForBakeType(OpenMetaverse.BakeType)"> 5430 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket.AgentDataBlock">
4192 <summary> 5431 <exclude/>
4193 Gives the layer number that is used for morph mask
4194 </summary>
4195 <param name="bakeType">&gt;A BakeType</param>
4196 <returns>Which layer number as defined in BakeTypeToTextures is used for morph mask</returns>
4197 </member> 5432 </member>
4198 <member name="M:OpenMetaverse.AppearanceManager.BakeTypeToTextures(OpenMetaverse.BakeType)"> 5433 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket.ObjectDataBlock">
4199 <summary> 5434 <exclude/>
4200 Converts a BakeType to a list of the texture slots that make up that bake
4201 </summary>
4202 <param name="bakeType">A BakeType</param>
4203 <returns>A list of texture slots that are inputs for the given bake</returns>
4204 </member> 5435 </member>
4205 <member name="T:OpenMetaverse.AgentWearablesReplyEventArgs"> 5436 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket">
4206 <summary>Contains the Event data returned from the data server from an AgentWearablesRequest</summary> 5437 <exclude/>
4207 </member> 5438 </member>
4208 <member name="M:OpenMetaverse.AgentWearablesReplyEventArgs.#ctor"> 5439 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket.AgentDataBlock">
4209 <summary>Construct a new instance of the AgentWearablesReplyEventArgs class</summary> 5440 <exclude/>
4210 </member> 5441 </member>
4211 <member name="T:OpenMetaverse.AgentCachedBakesReplyEventArgs"> 5442 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket.ObjectDataBlock">
4212 <summary>Contains the Event data returned from the data server from an AgentCachedTextureResponse</summary> 5443 <exclude/>
4213 </member> 5444 </member>
4214 <member name="M:OpenMetaverse.AgentCachedBakesReplyEventArgs.#ctor"> 5445 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket">
4215 <summary>Construct a new instance of the AgentCachedBakesReplyEventArgs class</summary> 5446 <exclude/>
4216 </member> 5447 </member>
4217 <member name="T:OpenMetaverse.AppearanceSetEventArgs"> 5448 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket.AgentDataBlock">
4218 <summary>Contains the Event data returned from an AppearanceSetRequest</summary> 5449 <exclude/>
4219 </member> 5450 </member>
4220 <member name="M:OpenMetaverse.AppearanceSetEventArgs.#ctor(System.Boolean)"> 5451 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket.ObjectDataBlock">
4221 <summary> 5452 <exclude/>
4222 Triggered when appearance data is sent to the sim and
4223 the main appearance thread is done.</summary>
4224 <param name="success">Indicates whether appearance setting was successful</param>
4225 </member> 5453 </member>
4226 <member name="P:OpenMetaverse.AppearanceSetEventArgs.Success"> 5454 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket">
4227 <summary>Indicates whether appearance setting was successful</summary> 5455 <exclude/>
4228 </member> 5456 </member>
4229 <member name="T:OpenMetaverse.RebakeAvatarTexturesEventArgs"> 5457 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket.AgentDataBlock">
4230 <summary>Contains the Event data returned from the data server from an RebakeAvatarTextures</summary> 5458 <exclude/>
4231 </member> 5459 </member>
4232 <member name="M:OpenMetaverse.RebakeAvatarTexturesEventArgs.#ctor(OpenMetaverse.UUID)"> 5460 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket.ObjectDataBlock">
4233 <summary> 5461 <exclude/>
4234 Triggered when the simulator sends a request for this agent to rebake
4235 its appearance
4236 </summary>
4237 <param name="textureID">The ID of the Texture Layer to bake</param>
4238 </member> 5462 </member>
4239 <member name="P:OpenMetaverse.RebakeAvatarTexturesEventArgs.TextureID"> 5463 <member name="T:OpenMetaverse.Packets.ModifyLandPacket">
4240 <summary>The ID of the Texture Layer to bake</summary> 5464 <exclude/>
4241 </member> 5465 </member>
4242 <member name="T:OpenMetaverse.AssetCache"> 5466 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.AgentDataBlock">
4243 <summary> 5467 <exclude/>
4244 Class that handles the local asset cache
4245 </summary>
4246 </member> 5468 </member>
4247 <member name="M:OpenMetaverse.AssetCache.#ctor(OpenMetaverse.GridClient)"> 5469 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ModifyBlockBlock">
4248 <summary> 5470 <exclude/>
4249 Default constructor
4250 </summary>
4251 <param name="client">A reference to the GridClient object</param>
4252 </member> 5471 </member>
4253 <member name="T:OpenMetaverse.AssetCache.SortFilesByAccesTimeHelper"> 5472 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ParcelDataBlock">
4254 <summary> 5473 <exclude/>
4255 Helper class for sorting files by their last accessed time
4256 </summary>
4257 </member> 5474 </member>
4258 <member name="P:OpenMetaverse.AssetCache.AutoPruneEnabled"> 5475 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ModifyBlockExtendedBlock">
4259 <summary> 5476 <exclude/>
4260 Allows setting weather to periodicale prune the cache if it grows too big
4261 Default is enabled, when caching is enabled
4262 </summary>
4263 </member> 5477 </member>
4264 <member name="P:OpenMetaverse.AssetCache.AutoPruneInterval"> 5478 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOnPacket">
4265 <summary> 5479 <exclude/>
4266 How long (in ms) between cache checks (default is 5 min.)
4267 </summary>
4268 </member> 5480 </member>
4269 <member name="M:OpenMetaverse.AssetCache.DestroyTimer"> 5481 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOnPacket.AgentDataBlock">
4270 <summary> 5482 <exclude/>
4271 Disposes cleanup timer
4272 </summary>
4273 </member> 5483 </member>
4274 <member name="M:OpenMetaverse.AssetCache.SetupTimer"> 5484 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOffPacket">
4275 <summary> 5485 <exclude/>
4276 Only create timer when needed
4277 </summary>
4278 </member> 5486 </member>
4279 <member name="M:OpenMetaverse.AssetCache.GetCachedAssetBytes(OpenMetaverse.UUID)"> 5487 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOffPacket.AgentDataBlock">
4280 <summary> 5488 <exclude/>
4281 Return bytes read from the local asset cache, null if it does not exist
4282 </summary>
4283 <param name="assetID">UUID of the asset we want to get</param>
4284 <returns>Raw bytes of the asset, or null on failure</returns>
4285 </member> 5489 </member>
4286 <member name="M:OpenMetaverse.AssetCache.GetCachedImage(OpenMetaverse.UUID)"> 5490 <member name="T:OpenMetaverse.Packets.StateSavePacket">
4287 <summary> 5491 <exclude/>
4288 Returns ImageDownload object of the
4289 image from the local image cache, null if it does not exist
4290 </summary>
4291 <param name="imageID">UUID of the image we want to get</param>
4292 <returns>ImageDownload object containing the image, or null on failure</returns>
4293 </member> 5492 </member>
4294 <member name="M:OpenMetaverse.AssetCache.FileName(OpenMetaverse.UUID)"> 5493 <member name="T:OpenMetaverse.Packets.StateSavePacket.AgentDataBlock">
4295 <summary> 5494 <exclude/>
4296 Constructs a file name of the cached asset
4297 </summary>
4298 <param name="assetID">UUID of the asset</param>
4299 <returns>String with the file name of the cahced asset</returns>
4300 </member> 5495 </member>
4301 <member name="M:OpenMetaverse.AssetCache.StaticFileName(OpenMetaverse.UUID)"> 5496 <member name="T:OpenMetaverse.Packets.StateSavePacket.DataBlockBlock">
4302 <summary> 5497 <exclude/>
4303 Constructs a file name of the static cached asset
4304 </summary>
4305 <param name="assetID">UUID of the asset</param>
4306 <returns>String with the file name of the static cached asset</returns>
4307 </member> 5498 </member>
4308 <member name="M:OpenMetaverse.AssetCache.SaveAssetToCache(OpenMetaverse.UUID,System.Byte[])"> 5499 <member name="T:OpenMetaverse.Packets.ReportAutosaveCrashPacket">
4309 <summary> 5500 <exclude/>
4310 Saves an asset to the local cache
4311 </summary>
4312 <param name="assetID">UUID of the asset</param>
4313 <param name="assetData">Raw bytes the asset consists of</param>
4314 <returns>Weather the operation was successfull</returns>
4315 </member> 5501 </member>
4316 <member name="M:OpenMetaverse.AssetCache.AssetFileName(OpenMetaverse.UUID)"> 5502 <member name="T:OpenMetaverse.Packets.ReportAutosaveCrashPacket.AutosaveDataBlock">
4317 <summary> 5503 <exclude/>
4318 Get the file name of the asset stored with gived UUID
4319 </summary>
4320 <param name="assetID">UUID of the asset</param>
4321 <returns>Null if we don't have that UUID cached on disk, file name if found in the cache folder</returns>
4322 </member> 5504 </member>
4323 <member name="M:OpenMetaverse.AssetCache.HasAsset(OpenMetaverse.UUID)"> 5505 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket">
4324 <summary> 5506 <exclude/>
4325 Checks if the asset exists in the local cache
4326 </summary>
4327 <param name="assetID">UUID of the asset</param>
4328 <returns>True is the asset is stored in the cache, otherwise false</returns>
4329 </member> 5507 </member>
4330 <member name="M:OpenMetaverse.AssetCache.Clear"> 5508 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket.AgentDataBlock">
4331 <summary> 5509 <exclude/>
4332 Wipes out entire cache
4333 </summary>
4334 </member> 5510 </member>
4335 <member name="M:OpenMetaverse.AssetCache.Prune"> 5511 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket.DataBlockBlock">
4336 <summary> 5512 <exclude/>
4337 Brings cache size to the 90% of the max size
4338 </summary>
4339 </member> 5513 </member>
4340 <member name="M:OpenMetaverse.AssetCache.BeginPrune"> 5514 <member name="T:OpenMetaverse.Packets.TrackAgentPacket">
4341 <summary> 5515 <exclude/>
4342 Asynchronously brings cache size to the 90% of the max size
4343 </summary>
4344 </member> 5516 </member>
4345 <member name="M:OpenMetaverse.AssetCache.GetFileSize(System.IO.FileInfo[])"> 5517 <member name="T:OpenMetaverse.Packets.TrackAgentPacket.AgentDataBlock">
4346 <summary> 5518 <exclude/>
4347 Adds up file sizes passes in a FileInfo array
4348 </summary>
4349 </member> 5519 </member>
4350 <member name="M:OpenMetaverse.AssetCache.Operational"> 5520 <member name="T:OpenMetaverse.Packets.TrackAgentPacket.TargetDataBlock">
4351 <summary> 5521 <exclude/>
4352 Checks whether caching is enabled
4353 </summary>
4354 </member> 5522 </member>
4355 <member name="M:OpenMetaverse.AssetCache.cleanerTimer_Elapsed(System.Object,System.Timers.ElapsedEventArgs)"> 5523 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket">
4356 <summary> 5524 <exclude/>
4357 Periodically prune the cache
4358 </summary>
4359 </member> 5525 </member>
4360 <member name="M:OpenMetaverse.AssetCache.NiceFileSize(System.Int64)"> 5526 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.AgentDataBlock">
4361 <summary> 5527 <exclude/>
4362 Nicely formats file sizes
4363 </summary>
4364 <param name="byteCount">Byte size we want to output</param>
4365 <returns>String with humanly readable file size</returns>
4366 </member> 5528 </member>
4367 <member name="T:OpenMetaverse.StatusCode"> 5529 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.DownloadTotalsBlock">
4368 <summary> 5530 <exclude/>
4369 </summary>
4370 </member> 5531 </member>
4371 <member name="F:OpenMetaverse.StatusCode.OK"> 5532 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.NetStatsBlock">
4372 <summary>OK</summary> 5533 <exclude/>
4373 </member> 5534 </member>
4374 <member name="F:OpenMetaverse.StatusCode.Done"> 5535 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.FailStatsBlock">
4375 <summary>Transfer completed</summary> 5536 <exclude/>
4376 </member> 5537 </member>
4377 <member name="F:OpenMetaverse.StatusCode.Skip"> 5538 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.MiscStatsBlock">
4378 <summary> 5539 <exclude/>
4379 </summary>
4380 </member> 5540 </member>
4381 <member name="F:OpenMetaverse.StatusCode.Abort"> 5541 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket">
4382 <summary> 5542 <exclude/>
4383 </summary>
4384 </member> 5543 </member>
4385 <member name="F:OpenMetaverse.StatusCode.Error"> 5544 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket.AgentDataBlock">
4386 <summary>Unknown error occurred</summary> 5545 <exclude/>
4387 </member> 5546 </member>
4388 <member name="F:OpenMetaverse.StatusCode.UnknownSource"> 5547 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket.DataBlock">
4389 <summary>Equivalent to a 404 error</summary> 5548 <exclude/>
4390 </member> 5549 </member>
4391 <member name="F:OpenMetaverse.StatusCode.InsufficientPermissions"> 5550 <member name="T:OpenMetaverse.Packets.UserReportPacket">
4392 <summary>Client does not have permission for that resource</summary> 5551 <exclude/>
4393 </member> 5552 </member>
4394 <member name="F:OpenMetaverse.StatusCode.Unknown"> 5553 <member name="T:OpenMetaverse.Packets.UserReportPacket.AgentDataBlock">
4395 <summary>Unknown status</summary> 5554 <exclude/>
4396 </member> 5555 </member>
4397 <member name="T:OpenMetaverse.ChannelType"> 5556 <member name="T:OpenMetaverse.Packets.UserReportPacket.ReportDataBlock">
4398 <summary> 5557 <exclude/>
4399 </summary>
4400 </member> 5558 </member>
4401 <member name="F:OpenMetaverse.ChannelType.Unknown"> 5559 <member name="T:OpenMetaverse.Packets.AlertMessagePacket">
4402 <summary> 5560 <exclude/>
4403 </summary>
4404 </member> 5561 </member>
4405 <member name="F:OpenMetaverse.ChannelType.Misc"> 5562 <member name="T:OpenMetaverse.Packets.AlertMessagePacket.AlertDataBlock">
4406 <summary>Unknown</summary> 5563 <exclude/>
4407 </member> 5564 </member>
4408 <member name="F:OpenMetaverse.ChannelType.Asset"> 5565 <member name="T:OpenMetaverse.Packets.AlertMessagePacket.AlertInfoBlock">
4409 <summary>Virtually all asset transfers use this channel</summary> 5566 <exclude/>
4410 </member> 5567 </member>
4411 <member name="T:OpenMetaverse.SourceType"> 5568 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket">
4412 <summary> 5569 <exclude/>
4413 </summary>
4414 </member> 5570 </member>
4415 <member name="F:OpenMetaverse.SourceType.Unknown"> 5571 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket.AgentDataBlock">
4416 <summary> 5572 <exclude/>
4417 </summary>
4418 </member> 5573 </member>
4419 <member name="F:OpenMetaverse.SourceType.Asset"> 5574 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket.AlertDataBlock">
4420 <summary>Asset from the asset server</summary> 5575 <exclude/>
4421 </member> 5576 </member>
4422 <member name="F:OpenMetaverse.SourceType.SimInventoryItem"> 5577 <member name="T:OpenMetaverse.Packets.MeanCollisionAlertPacket">
4423 <summary>Inventory item</summary> 5578 <exclude/>
4424 </member> 5579 </member>
4425 <member name="F:OpenMetaverse.SourceType.SimEstate"> 5580 <member name="T:OpenMetaverse.Packets.MeanCollisionAlertPacket.MeanCollisionBlock">
4426 <summary>Estate asset, such as an estate covenant</summary> 5581 <exclude/>
4427 </member> 5582 </member>
4428 <member name="T:OpenMetaverse.TargetType"> 5583 <member name="T:OpenMetaverse.Packets.ViewerFrozenMessagePacket">
4429 <summary> 5584 <exclude/>
4430 </summary>
4431 </member> 5585 </member>
4432 <member name="F:OpenMetaverse.TargetType.Unknown"> 5586 <member name="T:OpenMetaverse.Packets.ViewerFrozenMessagePacket.FrozenDataBlock">
4433 <summary> 5587 <exclude/>
4434 </summary>
4435 </member> 5588 </member>
4436 <member name="F:OpenMetaverse.TargetType.File"> 5589 <member name="T:OpenMetaverse.Packets.HealthMessagePacket">
4437 <summary> 5590 <exclude/>
4438 </summary>
4439 </member> 5591 </member>
4440 <member name="F:OpenMetaverse.TargetType.VFile"> 5592 <member name="T:OpenMetaverse.Packets.HealthMessagePacket.HealthDataBlock">
4441 <summary> 5593 <exclude/>
4442 </summary>
4443 </member> 5594 </member>
4444 <member name="T:OpenMetaverse.ImageType"> 5595 <member name="T:OpenMetaverse.Packets.ChatFromSimulatorPacket">
4445 <summary> 5596 <exclude/>
4446 </summary>
4447 </member> 5597 </member>
4448 <member name="F:OpenMetaverse.ImageType.Normal"> 5598 <member name="T:OpenMetaverse.Packets.ChatFromSimulatorPacket.ChatDataBlock">
4449 <summary> 5599 <exclude/>
4450 </summary>
4451 </member> 5600 </member>
4452 <member name="F:OpenMetaverse.ImageType.Baked"> 5601 <member name="T:OpenMetaverse.Packets.SimStatsPacket">
4453 <summary> 5602 <exclude/>
4454 </summary>
4455 </member> 5603 </member>
4456 <member name="T:OpenMetaverse.ImageCodec"> 5604 <member name="T:OpenMetaverse.Packets.SimStatsPacket.RegionBlock">
4457 <summary> 5605 <exclude/>
4458 Image file format
4459 </summary>
4460 </member> 5606 </member>
4461 <member name="T:OpenMetaverse.Transfer"> 5607 <member name="T:OpenMetaverse.Packets.SimStatsPacket.StatBlock">
4462 <summary> 5608 <exclude/>
4463 </summary>
4464 </member> 5609 </member>
4465 <member name="P:OpenMetaverse.Transfer.TimeSinceLastPacket"> 5610 <member name="T:OpenMetaverse.Packets.SimStatsPacket.PidStatBlock">
4466 <summary>Number of milliseconds passed since the last transfer 5611 <exclude/>
4467 packet was received</summary>
4468 </member> 5612 </member>
4469 <member name="T:OpenMetaverse.AssetDownload"> 5613 <member name="T:OpenMetaverse.Packets.SimStatsPacket.RegionInfoBlock">
4470 <summary> 5614 <exclude/>
4471 </summary>
4472 </member> 5615 </member>
4473 <member name="T:OpenMetaverse.XferDownload"> 5616 <member name="T:OpenMetaverse.Packets.RequestRegionInfoPacket">
4474 <summary> 5617 <exclude/>
4475 </summary>
4476 </member> 5618 </member>
4477 <member name="T:OpenMetaverse.ImageDownload"> 5619 <member name="T:OpenMetaverse.Packets.RequestRegionInfoPacket.AgentDataBlock">
4478 <summary> 5620 <exclude/>
4479 </summary>
4480 </member> 5621 </member>
4481 <member name="T:OpenMetaverse.AssetUpload"> 5622 <member name="T:OpenMetaverse.Packets.RegionInfoPacket">
4482 <summary> 5623 <exclude/>
4483 </summary>
4484 </member> 5624 </member>
4485 <member name="T:OpenMetaverse.ImageRequest"> 5625 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.AgentDataBlock">
4486 <summary> 5626 <exclude/>
4487 </summary>
4488 </member> 5627 </member>
4489 <member name="M:OpenMetaverse.ImageRequest.#ctor(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32)"> 5628 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.RegionInfoBlock">
4490 <summary> 5629 <exclude/>
4491 </summary>
4492 <param name="imageid">
4493 </param>
4494 <param name="type">
4495 </param>
4496 <param name="priority">
4497 </param>
4498 <param name="discardLevel">
4499 </param>
4500 </member> 5630 </member>
4501 <member name="T:OpenMetaverse.AssetManager"> 5631 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.RegionInfo2Block">
4502 <summary> 5632 <exclude/>
4503 </summary>
4504 </member> 5633 </member>
4505 <member name="M:OpenMetaverse.AssetManager.#ctor(OpenMetaverse.GridClient)"> 5634 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.RegionInfo3Block">
4506 <summary> 5635 <exclude/>
4507 Default constructor
4508 </summary>
4509 <param name="client">A reference to the GridClient object</param>
4510 </member> 5636 </member>
4511 <member name="T:OpenMetaverse.AssetManager.AssetReceivedCallback"> 5637 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket">
4512 <summary> 5638 <exclude/>
4513 Callback used for various asset download requests
4514 </summary>
4515 <param name="transfer">Transfer information</param>
4516 <param name="asset">Downloaded asset, null on fail</param>
4517 </member> 5639 </member>
4518 <member name="T:OpenMetaverse.AssetManager.BakedTextureUploadedCallback"> 5640 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket.AgentDataBlock">
4519 <summary> 5641 <exclude/>
4520 Callback used upon competition of baked texture upload
4521 </summary>
4522 <param name="newAssetID">Asset UUID of the newly uploaded baked texture</param>
4523 </member> 5642 </member>
4524 <member name="T:OpenMetaverse.AssetManager.MeshDownloadCallback"> 5643 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket.RegionInfoBlock">
4525 <summary> 5644 <exclude/>
4526 A callback that fires upon the completition of the RequestMesh call
4527 </summary>
4528 <param name="success">Was the download successfull</param>
4529 <param name="assetMesh">Resulting mesh or null on problems</param>
4530 </member> 5645 </member>
4531 <member name="F:OpenMetaverse.AssetManager.TRANSFER_HEADER_TIMEOUT"> 5646 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket.RegionInfo2Block">
4532 <summary>Number of milliseconds to wait for a transfer header packet if out of order data was received</summary> 5647 <exclude/>
4533 </member> 5648 </member>
4534 <member name="F:OpenMetaverse.AssetManager.m_XferReceivedEvent"> 5649 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket">
4535 <summary>The event subscribers. null if no subcribers</summary> 5650 <exclude/>
4536 </member> 5651 </member>
4537 <member name="F:OpenMetaverse.AssetManager.m_XferReceivedLock"> 5652 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfoBlock">
4538 <summary>Thread sync lock object</summary> 5653 <exclude/>
4539 </member> 5654 </member>
4540 <member name="F:OpenMetaverse.AssetManager.m_AssetUploadedEvent"> 5655 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfo2Block">
4541 <summary>The event subscribers. null if no subcribers</summary> 5656 <exclude/>
4542 </member> 5657 </member>
4543 <member name="F:OpenMetaverse.AssetManager.m_AssetUploadedLock"> 5658 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfo3Block">
4544 <summary>Thread sync lock object</summary> 5659 <exclude/>
4545 </member> 5660 </member>
4546 <member name="F:OpenMetaverse.AssetManager.m_UploadProgressEvent"> 5661 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfo4Block">
4547 <summary>The event subscribers. null if no subcribers</summary> 5662 <exclude/>
4548 </member> 5663 </member>
4549 <member name="F:OpenMetaverse.AssetManager.m_UploadProgressLock"> 5664 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket">
4550 <summary>Thread sync lock object</summary> 5665 <exclude/>
4551 </member> 5666 </member>
4552 <member name="F:OpenMetaverse.AssetManager.m_InitiateDownloadEvent"> 5667 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket.AgentDataBlock">
4553 <summary>The event subscribers. null if no subcribers</summary> 5668 <exclude/>
4554 </member> 5669 </member>
4555 <member name="F:OpenMetaverse.AssetManager.m_InitiateDownloadLock"> 5670 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket.RegionInfoBlock">
4556 <summary>Thread sync lock object</summary> 5671 <exclude/>
4557 </member> 5672 </member>
4558 <member name="F:OpenMetaverse.AssetManager.m_ImageReceiveProgressEvent"> 5673 <member name="T:OpenMetaverse.Packets.SimulatorViewerTimeMessagePacket">
4559 <summary>The event subscribers. null if no subcribers</summary> 5674 <exclude/>
4560 </member> 5675 </member>
4561 <member name="F:OpenMetaverse.AssetManager.m_ImageReceiveProgressLock"> 5676 <member name="T:OpenMetaverse.Packets.SimulatorViewerTimeMessagePacket.TimeInfoBlock">
4562 <summary>Thread sync lock object</summary> 5677 <exclude/>
4563 </member> 5678 </member>
4564 <member name="F:OpenMetaverse.AssetManager.Cache"> 5679 <member name="T:OpenMetaverse.Packets.EnableSimulatorPacket">
4565 <summary>Texture download cache</summary> 5680 <exclude/>
4566 </member> 5681 </member>
4567 <member name="E:OpenMetaverse.AssetManager.XferReceived"> 5682 <member name="T:OpenMetaverse.Packets.EnableSimulatorPacket.SimulatorInfoBlock">
4568 <summary>Raised when the simulator responds sends </summary> 5683 <exclude/>
4569 </member> 5684 </member>
4570 <member name="E:OpenMetaverse.AssetManager.AssetUploaded"> 5685 <member name="T:OpenMetaverse.Packets.DisableSimulatorPacket">
4571 <summary>Raised during upload completes</summary> 5686 <exclude/>
4572 </member> 5687 </member>
4573 <member name="E:OpenMetaverse.AssetManager.UploadProgress"> 5688 <member name="T:OpenMetaverse.Packets.TransferRequestPacket">
4574 <summary>Raised during upload with progres update</summary> 5689 <exclude/>
4575 </member> 5690 </member>
4576 <member name="E:OpenMetaverse.AssetManager.InitiateDownload"> 5691 <member name="T:OpenMetaverse.Packets.TransferRequestPacket.TransferInfoBlock">
4577 <summary>Fired when the simulator sends an InitiateDownloadPacket, used to download terrain .raw files</summary> 5692 <exclude/>
4578 </member> 5693 </member>
4579 <member name="E:OpenMetaverse.AssetManager.ImageReceiveProgress"> 5694 <member name="T:OpenMetaverse.Packets.TransferInfoPacket">
4580 <summary>Fired when a texture is in the process of being downloaded by the TexturePipeline class</summary> 5695 <exclude/>
4581 </member> 5696 </member>
4582 <member name="M:OpenMetaverse.AssetManager.OnXferReceived(OpenMetaverse.XferReceivedEventArgs)"> 5697 <member name="T:OpenMetaverse.Packets.TransferInfoPacket.TransferInfoBlock">
4583 <summary>Raises the XferReceived event</summary> 5698 <exclude/>
4584 <param name="e">A XferReceivedEventArgs object containing the
4585 data returned from the simulator</param>
4586 </member> 5699 </member>
4587 <member name="M:OpenMetaverse.AssetManager.OnAssetUploaded(OpenMetaverse.AssetUploadEventArgs)"> 5700 <member name="T:OpenMetaverse.Packets.TransferAbortPacket">
4588 <summary>Raises the AssetUploaded event</summary> 5701 <exclude/>
4589 <param name="e">A AssetUploadedEventArgs object containing the
4590 data returned from the simulator</param>
4591 </member> 5702 </member>
4592 <member name="M:OpenMetaverse.AssetManager.OnUploadProgress(OpenMetaverse.AssetUploadEventArgs)"> 5703 <member name="T:OpenMetaverse.Packets.TransferAbortPacket.TransferInfoBlock">
4593 <summary>Raises the UploadProgress event</summary> 5704 <exclude/>
4594 <param name="e">A UploadProgressEventArgs object containing the
4595 data returned from the simulator</param>
4596 </member> 5705 </member>
4597 <member name="M:OpenMetaverse.AssetManager.OnInitiateDownload(OpenMetaverse.InitiateDownloadEventArgs)"> 5706 <member name="T:OpenMetaverse.Packets.RequestXferPacket">
4598 <summary>Raises the InitiateDownload event</summary> 5707 <exclude/>
4599 <param name="e">A InitiateDownloadEventArgs object containing the
4600 data returned from the simulator</param>
4601 </member> 5708 </member>
4602 <member name="M:OpenMetaverse.AssetManager.OnImageReceiveProgress(OpenMetaverse.ImageReceiveProgressEventArgs)"> 5709 <member name="T:OpenMetaverse.Packets.RequestXferPacket.XferIDBlock">
4603 <summary>Raises the ImageReceiveProgress event</summary> 5710 <exclude/>
4604 <param name="e">A ImageReceiveProgressEventArgs object containing the
4605 data returned from the simulator</param>
4606 </member> 5711 </member>
4607 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.AssetManager.AssetReceivedCallback)"> 5712 <member name="T:OpenMetaverse.Packets.AbortXferPacket">
4608 <summary> 5713 <exclude/>
4609 Request an asset download
4610 </summary>
4611 <param name="assetID">Asset UUID</param>
4612 <param name="type">Asset type, must be correct for the transfer to succeed</param>
4613 <param name="priority">Whether to give this transfer an elevated priority</param>
4614 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
4615 </member> 5714 </member>
4616 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.SourceType,OpenMetaverse.AssetManager.AssetReceivedCallback)"> 5715 <member name="T:OpenMetaverse.Packets.AbortXferPacket.XferIDBlock">
4617 <summary> 5716 <exclude/>
4618 Request an asset download
4619 </summary>
4620 <param name="assetID">Asset UUID</param>
4621 <param name="type">Asset type, must be correct for the transfer to succeed</param>
4622 <param name="priority">Whether to give this transfer an elevated priority</param>
4623 <param name="sourceType">Source location of the requested asset</param>
4624 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
4625 </member> 5717 </member>
4626 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.SourceType,OpenMetaverse.UUID,OpenMetaverse.AssetManager.AssetReceivedCallback)"> 5718 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket">
4627 <summary> 5719 <exclude/>
4628 Request an asset download
4629 </summary>
4630 <param name="assetID">Asset UUID</param>
4631 <param name="type">Asset type, must be correct for the transfer to succeed</param>
4632 <param name="priority">Whether to give this transfer an elevated priority</param>
4633 <param name="sourceType">Source location of the requested asset</param>
4634 <param name="transactionID">UUID of the transaction</param>
4635 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
4636 </member> 5720 </member>
4637 <member name="M:OpenMetaverse.AssetManager.RequestAssetXfer(System.String,System.Boolean,System.Boolean,OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean)"> 5721 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.SenderBlock">
4638 <summary> 5722 <exclude/>
4639 Request an asset download through the almost deprecated Xfer system
4640 </summary>
4641 <param name="filename">Filename of the asset to request</param>
4642 <param name="deleteOnCompletion">Whether or not to delete the asset
4643 off the server after it is retrieved</param>
4644 <param name="useBigPackets">Use large transfer packets or not</param>
4645 <param name="vFileID">UUID of the file to request, if filename is
4646 left empty</param>
4647 <param name="vFileType">Asset type of <code>vFileID</code>, or
4648 <code>AssetType.Unknown</code> if filename is not empty</param>
4649 <param name="fromCache">Sets the FilePath in the request to Cache
4650 (4) if true, otherwise Unknown (0) is used</param>
4651 <returns>
4652 </returns>
4653 </member> 5723 </member>
4654 <member name="M:OpenMetaverse.AssetManager.RequestInventoryAsset(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.AssetManager.AssetReceivedCallback)"> 5724 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.ObjectDataBlock">
4655 <summary> 5725 <exclude/>
4656 </summary>
4657 <param name="assetID">Use UUID.Zero if you do not have the
4658 asset ID but have all the necessary permissions</param>
4659 <param name="itemID">The item ID of this asset in the inventory</param>
4660 <param name="taskID">Use UUID.Zero if you are not requesting an
4661 asset from an object inventory</param>
4662 <param name="ownerID">The owner of this asset</param>
4663 <param name="type">Asset type</param>
4664 <param name="priority">Whether to prioritize this asset download or not</param>
4665 <param name="callback">
4666 </param>
4667 </member> 5726 </member>
4668 <member name="M:OpenMetaverse.AssetManager.SetPendingAssetUploadData(OpenMetaverse.AssetUpload)"> 5727 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.VisualParamBlock">
4669 <summary> 5728 <exclude/>
4670 Used to force asset data into the PendingUpload property, ie: for raw terrain uploads
4671 </summary>
4672 <param name="assetData">An AssetUpload object containing the data to upload to the simulator</param>
4673 </member> 5729 </member>
4674 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.Assets.Asset,System.Boolean)"> 5730 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.AppearanceDataBlock">
4675 <summary> 5731 <exclude/>
4676 Request an asset be uploaded to the simulator
4677 </summary>
4678 <param name="asset">The <seealso cref="T:OpenMetaverse.Assets.Asset" /> Object containing the asset data</param>
4679 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
4680 in which the client was connected in addition to being stored on the asset server</param>
4681 <returns>The <seealso cref="T:OpenMetaverse.UUID" /> of the transfer, can be used to correlate the upload with
4682 events being fired</returns>
4683 </member> 5732 </member>
4684 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.AssetType,System.Byte[],System.Boolean)"> 5733 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket">
4685 <summary> 5734 <exclude/>
4686 Request an asset be uploaded to the simulator
4687 </summary>
4688 <param name="type">The <seealso cref="T:OpenMetaverse.AssetType" /> of the asset being uploaded</param>
4689 <param name="data">A byte array containing the encoded asset data</param>
4690 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
4691 in which the client was connected in addition to being stored on the asset server</param>
4692 <returns>The <seealso cref="T:OpenMetaverse.UUID" /> of the transfer, can be used to correlate the upload with
4693 events being fired</returns>
4694 </member> 5735 </member>
4695 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.UUID@,OpenMetaverse.AssetType,System.Byte[],System.Boolean)"> 5736 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket.ObjectDataBlock">
4696 <summary> 5737 <exclude/>
4697 Request an asset be uploaded to the simulator
4698 </summary>
4699 <param name="assetID">
4700 </param>
4701 <param name="type">Asset type to upload this data as</param>
4702 <param name="data">A byte array containing the encoded asset data</param>
4703 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
4704 in which the client was connected in addition to being stored on the asset server</param>
4705 <returns>The <seealso cref="T:OpenMetaverse.UUID" /> of the transfer, can be used to correlate the upload with
4706 events being fired</returns>
4707 </member> 5738 </member>
4708 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.UUID@,OpenMetaverse.AssetType,System.Byte[],System.Boolean,OpenMetaverse.UUID)"> 5739 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket.CameraPropertyBlock">
4709 <summary> 5740 <exclude/>
4710 Initiate an asset upload
4711 </summary>
4712 <param name="assetID">The ID this asset will have if the
4713 upload succeeds</param>
4714 <param name="type">Asset type to upload this data as</param>
4715 <param name="data">Raw asset data to upload</param>
4716 <param name="storeLocal">Whether to store this asset on the local
4717 simulator or the grid-wide asset server</param>
4718 <param name="transactionID">The tranaction id for the upload <see cref="!:RequestCreateItem" /></param>
4719 <returns>The transaction ID of this transfer</returns>
4720 </member> 5741 </member>
4721 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32,OpenMetaverse.TextureDownloadCallback,System.Boolean)"> 5742 <member name="T:OpenMetaverse.Packets.ClearFollowCamPropertiesPacket">
4722 <summary> 5743 <exclude/>
4723 Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline" /> system to
4724 manage the requests and re-assemble the image from the packets received from the simulator
4725 </summary>
4726 <param name="textureID">The <see cref="T:OpenMetaverse.UUID" /> of the texture asset to download</param>
4727 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType" /> of the texture asset.
4728 Use <see cref="F:OpenMetaverse.ImageType.Normal" /> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked" /> for baked layer texture assets</param>
4729 <param name="priority">A float indicating the requested priority for the transfer. Higher priority values tell the simulator
4730 to prioritize the request before lower valued requests. An image already being transferred using the <see cref="T:OpenMetaverse.TexturePipeline" /> can have
4731 its priority changed by resending the request with the new priority value</param>
4732 <param name="discardLevel">Number of quality layers to discard.
4733 This controls the end marker of the data sent. Sending with value -1 combined with priority of 0 cancels an in-progress
4734 transfer.</param>
4735 <remarks>A bug exists in the Linden Simulator where a -1 will occasionally be sent with a non-zero priority
4736 indicating an off-by-one error.</remarks>
4737 <param name="packetStart">The packet number to begin the request at. A value of 0 begins the request
4738 from the start of the asset texture</param>
4739 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback" /> callback to fire when the image is retrieved. The callback
4740 will contain the result of the request and the texture asset data</param>
4741 <param name="progress">If true, the callback will be fired for each chunk of the downloaded image.
4742 The callback asset parameter will contain all previously received chunks of the texture asset starting
4743 from the beginning of the request</param>
4744 <example>
4745 Request an image and fire a callback when the request is complete
4746 <code>
4747 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, TextureDownloader_OnDownloadFinished);
4748 private void TextureDownloader_OnDownloadFinished(TextureRequestState state, AssetTexture asset)
4749 {
4750 if(state == TextureRequestState.Finished)
4751 {
4752 Console.WriteLine("Texture {0} ({1} bytes) has been successfully downloaded",
4753 asset.AssetID,
4754 asset.AssetData.Length);
4755 }
4756 }
4757 </code>
4758 Request an image and use an inline anonymous method to handle the downloaded texture data
4759 <code>
4760 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, delegate(TextureRequestState state, AssetTexture asset)
4761 {
4762 if(state == TextureRequestState.Finished)
4763 {
4764 Console.WriteLine("Texture {0} ({1} bytes) has been successfully downloaded",
4765 asset.AssetID,
4766 asset.AssetData.Length);
4767 }
4768 }
4769 );
4770 </code>
4771 Request a texture, decode the texture to a bitmap image and apply it to a imagebox
4772 <code>
4773 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, TextureDownloader_OnDownloadFinished);
4774 private void TextureDownloader_OnDownloadFinished(TextureRequestState state, AssetTexture asset)
4775 {
4776 if(state == TextureRequestState.Finished)
4777 {
4778 ManagedImage imgData;
4779 Image bitmap;
4780 if (state == TextureRequestState.Finished)
4781 {
4782 OpenJPEG.DecodeToImage(assetTexture.AssetData, out imgData, out bitmap);
4783 picInsignia.Image = bitmap;
4784 }
4785 }
4786 }
4787 </code></example>
4788 </member> 5744 </member>
4789 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.TextureDownloadCallback)"> 5745 <member name="T:OpenMetaverse.Packets.ClearFollowCamPropertiesPacket.ObjectDataBlock">
4790 <summary> 5746 <exclude/>
4791 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline" /> system to
4792 manage the requests and re-assemble the image from the packets received from the simulator
4793 </summary>
4794 <param name="textureID">The <see cref="T:OpenMetaverse.UUID" /> of the texture asset to download</param>
4795 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback" /> callback to fire when the image is retrieved. The callback
4796 will contain the result of the request and the texture asset data</param>
4797 </member> 5747 </member>
4798 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,OpenMetaverse.TextureDownloadCallback)"> 5748 <member name="T:OpenMetaverse.Packets.RequestPayPricePacket">
4799 <summary> 5749 <exclude/>
4800 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline" /> system to
4801 manage the requests and re-assemble the image from the packets received from the simulator
4802 </summary>
4803 <param name="textureID">The <see cref="T:OpenMetaverse.UUID" /> of the texture asset to download</param>
4804 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType" /> of the texture asset.
4805 Use <see cref="F:OpenMetaverse.ImageType.Normal" /> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked" /> for baked layer texture assets</param>
4806 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback" /> callback to fire when the image is retrieved. The callback
4807 will contain the result of the request and the texture asset data</param>
4808 </member> 5750 </member>
4809 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,OpenMetaverse.TextureDownloadCallback,System.Boolean)"> 5751 <member name="T:OpenMetaverse.Packets.RequestPayPricePacket.ObjectDataBlock">
4810 <summary> 5752 <exclude/>
4811 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline" /> system to
4812 manage the requests and re-assemble the image from the packets received from the simulator
4813 </summary>
4814 <param name="textureID">The <see cref="T:OpenMetaverse.UUID" /> of the texture asset to download</param>
4815 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType" /> of the texture asset.
4816 Use <see cref="F:OpenMetaverse.ImageType.Normal" /> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked" /> for baked layer texture assets</param>
4817 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback" /> callback to fire when the image is retrieved. The callback
4818 will contain the result of the request and the texture asset data</param>
4819 <param name="progress">If true, the callback will be fired for each chunk of the downloaded image.
4820 The callback asset parameter will contain all previously received chunks of the texture asset starting
4821 from the beginning of the request</param>
4822 </member> 5753 </member>
4823 <member name="M:OpenMetaverse.AssetManager.RequestImageCancel(OpenMetaverse.UUID)"> 5754 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket">
4824 <summary> 5755 <exclude/>
4825 Cancel a texture request
4826 </summary>
4827 <param name="textureID">The texture assets <see cref="T:OpenMetaverse.UUID" /></param>
4828 </member> 5756 </member>
4829 <member name="M:OpenMetaverse.AssetManager.RequestMesh(OpenMetaverse.UUID,OpenMetaverse.AssetManager.MeshDownloadCallback)"> 5757 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket.ObjectDataBlock">
4830 <summary> 5758 <exclude/>
4831 Requests download of a mesh asset
4832 </summary>
4833 <param name="meshID">UUID of the mesh asset</param>
4834 <param name="callback">Callback when the request completes</param>
4835 </member> 5759 </member>
4836 <member name="M:OpenMetaverse.AssetManager.FireImageProgressEvent(OpenMetaverse.UUID,System.Int32,System.Int32)"> 5760 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket.ButtonDataBlock">
4837 <summary> 5761 <exclude/>
4838 Lets TexturePipeline class fire the progress event
4839 </summary>
4840 <param name="texureID">The texture ID currently being downloaded</param>
4841 <param name="transferredBytes">the number of bytes transferred</param>
4842 <param name="totalBytes">the total number of bytes expected</param>
4843 </member> 5762 </member>
4844 <member name="M:OpenMetaverse.AssetManager.TransferInfoHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5763 <member name="T:OpenMetaverse.Packets.KickUserPacket">
4845 <summary>Process an incoming packet and raise the appropriate events</summary> 5764 <exclude/>
4846 <param name="sender">The sender</param>
4847 <param name="e">The EventArgs object containing the packet data</param>
4848 </member> 5765 </member>
4849 <member name="M:OpenMetaverse.AssetManager.TransferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5766 <member name="T:OpenMetaverse.Packets.KickUserPacket.TargetBlockBlock">
4850 <summary>Process an incoming packet and raise the appropriate events</summary> 5767 <exclude/>
4851 <param name="sender">The sender</param>
4852 <param name="e">The EventArgs object containing the packet data</param>
4853 </member> 5768 </member>
4854 <member name="M:OpenMetaverse.AssetManager.InitiateDownloadPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5769 <member name="T:OpenMetaverse.Packets.KickUserPacket.UserInfoBlock">
4855 <summary>Process an incoming packet and raise the appropriate events</summary> 5770 <exclude/>
4856 <param name="sender">The sender</param>
4857 <param name="e">The EventArgs object containing the packet data</param>
4858 </member> 5771 </member>
4859 <member name="M:OpenMetaverse.AssetManager.RequestXferHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5772 <member name="T:OpenMetaverse.Packets.GodKickUserPacket">
4860 <summary>Process an incoming packet and raise the appropriate events</summary> 5773 <exclude/>
4861 <param name="sender">The sender</param>
4862 <param name="e">The EventArgs object containing the packet data</param>
4863 </member> 5774 </member>
4864 <member name="M:OpenMetaverse.AssetManager.ConfirmXferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5775 <member name="T:OpenMetaverse.Packets.GodKickUserPacket.UserInfoBlock">
4865 <summary>Process an incoming packet and raise the appropriate events</summary> 5776 <exclude/>
4866 <param name="sender">The sender</param>
4867 <param name="e">The EventArgs object containing the packet data</param>
4868 </member> 5777 </member>
4869 <member name="M:OpenMetaverse.AssetManager.AssetUploadCompleteHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5778 <member name="T:OpenMetaverse.Packets.EjectUserPacket">
4870 <summary>Process an incoming packet and raise the appropriate events</summary> 5779 <exclude/>
4871 <param name="sender">The sender</param>
4872 <param name="e">The EventArgs object containing the packet data</param>
4873 </member> 5780 </member>
4874 <member name="M:OpenMetaverse.AssetManager.SendXferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5781 <member name="T:OpenMetaverse.Packets.EjectUserPacket.AgentDataBlock">
4875 <summary>Process an incoming packet and raise the appropriate events</summary> 5782 <exclude/>
4876 <param name="sender">The sender</param>
4877 <param name="e">The EventArgs object containing the packet data</param>
4878 </member> 5783 </member>
4879 <member name="M:OpenMetaverse.AssetManager.AbortXferHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 5784 <member name="T:OpenMetaverse.Packets.EjectUserPacket.DataBlock">
4880 <summary>Process an incoming packet and raise the appropriate events</summary> 5785 <exclude/>
4881 <param name="sender">The sender</param>
4882 <param name="e">The EventArgs object containing the packet data</param>
4883 </member> 5786 </member>
4884 <member name="P:OpenMetaverse.XferReceivedEventArgs.Xfer"> 5787 <member name="T:OpenMetaverse.Packets.FreezeUserPacket">
4885 <summary>Xfer data</summary> 5788 <exclude/>
4886 </member> 5789 </member>
4887 <member name="P:OpenMetaverse.AssetUploadEventArgs.Upload"> 5790 <member name="T:OpenMetaverse.Packets.FreezeUserPacket.AgentDataBlock">
4888 <summary>Upload data</summary> 5791 <exclude/>
4889 </member> 5792 </member>
4890 <member name="P:OpenMetaverse.InitiateDownloadEventArgs.SimFileName"> 5793 <member name="T:OpenMetaverse.Packets.FreezeUserPacket.DataBlock">
4891 <summary>Filename used on the simulator</summary> 5794 <exclude/>
4892 </member> 5795 </member>
4893 <member name="P:OpenMetaverse.InitiateDownloadEventArgs.ViewerFileName"> 5796 <member name="T:OpenMetaverse.Packets.AvatarPropertiesRequestPacket">
4894 <summary>Filename used by the client</summary> 5797 <exclude/>
4895 </member> 5798 </member>
4896 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.ImageID"> 5799 <member name="T:OpenMetaverse.Packets.AvatarPropertiesRequestPacket.AgentDataBlock">
4897 <summary>UUID of the image that is in progress</summary> 5800 <exclude/>
4898 </member> 5801 </member>
4899 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.Received"> 5802 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket">
4900 <summary>Number of bytes received so far</summary> 5803 <exclude/>
4901 </member> 5804 </member>
4902 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.Total"> 5805 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket.AgentDataBlock">
4903 <summary>Image size in bytes</summary> 5806 <exclude/>
4904 </member> 5807 </member>
4905 <member name="T:OpenMetaverse.ProfileFlags"> 5808 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket.PropertiesDataBlock">
4906 <summary> 5809 <exclude/>
4907 Avatar profile flags
4908 </summary>
4909 </member> 5810 </member>
4910 <member name="T:OpenMetaverse.Avatar"> 5811 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket">
4911 <summary> 5812 <exclude/>
4912 Represents an avatar (other than your own)
4913 </summary>
4914 </member> 5813 </member>
4915 <member name="M:OpenMetaverse.Avatar.#ctor"> 5814 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket.AgentDataBlock">
4916 <summary> 5815 <exclude/>
4917 Default constructor
4918 </summary>
4919 </member> 5816 </member>
4920 <member name="T:OpenMetaverse.Avatar.Statistics"> 5817 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket.PropertiesDataBlock">
4921 <summary> 5818 <exclude/>
4922 Positive and negative ratings
4923 </summary>
4924 </member> 5819 </member>
4925 <member name="F:OpenMetaverse.Avatar.Statistics.BehaviorPositive"> 5820 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket">
4926 <summary>Positive ratings for Behavior</summary> 5821 <exclude/>
4927 </member> 5822 </member>
4928 <member name="F:OpenMetaverse.Avatar.Statistics.BehaviorNegative"> 5823 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.AgentDataBlock">
4929 <summary>Negative ratings for Behavior</summary> 5824 <exclude/>
4930 </member> 5825 </member>
4931 <member name="F:OpenMetaverse.Avatar.Statistics.AppearancePositive"> 5826 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.GroupDataBlock">
4932 <summary>Positive ratings for Appearance</summary> 5827 <exclude/>
4933 </member> 5828 </member>
4934 <member name="F:OpenMetaverse.Avatar.Statistics.AppearanceNegative"> 5829 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.NewGroupDataBlock">
4935 <summary>Negative ratings for Appearance</summary> 5830 <exclude/>
4936 </member> 5831 </member>
4937 <member name="F:OpenMetaverse.Avatar.Statistics.BuildingPositive"> 5832 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket">
4938 <summary>Positive ratings for Building</summary> 5833 <exclude/>
4939 </member> 5834 </member>
4940 <member name="F:OpenMetaverse.Avatar.Statistics.BuildingNegative"> 5835 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket.AgentDataBlock">
4941 <summary>Negative ratings for Building</summary> 5836 <exclude/>
4942 </member> 5837 </member>
4943 <member name="F:OpenMetaverse.Avatar.Statistics.GivenPositive"> 5838 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket.PropertiesDataBlock">
4944 <summary>Positive ratings given by this avatar</summary> 5839 <exclude/>
4945 </member> 5840 </member>
4946 <member name="F:OpenMetaverse.Avatar.Statistics.GivenNegative"> 5841 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket">
4947 <summary>Negative ratings given by this avatar</summary> 5842 <exclude/>
4948 </member> 5843 </member>
4949 <member name="T:OpenMetaverse.Avatar.AvatarProperties"> 5844 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket.AgentDataBlock">
4950 <summary> 5845 <exclude/>
4951 Avatar properties including about text, profile URL, image IDs and
4952 publishing settings
4953 </summary>
4954 </member> 5846 </member>
4955 <member name="F:OpenMetaverse.Avatar.AvatarProperties.FirstLifeText"> 5847 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket.PropertiesDataBlock">
4956 <summary>First Life about text</summary> 5848 <exclude/>
4957 </member> 5849 </member>
4958 <member name="F:OpenMetaverse.Avatar.AvatarProperties.FirstLifeImage"> 5850 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket">
4959 <summary>First Life image ID</summary> 5851 <exclude/>
4960 </member> 5852 </member>
4961 <member name="F:OpenMetaverse.Avatar.AvatarProperties.Partner"> 5853 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket.AgentDataBlock">
4962 <summary> 5854 <exclude/>
4963 </summary>
4964 </member> 5855 </member>
4965 <member name="F:OpenMetaverse.Avatar.AvatarProperties.AboutText"> 5856 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket.DataBlock">
4966 <summary> 5857 <exclude/>
4967 </summary>
4968 </member> 5858 </member>
4969 <member name="F:OpenMetaverse.Avatar.AvatarProperties.BornOn"> 5859 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket">
4970 <summary> 5860 <exclude/>
4971 </summary>
4972 </member> 5861 </member>
4973 <member name="F:OpenMetaverse.Avatar.AvatarProperties.CharterMember"> 5862 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket.AgentDataBlock">
4974 <summary> 5863 <exclude/>
4975 </summary>
4976 </member> 5864 </member>
4977 <member name="F:OpenMetaverse.Avatar.AvatarProperties.ProfileImage"> 5865 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket.DataBlock">
4978 <summary>Profile image ID</summary> 5866 <exclude/>
4979 </member> 5867 </member>
4980 <member name="F:OpenMetaverse.Avatar.AvatarProperties.Flags"> 5868 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket">
4981 <summary>Flags of the profile</summary> 5869 <exclude/>
4982 </member> 5870 </member>
4983 <member name="F:OpenMetaverse.Avatar.AvatarProperties.ProfileURL"> 5871 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket.AgentDataBlock">
4984 <summary>Web URL for this profile</summary> 5872 <exclude/>
4985 </member> 5873 </member>
4986 <member name="P:OpenMetaverse.Avatar.AvatarProperties.AllowPublish"> 5874 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket.DataBlock">
4987 <summary>Should this profile be published on the web</summary> 5875 <exclude/>
4988 </member> 5876 </member>
4989 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Online"> 5877 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket">
4990 <summary>Avatar Online Status</summary> 5878 <exclude/>
4991 </member> 5879 </member>
4992 <member name="P:OpenMetaverse.Avatar.AvatarProperties.MaturePublish"> 5880 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket.AgentDataBlock">
4993 <summary>Is this a mature profile</summary> 5881 <exclude/>
4994 </member> 5882 </member>
4995 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Identified"> 5883 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket.EventDataBlock">
4996 <summary> 5884 <exclude/>
4997 </summary>
4998 </member> 5885 </member>
4999 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Transacted"> 5886 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket">
5000 <summary> 5887 <exclude/>
5001 </summary>
5002 </member> 5888 </member>
5003 <member name="T:OpenMetaverse.Avatar.Interests"> 5889 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket.AgentDataBlock">
5004 <summary> 5890 <exclude/>
5005 Avatar interests including spoken languages, skills, and "want to"
5006 choices
5007 </summary>
5008 </member> 5891 </member>
5009 <member name="F:OpenMetaverse.Avatar.Interests.LanguagesText"> 5892 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket.EventDataBlock">
5010 <summary>Languages profile field</summary> 5893 <exclude/>
5011 </member> 5894 </member>
5012 <member name="F:OpenMetaverse.Avatar.Interests.SkillsMask"> 5895 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket">
5013 <summary> 5896 <exclude/>
5014 </summary>
5015 </member> 5897 </member>
5016 <member name="F:OpenMetaverse.Avatar.Interests.SkillsText"> 5898 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket.AgentDataBlock">
5017 <summary> 5899 <exclude/>
5018 </summary>
5019 </member> 5900 </member>
5020 <member name="F:OpenMetaverse.Avatar.Interests.WantToMask"> 5901 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket.EventDataBlock">
5021 <summary> 5902 <exclude/>
5022 </summary>
5023 </member> 5903 </member>
5024 <member name="F:OpenMetaverse.Avatar.Interests.WantToText"> 5904 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket">
5025 <summary> 5905 <exclude/>
5026 </summary>
5027 </member> 5906 </member>
5028 <member name="F:OpenMetaverse.Avatar.Groups"> 5907 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket.AgentDataBlock">
5029 <summary>Groups that this avatar is a member of</summary> 5908 <exclude/>
5030 </member> 5909 </member>
5031 <member name="F:OpenMetaverse.Avatar.ProfileStatistics"> 5910 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket.EventDataBlock">
5032 <summary>Positive and negative ratings</summary> 5911 <exclude/>
5033 </member> 5912 </member>
5034 <member name="F:OpenMetaverse.Avatar.ProfileProperties"> 5913 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket">
5035 <summary>Avatar properties including about text, profile URL, image IDs and 5914 <exclude/>
5036 publishing settings</summary>
5037 </member> 5915 </member>
5038 <member name="F:OpenMetaverse.Avatar.ProfileInterests"> 5916 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.AgentDataBlock">
5039 <summary>Avatar interests including spoken languages, skills, and "want to" 5917 <exclude/>
5040 choices</summary>
5041 </member> 5918 </member>
5042 <member name="F:OpenMetaverse.Avatar.ControlFlags"> 5919 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.EventDataBlock">
5043 <summary>Movement control flags for avatars. Typically not set or used by 5920 <exclude/>
5044 clients. To move your avatar, use Client.Self.Movement instead</summary>
5045 </member> 5921 </member>
5046 <member name="F:OpenMetaverse.Avatar.VisualParameters"> 5922 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.QueryDataBlock">
5047 <summary> 5923 <exclude/>
5048 Contains the visual parameters describing the deformation of the avatar
5049 </summary>
5050 </member> 5924 </member>
5051 <member name="P:OpenMetaverse.Avatar.FirstName"> 5925 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket">
5052 <summary>First name</summary> 5926 <exclude/>
5053 </member> 5927 </member>
5054 <member name="P:OpenMetaverse.Avatar.LastName"> 5928 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket.AgentDataBlock">
5055 <summary>Last name</summary> 5929 <exclude/>
5056 </member> 5930 </member>
5057 <member name="P:OpenMetaverse.Avatar.Name"> 5931 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket.DataBlock">
5058 <summary>Full name</summary> 5932 <exclude/>
5059 </member> 5933 </member>
5060 <member name="P:OpenMetaverse.Avatar.GroupName"> 5934 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket">
5061 <summary>Active group</summary> 5935 <exclude/>
5062 </member> 5936 </member>
5063 <member name="T:OpenMetaverse.AgentDisplayName"> 5937 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket.AgentDataBlock">
5064 <summary> Information about agents display name </summary> 5938 <exclude/>
5065 </member> 5939 </member>
5066 <member name="F:OpenMetaverse.AgentDisplayName.ID"> 5940 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket.DataBlock">
5067 <summary> Agent UUID </summary> 5941 <exclude/>
5068 </member> 5942 </member>
5069 <member name="F:OpenMetaverse.AgentDisplayName.UserName"> 5943 <member name="T:OpenMetaverse.Packets.PickDeletePacket">
5070 <summary> Username </summary> 5944 <exclude/>
5071 </member> 5945 </member>
5072 <member name="F:OpenMetaverse.AgentDisplayName.DisplayName"> 5946 <member name="T:OpenMetaverse.Packets.PickDeletePacket.AgentDataBlock">
5073 <summary> Display name </summary> 5947 <exclude/>
5074 </member> 5948 </member>
5075 <member name="F:OpenMetaverse.AgentDisplayName.LegacyFirstName"> 5949 <member name="T:OpenMetaverse.Packets.PickDeletePacket.DataBlock">
5076 <summary> First name (legacy) </summary> 5950 <exclude/>
5077 </member> 5951 </member>
5078 <member name="F:OpenMetaverse.AgentDisplayName.LegacyLastName"> 5952 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket">
5079 <summary> Last name (legacy) </summary> 5953 <exclude/>
5080 </member> 5954 </member>
5081 <member name="F:OpenMetaverse.AgentDisplayName.IsDefaultDisplayName"> 5955 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket.AgentDataBlock">
5082 <summary> Is display name default display name </summary> 5956 <exclude/>
5083 </member> 5957 </member>
5084 <member name="F:OpenMetaverse.AgentDisplayName.NextUpdate"> 5958 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket.DataBlock">
5085 <summary> Cache display name until </summary> 5959 <exclude/>
5086 </member> 5960 </member>
5087 <member name="P:OpenMetaverse.AgentDisplayName.LegacyFullName"> 5961 <member name="T:OpenMetaverse.Packets.ScriptQuestionPacket">
5088 <summary> Full name (legacy) </summary> 5962 <exclude/>
5089 </member> 5963 </member>
5090 <member name="M:OpenMetaverse.AgentDisplayName.FromOSD(OpenMetaverse.StructuredData.OSD)"> 5964 <member name="T:OpenMetaverse.Packets.ScriptQuestionPacket.DataBlock">
5091 <summary> 5965 <exclude/>
5092 Creates AgentDisplayName object from OSD
5093 </summary>
5094 <param name="data">Incoming OSD data</param>
5095 <returns>AgentDisplayName object</returns>
5096 </member> 5966 </member>
5097 <member name="M:OpenMetaverse.AgentDisplayName.GetOSD"> 5967 <member name="T:OpenMetaverse.Packets.ScriptControlChangePacket">
5098 <summary> 5968 <exclude/>
5099 Return object as OSD map
5100 </summary>
5101 <returns>OSD containing agent's display name data</returns>
5102 </member> 5969 </member>
5103 <member name="T:OpenMetaverse.AvatarGroup"> 5970 <member name="T:OpenMetaverse.Packets.ScriptControlChangePacket.DataBlock">
5104 <summary> 5971 <exclude/>
5105 Holds group information for Avatars such as those you might find in a profile
5106 </summary>
5107 </member> 5972 </member>
5108 <member name="F:OpenMetaverse.AvatarGroup.AcceptNotices"> 5973 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket">
5109 <summary>true of Avatar accepts group notices</summary> 5974 <exclude/>
5110 </member> 5975 </member>
5111 <member name="F:OpenMetaverse.AvatarGroup.GroupID"> 5976 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.DataBlock">
5112 <summary>Groups Key</summary> 5977 <exclude/>
5113 </member> 5978 </member>
5114 <member name="F:OpenMetaverse.AvatarGroup.GroupInsigniaID"> 5979 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.ButtonsBlock">
5115 <summary>Texture Key for groups insignia</summary> 5980 <exclude/>
5116 </member> 5981 </member>
5117 <member name="F:OpenMetaverse.AvatarGroup.GroupName"> 5982 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.OwnerDataBlock">
5118 <summary>Name of the group</summary> 5983 <exclude/>
5119 </member> 5984 </member>
5120 <member name="F:OpenMetaverse.AvatarGroup.GroupPowers"> 5985 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket">
5121 <summary>Powers avatar has in the group</summary> 5986 <exclude/>
5122 </member> 5987 </member>
5123 <member name="F:OpenMetaverse.AvatarGroup.GroupTitle"> 5988 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket.AgentDataBlock">
5124 <summary>Avatars Currently selected title</summary> 5989 <exclude/>
5125 </member> 5990 </member>
5126 <member name="F:OpenMetaverse.AvatarGroup.ListInProfile"> 5991 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket.DataBlock">
5127 <summary>true of Avatar has chosen to list this in their profile</summary> 5992 <exclude/>
5128 </member> 5993 </member>
5129 <member name="T:OpenMetaverse.Animation"> 5994 <member name="T:OpenMetaverse.Packets.ForceScriptControlReleasePacket">
5130 <summary> 5995 <exclude/>
5131 Contains an animation currently being played by an agent
5132 </summary>
5133 </member> 5996 </member>
5134 <member name="F:OpenMetaverse.Animation.AnimationID"> 5997 <member name="T:OpenMetaverse.Packets.ForceScriptControlReleasePacket.AgentDataBlock">
5135 <summary>The ID of the animation asset</summary> 5998 <exclude/>
5136 </member> 5999 </member>
5137 <member name="F:OpenMetaverse.Animation.AnimationSequence"> 6000 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket">
5138 <summary>A number to indicate start order of currently playing animations</summary> 6001 <exclude/>
5139 <remarks>On Linden Grids this number is unique per region, with OpenSim it is per client</remarks>
5140 </member> 6002 </member>
5141 <member name="F:OpenMetaverse.Animation.AnimationSourceObjectID"> 6003 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket.AgentDataBlock">
5142 <summary> 6004 <exclude/>
5143 </summary>
5144 </member> 6005 </member>
5145 <member name="T:OpenMetaverse.ProfilePick"> 6006 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket.DataBlock">
5146 <summary> 6007 <exclude/>
5147 Holds group information on an individual profile pick
5148 </summary>
5149 </member> 6008 </member>
5150 <member name="T:OpenMetaverse.AvatarManager"> 6009 <member name="T:OpenMetaverse.Packets.LoadURLPacket">
5151 <summary> 6010 <exclude/>
5152 Retrieve friend status notifications, and retrieve avatar names and
5153 profiles
5154 </summary>
5155 </member> 6011 </member>
5156 <member name="M:OpenMetaverse.AvatarManager.#ctor(OpenMetaverse.GridClient)"> 6012 <member name="T:OpenMetaverse.Packets.LoadURLPacket.DataBlock">
5157 <summary> 6013 <exclude/>
5158 Represents other avatars
5159 </summary>
5160 <param name="client">
5161 </param>
5162 </member> 6014 </member>
5163 <member name="T:OpenMetaverse.AvatarManager.DisplayNamesCallback"> 6015 <member name="T:OpenMetaverse.Packets.ScriptTeleportRequestPacket">
5164 <summary> 6016 <exclude/>
5165 Callback giving results when fetching display names
5166 </summary>
5167 <param name="success">If the request was successful</param>
5168 <param name="names">Array of display names</param>
5169 <param name="badIDs">Array of UUIDs that could not be fetched</param>
5170 </member> 6017 </member>
5171 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAnimation"> 6018 <member name="T:OpenMetaverse.Packets.ScriptTeleportRequestPacket.DataBlock">
5172 <summary>The event subscribers, null of no subscribers</summary> 6019 <exclude/>
5173 </member> 6020 </member>
5174 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAnimationLock"> 6021 <member name="T:OpenMetaverse.Packets.ParcelOverlayPacket">
5175 <summary>Thread sync lock object</summary> 6022 <exclude/>
5176 </member> 6023 </member>
5177 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAppearance"> 6024 <member name="T:OpenMetaverse.Packets.ParcelOverlayPacket.ParcelDataBlock">
5178 <summary>The event subscribers, null of no subscribers</summary> 6025 <exclude/>
5179 </member> 6026 </member>
5180 <member name="F:OpenMetaverse.AvatarManager.m_AvatarAppearanceLock"> 6027 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket">
5181 <summary>Thread sync lock object</summary> 6028 <exclude/>
5182 </member> 6029 </member>
5183 <member name="F:OpenMetaverse.AvatarManager.m_UUIDNameReply"> 6030 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket.AgentDataBlock">
5184 <summary>The event subscribers, null of no subscribers</summary> 6031 <exclude/>
5185 </member> 6032 </member>
5186 <member name="F:OpenMetaverse.AvatarManager.m_UUIDNameReplyLock"> 6033 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket.ParcelDataBlock">
5187 <summary>Thread sync lock object</summary> 6034 <exclude/>
5188 </member> 6035 </member>
5189 <member name="F:OpenMetaverse.AvatarManager.m_AvatarInterestsReply"> 6036 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket">
5190 <summary>The event subscribers, null of no subscribers</summary> 6037 <exclude/>
5191 </member> 6038 </member>
5192 <member name="F:OpenMetaverse.AvatarManager.m_AvatarInterestsReplyLock"> 6039 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket.AgentDataBlock">
5193 <summary>Thread sync lock object</summary> 6040 <exclude/>
5194 </member> 6041 </member>
5195 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPropertiesReply"> 6042 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket.ParcelDataBlock">
5196 <summary>The event subscribers, null of no subscribers</summary> 6043 <exclude/>
5197 </member> 6044 </member>
5198 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPropertiesReplyLock"> 6045 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket">
5199 <summary>Thread sync lock object</summary> 6046 <exclude/>
5200 </member> 6047 </member>
5201 <member name="F:OpenMetaverse.AvatarManager.m_AvatarGroupsReply"> 6048 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.AgentDataBlock">
5202 <summary>The event subscribers, null of no subscribers</summary> 6049 <exclude/>
5203 </member> 6050 </member>
5204 <member name="F:OpenMetaverse.AvatarManager.m_AvatarGroupsReplyLock"> 6051 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.ParcelDataBlock">
5205 <summary>Thread sync lock object</summary> 6052 <exclude/>
5206 </member> 6053 </member>
5207 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPickerReply"> 6054 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.TaskIDsBlock">
5208 <summary>The event subscribers, null of no subscribers</summary> 6055 <exclude/>
5209 </member> 6056 </member>
5210 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPickerReplyLock"> 6057 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.OwnerIDsBlock">
5211 <summary>Thread sync lock object</summary> 6058 <exclude/>
5212 </member> 6059 </member>
5213 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectPointAt"> 6060 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket">
5214 <summary>The event subscribers, null of no subscribers</summary> 6061 <exclude/>
5215 </member> 6062 </member>
5216 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectPointAtLock"> 6063 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket.AgentDataBlock">
5217 <summary>Thread sync lock object</summary> 6064 <exclude/>
5218 </member> 6065 </member>
5219 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLookAt"> 6066 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket.ParcelDataBlock">
5220 <summary>The event subscribers, null of no subscribers</summary> 6067 <exclude/>
5221 </member> 6068 </member>
5222 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLookAtLock"> 6069 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket">
5223 <summary>Thread sync lock object</summary> 6070 <exclude/>
5224 </member> 6071 </member>
5225 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffect"> 6072 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.AgentDataBlock">
5226 <summary>The event subscribers, null of no subscribers</summary> 6073 <exclude/>
5227 </member> 6074 </member>
5228 <member name="F:OpenMetaverse.AvatarManager.m_ViewerEffectLock"> 6075 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.ParcelDataBlock">
5229 <summary>Thread sync lock object</summary> 6076 <exclude/>
5230 </member> 6077 </member>
5231 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPicksReply"> 6078 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.TaskIDsBlock">
5232 <summary>The event subscribers, null of no subscribers</summary> 6079 <exclude/>
5233 </member> 6080 </member>
5234 <member name="F:OpenMetaverse.AvatarManager.m_AvatarPicksReplyLock"> 6081 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.OwnerIDsBlock">
5235 <summary>Thread sync lock object</summary> 6082 <exclude/>
5236 </member> 6083 </member>
5237 <member name="F:OpenMetaverse.AvatarManager.m_PickInfoReply"> 6084 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket">
5238 <summary>The event subscribers, null of no subscribers</summary> 6085 <exclude/>
5239 </member> 6086 </member>
5240 <member name="F:OpenMetaverse.AvatarManager.m_PickInfoReplyLock"> 6087 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.AgentDataBlock">
5241 <summary>Thread sync lock object</summary> 6088 <exclude/>
5242 </member> 6089 </member>
5243 <member name="F:OpenMetaverse.AvatarManager.m_AvatarClassifiedReply"> 6090 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.ParcelDataBlock">
5244 <summary>The event subscribers, null of no subscribers</summary> 6091 <exclude/>
5245 </member> 6092 </member>
5246 <member name="F:OpenMetaverse.AvatarManager.m_AvatarClassifiedReplyLock"> 6093 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.ReturnIDsBlock">
5247 <summary>Thread sync lock object</summary> 6094 <exclude/>
5248 </member> 6095 </member>
5249 <member name="F:OpenMetaverse.AvatarManager.m_ClassifiedInfoReply"> 6096 <member name="T:OpenMetaverse.Packets.EstateCovenantRequestPacket">
5250 <summary>The event subscribers, null of no subscribers</summary> 6097 <exclude/>
5251 </member> 6098 </member>
5252 <member name="F:OpenMetaverse.AvatarManager.m_ClassifiedInfoReplyLock"> 6099 <member name="T:OpenMetaverse.Packets.EstateCovenantRequestPacket.AgentDataBlock">
5253 <summary>Thread sync lock object</summary> 6100 <exclude/>
5254 </member> 6101 </member>
5255 <member name="F:OpenMetaverse.AvatarManager.m_DisplayNameUpdate"> 6102 <member name="T:OpenMetaverse.Packets.EstateCovenantReplyPacket">
5256 <summary>The event subscribers, null of no subscribers</summary> 6103 <exclude/>
5257 </member> 6104 </member>
5258 <member name="F:OpenMetaverse.AvatarManager.m_DisplayNameUpdateLock"> 6105 <member name="T:OpenMetaverse.Packets.EstateCovenantReplyPacket.DataBlock">
5259 <summary>Thread sync lock object</summary> 6106 <exclude/>
5260 </member> 6107 </member>
5261 <member name="E:OpenMetaverse.AvatarManager.AvatarAnimation"> 6108 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket">
5262 <summary>Raised when the simulator sends us data containing 6109 <exclude/>
5263 an agents animation playlist</summary>
5264 </member> 6110 </member>
5265 <member name="E:OpenMetaverse.AvatarManager.AvatarAppearance"> 6111 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket.HeaderBlock">
5266 <summary>Raised when the simulator sends us data containing 6112 <exclude/>
5267 the appearance information for an agent</summary>
5268 </member> 6113 </member>
5269 <member name="E:OpenMetaverse.AvatarManager.UUIDNameReply"> 6114 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket.DataBlock">
5270 <summary>Raised when the simulator sends us data containing 6115 <exclude/>
5271 agent names/id values</summary>
5272 </member> 6116 </member>
5273 <member name="E:OpenMetaverse.AvatarManager.AvatarInterestsReply"> 6117 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket">
5274 <summary>Raised when the simulator sends us data containing 6118 <exclude/>
5275 the interests listed in an agents profile</summary>
5276 </member> 6119 </member>
5277 <member name="E:OpenMetaverse.AvatarManager.AvatarPropertiesReply"> 6120 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket.AgentDataBlock">
5278 <summary>Raised when the simulator sends us data containing 6121 <exclude/>
5279 profile property information for an agent</summary>
5280 </member> 6122 </member>
5281 <member name="E:OpenMetaverse.AvatarManager.AvatarGroupsReply"> 6123 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket.ParcelDataBlock">
5282 <summary>Raised when the simulator sends us data containing 6124 <exclude/>
5283 the group membership an agent is a member of</summary>
5284 </member> 6125 </member>
5285 <member name="E:OpenMetaverse.AvatarManager.AvatarPickerReply"> 6126 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket">
5286 <summary>Raised when the simulator sends us data containing 6127 <exclude/>
5287 name/id pair</summary>
5288 </member> 6128 </member>
5289 <member name="E:OpenMetaverse.AvatarManager.ViewerEffectPointAt"> 6129 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket.AgentDataBlock">
5290 <summary>Raised when the simulator sends us data containing 6130 <exclude/>
5291 the objects and effect when an agent is pointing at</summary>
5292 </member> 6131 </member>
5293 <member name="E:OpenMetaverse.AvatarManager.ViewerEffectLookAt"> 6132 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket.DataBlock">
5294 <summary>Raised when the simulator sends us data containing 6133 <exclude/>
5295 the objects and effect when an agent is looking at</summary>
5296 </member> 6134 </member>
5297 <member name="E:OpenMetaverse.AvatarManager.ViewerEffect"> 6135 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket">
5298 <summary>Raised when the simulator sends us data containing 6136 <exclude/>
5299 an agents viewer effect information</summary>
5300 </member> 6137 </member>
5301 <member name="E:OpenMetaverse.AvatarManager.AvatarPicksReply"> 6138 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket.AgentDataBlock">
5302 <summary>Raised when the simulator sends us data containing 6139 <exclude/>
5303 the top picks from an agents profile</summary>
5304 </member> 6140 </member>
5305 <member name="E:OpenMetaverse.AvatarManager.PickInfoReply"> 6141 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket.DataBlock">
5306 <summary>Raised when the simulator sends us data containing 6142 <exclude/>
5307 the Pick details</summary>
5308 </member> 6143 </member>
5309 <member name="E:OpenMetaverse.AvatarManager.AvatarClassifiedReply"> 6144 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket">
5310 <summary>Raised when the simulator sends us data containing 6145 <exclude/>
5311 the classified ads an agent has placed</summary>
5312 </member> 6146 </member>
5313 <member name="E:OpenMetaverse.AvatarManager.ClassifiedInfoReply"> 6147 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.AgentDataBlock">
5314 <summary>Raised when the simulator sends us data containing 6148 <exclude/>
5315 the details of a classified ad</summary>
5316 </member> 6149 </member>
5317 <member name="E:OpenMetaverse.AvatarManager.DisplayNameUpdate"> 6150 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.DataBlock">
5318 <summary>Raised when the simulator sends us data containing 6151 <exclude/>
5319 the details of display name change</summary>
5320 </member> 6152 </member>
5321 <member name="M:OpenMetaverse.AvatarManager.OnAvatarAnimation(OpenMetaverse.AvatarAnimationEventArgs)"> 6153 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.ParcelDataBlock">
5322 <summary>Raises the AvatarAnimation Event</summary> 6154 <exclude/>
5323 <param name="e">An AvatarAnimationEventArgs object containing
5324 the data sent from the simulator</param>
5325 </member> 6155 </member>
5326 <member name="M:OpenMetaverse.AvatarManager.OnAvatarAppearance(OpenMetaverse.AvatarAppearanceEventArgs)"> 6156 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket">
5327 <summary>Raises the AvatarAppearance Event</summary> 6157 <exclude/>
5328 <param name="e">A AvatarAppearanceEventArgs object containing
5329 the data sent from the simulator</param>
5330 </member> 6158 </member>
5331 <member name="M:OpenMetaverse.AvatarManager.OnUUIDNameReply(OpenMetaverse.UUIDNameReplyEventArgs)"> 6159 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket.AgentDataBlock">
5332 <summary>Raises the UUIDNameReply Event</summary> 6160 <exclude/>
5333 <param name="e">A UUIDNameReplyEventArgs object containing
5334 the data sent from the simulator</param>
5335 </member> 6161 </member>
5336 <member name="M:OpenMetaverse.AvatarManager.OnAvatarInterestsReply(OpenMetaverse.AvatarInterestsReplyEventArgs)"> 6162 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket.ParcelDataBlock">
5337 <summary>Raises the AvatarInterestsReply Event</summary> 6163 <exclude/>
5338 <param name="e">A AvatarInterestsReplyEventArgs object containing
5339 the data sent from the simulator</param>
5340 </member> 6164 </member>
5341 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPropertiesReply(OpenMetaverse.AvatarPropertiesReplyEventArgs)"> 6165 <member name="T:OpenMetaverse.Packets.ParcelDividePacket">
5342 <summary>Raises the AvatarPropertiesReply Event</summary> 6166 <exclude/>
5343 <param name="e">A AvatarPropertiesReplyEventArgs object containing
5344 the data sent from the simulator</param>
5345 </member> 6167 </member>
5346 <member name="M:OpenMetaverse.AvatarManager.OnAvatarGroupsReply(OpenMetaverse.AvatarGroupsReplyEventArgs)"> 6168 <member name="T:OpenMetaverse.Packets.ParcelDividePacket.AgentDataBlock">
5347 <summary>Raises the AvatarGroupsReply Event</summary> 6169 <exclude/>
5348 <param name="e">A AvatarGroupsReplyEventArgs object containing
5349 the data sent from the simulator</param>
5350 </member> 6170 </member>
5351 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPickerReply(OpenMetaverse.AvatarPickerReplyEventArgs)"> 6171 <member name="T:OpenMetaverse.Packets.ParcelDividePacket.ParcelDataBlock">
5352 <summary>Raises the AvatarPickerReply Event</summary> 6172 <exclude/>
5353 <param name="e">A AvatarPickerReplyEventArgs object containing
5354 the data sent from the simulator</param>
5355 </member> 6173 </member>
5356 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffectPointAt(OpenMetaverse.ViewerEffectPointAtEventArgs)"> 6174 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket">
5357 <summary>Raises the ViewerEffectPointAt Event</summary> 6175 <exclude/>
5358 <param name="e">A ViewerEffectPointAtEventArgs object containing
5359 the data sent from the simulator</param>
5360 </member> 6176 </member>
5361 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffectLookAt(OpenMetaverse.ViewerEffectLookAtEventArgs)"> 6177 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket.AgentDataBlock">
5362 <summary>Raises the ViewerEffectLookAt Event</summary> 6178 <exclude/>
5363 <param name="e">A ViewerEffectLookAtEventArgs object containing
5364 the data sent from the simulator</param>
5365 </member> 6179 </member>
5366 <member name="M:OpenMetaverse.AvatarManager.OnViewerEffect(OpenMetaverse.ViewerEffectEventArgs)"> 6180 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket.DataBlock">
5367 <summary>Raises the ViewerEffect Event</summary> 6181 <exclude/>
5368 <param name="e">A ViewerEffectEventArgs object containing
5369 the data sent from the simulator</param>
5370 </member> 6182 </member>
5371 <member name="M:OpenMetaverse.AvatarManager.OnAvatarPicksReply(OpenMetaverse.AvatarPicksReplyEventArgs)"> 6183 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket">
5372 <summary>Raises the AvatarPicksReply Event</summary> 6184 <exclude/>
5373 <param name="e">A AvatarPicksReplyEventArgs object containing
5374 the data sent from the simulator</param>
5375 </member> 6185 </member>
5376 <member name="M:OpenMetaverse.AvatarManager.OnPickInfoReply(OpenMetaverse.PickInfoReplyEventArgs)"> 6186 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.AgentDataBlock">
5377 <summary>Raises the PickInfoReply Event</summary> 6187 <exclude/>
5378 <param name="e">A PickInfoReplyEventArgs object containing
5379 the data sent from the simulator</param>
5380 </member> 6188 </member>
5381 <member name="M:OpenMetaverse.AvatarManager.OnAvatarClassifiedReply(OpenMetaverse.AvatarClassifiedReplyEventArgs)"> 6189 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.DataBlock">
5382 <summary>Raises the AvatarClassifiedReply Event</summary> 6190 <exclude/>
5383 <param name="e">A AvatarClassifiedReplyEventArgs object containing
5384 the data sent from the simulator</param>
5385 </member> 6191 </member>
5386 <member name="M:OpenMetaverse.AvatarManager.OnClassifiedInfoReply(OpenMetaverse.ClassifiedInfoReplyEventArgs)"> 6192 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.ParcelDataBlock">
5387 <summary>Raises the ClassifiedInfoReply Event</summary> 6193 <exclude/>
5388 <param name="e">A ClassifiedInfoReplyEventArgs object containing
5389 the data sent from the simulator</param>
5390 </member> 6194 </member>
5391 <member name="M:OpenMetaverse.AvatarManager.OnDisplayNameUpdate(OpenMetaverse.DisplayNameUpdateEventArgs)"> 6195 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket">
5392 <summary>Raises the DisplayNameUpdate Event</summary> 6196 <exclude/>
5393 <param name="e">A DisplayNameUpdateEventArgs object containing
5394 the data sent from the simulator</param>
5395 </member> 6197 </member>
5396 <member name="M:OpenMetaverse.AvatarManager.RequestTrackAgent(OpenMetaverse.UUID)"> 6198 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket.AgentDataBlock">
5397 <summary>Tracks the specified avatar on your map</summary> 6199 <exclude/>
5398 <param name="preyID">Avatar ID to track</param>
5399 </member> 6200 </member>
5400 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarName(OpenMetaverse.UUID)"> 6201 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket.DataBlock">
5401 <summary> 6202 <exclude/>
5402 Request a single avatar name
5403 </summary>
5404 <param name="id">The avatar key to retrieve a name for</param>
5405 </member> 6203 </member>
5406 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarNames(System.Collections.Generic.List{OpenMetaverse.UUID})"> 6204 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket">
5407 <summary> 6205 <exclude/>
5408 Request a list of avatar names
5409 </summary>
5410 <param name="ids">The avatar keys to retrieve names for</param>
5411 </member> 6206 </member>
5412 <member name="M:OpenMetaverse.AvatarManager.DisplayNamesAvailable"> 6207 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket.AgentDataBlock">
5413 <summary> 6208 <exclude/>
5414 Check if Display Names functionality is available
5415 </summary>
5416 <returns>True if Display name functionality is available</returns>
5417 </member> 6209 </member>
5418 <member name="M:OpenMetaverse.AvatarManager.GetDisplayNames(System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.AvatarManager.DisplayNamesCallback)"> 6210 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket.DataBlock">
5419 <summary> 6211 <exclude/>
5420 Request retrieval of display names (max 90 names per request)
5421 </summary>
5422 <param name="ids">List of UUIDs to lookup</param>
5423 <param name="callback">Callback to report result of the operation</param>
5424 </member> 6212 </member>
5425 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarProperties(OpenMetaverse.UUID)"> 6213 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket">
5426 <summary> 6214 <exclude/>
5427 Start a request for Avatar Properties
5428 </summary>
5429 <param name="avatarid">
5430 </param>
5431 </member> 6215 </member>
5432 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarNameSearch(System.String,OpenMetaverse.UUID)"> 6216 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket.DataBlock">
5433 <summary> 6217 <exclude/>
5434 Search for an avatar (first name, last name)
5435 </summary>
5436 <param name="name">The name to search for</param>
5437 <param name="queryID">An ID to associate with this query</param>
5438 </member> 6218 </member>
5439 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarPicks(OpenMetaverse.UUID)"> 6219 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket.ListBlock">
5440 <summary> 6220 <exclude/>
5441 Start a request for Avatar Picks
5442 </summary>
5443 <param name="avatarid">UUID of the avatar</param>
5444 </member> 6221 </member>
5445 <member name="M:OpenMetaverse.AvatarManager.RequestAvatarClassified(OpenMetaverse.UUID)"> 6222 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket">
5446 <summary> 6223 <exclude/>
5447 Start a request for Avatar Classifieds
5448 </summary>
5449 <param name="avatarid">UUID of the avatar</param>
5450 </member> 6224 </member>
5451 <member name="M:OpenMetaverse.AvatarManager.RequestPickInfo(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 6225 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.AgentDataBlock">
5452 <summary> 6226 <exclude/>
5453 Start a request for details of a specific profile pick
5454 </summary>
5455 <param name="avatarid">UUID of the avatar</param>
5456 <param name="pickid">UUID of the profile pick</param>
5457 </member> 6227 </member>
5458 <member name="M:OpenMetaverse.AvatarManager.RequestClassifiedInfo(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 6228 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.DataBlock">
5459 <summary> 6229 <exclude/>
5460 Start a request for details of a specific profile classified
5461 </summary>
5462 <param name="avatarid">UUID of the avatar</param>
5463 <param name="classifiedid">UUID of the profile classified</param>
5464 </member> 6230 </member>
5465 <member name="M:OpenMetaverse.AvatarManager.UUIDNameReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6231 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.ListBlock">
5466 <summary>Process an incoming packet and raise the appropriate events</summary> 6232 <exclude/>
5467 <param name="sender">The sender</param>
5468 <param name="e">The EventArgs object containing the packet data</param>
5469 </member> 6233 </member>
5470 <member name="M:OpenMetaverse.AvatarManager.AvatarAnimationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6234 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket">
5471 <summary>Process an incoming packet and raise the appropriate events</summary> 6235 <exclude/>
5472 <param name="sender">The sender</param>
5473 <param name="e">The EventArgs object containing the packet data</param>
5474 </member> 6236 </member>
5475 <member name="M:OpenMetaverse.AvatarManager.AvatarAppearanceHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6237 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket.AgentDataBlock">
5476 <summary>Process an incoming packet and raise the appropriate events</summary> 6238 <exclude/>
5477 <param name="sender">The sender</param>
5478 <param name="e">The EventArgs object containing the packet data</param>
5479 </member> 6239 </member>
5480 <member name="M:OpenMetaverse.AvatarManager.AvatarPropertiesHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6240 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket.DataBlock">
5481 <summary>Process an incoming packet and raise the appropriate events</summary> 6241 <exclude/>
5482 <param name="sender">The sender</param>
5483 <param name="e">The EventArgs object containing the packet data</param>
5484 </member> 6242 </member>
5485 <member name="M:OpenMetaverse.AvatarManager.AvatarInterestsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6243 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket">
5486 <summary>Process an incoming packet and raise the appropriate events</summary> 6244 <exclude/>
5487 <param name="sender">The sender</param>
5488 <param name="e">The EventArgs object containing the packet data</param>
5489 </member> 6245 </member>
5490 <member name="M:OpenMetaverse.AvatarManager.DisplayNameUpdateMessageHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 6246 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket.AgentDataBlock">
5491 <summary> 6247 <exclude/>
5492 EQ Message fired when someone nearby changes their display name
5493 </summary>
5494 <param name="capsKey">The message key</param>
5495 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
5496 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> which originated the packet</param>
5497 </member> 6248 </member>
5498 <member name="M:OpenMetaverse.AvatarManager.AvatarGroupsReplyMessageHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 6249 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket.DataBlock">
5499 <summary> 6250 <exclude/>
5500 Crossed region handler for message that comes across the EventQueue. Sent to an agent
5501 when the agent crosses a sim border into a new region.
5502 </summary>
5503 <param name="capsKey">The message key</param>
5504 <param name="message">the IMessage object containing the deserialized data sent from the simulator</param>
5505 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> which originated the packet</param>
5506 </member> 6251 </member>
5507 <member name="M:OpenMetaverse.AvatarManager.AvatarGroupsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6252 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket">
5508 <summary>Process an incoming packet and raise the appropriate events</summary> 6253 <exclude/>
5509 <param name="sender">The sender</param>
5510 <param name="e">The EventArgs object containing the packet data</param>
5511 </member> 6254 </member>
5512 <member name="M:OpenMetaverse.AvatarManager.AvatarPickerReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6255 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket.AgentDataBlock">
5513 <summary>Process an incoming packet and raise the appropriate events</summary> 6256 <exclude/>
5514 <param name="sender">The sender</param>
5515 <param name="e">The EventArgs object containing the packet data</param>
5516 </member> 6257 </member>
5517 <member name="M:OpenMetaverse.AvatarManager.ViewerEffectHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6258 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket.ParcelDataBlock">
5518 <summary>Process an incoming packet and raise the appropriate events</summary> 6259 <exclude/>
5519 <param name="sender">The sender</param>
5520 <param name="e">The EventArgs object containing the packet data</param>
5521 </member> 6260 </member>
5522 <member name="M:OpenMetaverse.AvatarManager.AvatarPicksReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6261 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket">
5523 <summary>Process an incoming packet and raise the appropriate events</summary> 6262 <exclude/>
5524 <param name="sender">The sender</param>
5525 <param name="e">The EventArgs object containing the packet data</param>
5526 </member> 6263 </member>
5527 <member name="M:OpenMetaverse.AvatarManager.PickInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6264 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket.AgentDataBlock">
5528 <summary>Process an incoming packet and raise the appropriate events</summary> 6265 <exclude/>
5529 <param name="sender">The sender</param>
5530 <param name="e">The EventArgs object containing the packet data</param>
5531 </member> 6266 </member>
5532 <member name="M:OpenMetaverse.AvatarManager.AvatarClassifiedReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6267 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket.ParcelDataBlock">
5533 <summary>Process an incoming packet and raise the appropriate events</summary> 6268 <exclude/>
5534 <param name="sender">The sender</param>
5535 <param name="e">The EventArgs object containing the packet data</param>
5536 </member> 6269 </member>
5537 <member name="M:OpenMetaverse.AvatarManager.ClassifiedInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 6270 <member name="T:OpenMetaverse.Packets.UUIDNameRequestPacket">
5538 <summary>Process an incoming packet and raise the appropriate events</summary> 6271 <exclude/>
5539 <param name="sender">The sender</param>
5540 <param name="e">The EventArgs object containing the packet data</param>
5541 </member> 6272 </member>
5542 <member name="T:OpenMetaverse.AvatarAnimationEventArgs"> 6273 <member name="T:OpenMetaverse.Packets.UUIDNameRequestPacket.UUIDNameBlockBlock">
5543 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAnimation" /> event</summary> 6274 <exclude/>
5544 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAnimation" /> event occurs when the simulator sends
5545 the animation playlist for an agent</remarks>
5546 <example>
5547 The following code example uses the <see cref="P:OpenMetaverse.AvatarAnimationEventArgs.AvatarID" /> and <see cref="P:OpenMetaverse.AvatarAnimationEventArgs.Animations" />
5548 properties to display the animation playlist of an avatar on the <see cref="T:System.Console" /> window.
5549 <code>
5550 // subscribe to the event
5551 Client.Avatars.AvatarAnimation += Avatars_AvatarAnimation;
5552 private void Avatars_AvatarAnimation(object sender, AvatarAnimationEventArgs e)
5553 {
5554 // create a dictionary of "known" animations from the Animations class using System.Reflection
5555 Dictionary&lt;UUID, string&gt; systemAnimations = new Dictionary&lt;UUID, string&gt;();
5556 Type type = typeof(Animations);
5557 System.Reflection.FieldInfo[] fields = type.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
5558 foreach (System.Reflection.FieldInfo field in fields)
5559 {
5560 systemAnimations.Add((UUID)field.GetValue(type), field.Name);
5561 }
5562 // find out which animations being played are known animations and which are assets
5563 foreach (Animation animation in e.Animations)
5564 {
5565 if (systemAnimations.ContainsKey(animation.AnimationID))
5566 {
5567 Console.WriteLine("{0} is playing {1} ({2}) sequence {3}", e.AvatarID,
5568 systemAnimations[animation.AnimationID], animation.AnimationSequence);
5569 }
5570 else
5571 {
5572 Console.WriteLine("{0} is playing {1} (Asset) sequence {2}", e.AvatarID,
5573 animation.AnimationID, animation.AnimationSequence);
5574 }
5575 }
5576 }
5577 </code></example>
5578 </member> 6275 </member>
5579 <member name="M:OpenMetaverse.AvatarAnimationEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.Animation})"> 6276 <member name="T:OpenMetaverse.Packets.UUIDNameReplyPacket">
5580 <summary> 6277 <exclude/>
5581 Construct a new instance of the AvatarAnimationEventArgs class
5582 </summary>
5583 <param name="avatarID">The ID of the agent</param>
5584 <param name="anims">The list of animations to start</param>
5585 </member> 6278 </member>
5586 <member name="P:OpenMetaverse.AvatarAnimationEventArgs.AvatarID"> 6279 <member name="T:OpenMetaverse.Packets.UUIDNameReplyPacket.UUIDNameBlockBlock">
5587 <summary>Get the ID of the agent</summary> 6280 <exclude/>
5588 </member> 6281 </member>
5589 <member name="P:OpenMetaverse.AvatarAnimationEventArgs.Animations"> 6282 <member name="T:OpenMetaverse.Packets.UUIDGroupNameRequestPacket">
5590 <summary>Get the list of animations to start</summary> 6283 <exclude/>
5591 </member> 6284 </member>
5592 <member name="T:OpenMetaverse.AvatarAppearanceEventArgs"> 6285 <member name="T:OpenMetaverse.Packets.UUIDGroupNameRequestPacket.UUIDNameBlockBlock">
5593 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance" /> event</summary> 6286 <exclude/>
5594 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance" /> event occurs when the simulator sends
5595 the appearance data for an avatar</remarks>
5596 <example>
5597 The following code example uses the <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID" /> and <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams" />
5598 properties to display the selected shape of an avatar on the <see cref="T:System.Console" /> window.
5599 <code>
5600 // subscribe to the event
5601 Client.Avatars.AvatarAppearance += Avatars_AvatarAppearance;
5602 // handle the data when the event is raised
5603 void Avatars_AvatarAppearance(object sender, AvatarAppearanceEventArgs e)
5604 {
5605 Console.WriteLine("The Agent {0} is using a {1} shape.", e.AvatarID, (e.VisualParams[31] &gt; 0) : "male" ? "female")
5606 }
5607 </code></example>
5608 </member> 6287 </member>
5609 <member name="M:OpenMetaverse.AvatarAppearanceEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean,OpenMetaverse.Primitive.TextureEntryFace,OpenMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte})"> 6288 <member name="T:OpenMetaverse.Packets.UUIDGroupNameReplyPacket">
5610 <summary> 6289 <exclude/>
5611 Construct a new instance of the AvatarAppearanceEventArgs class
5612 </summary>
5613 <param name="sim">The simulator request was from</param>
5614 <param name="avatarID">The ID of the agent</param>
5615 <param name="isTrial">true of the agent is a trial account</param>
5616 <param name="defaultTexture">The default agent texture</param>
5617 <param name="faceTextures">The agents appearance layer textures</param>
5618 <param name="visualParams">The <see cref="T:OpenMetaverse.VisualParams" /> for the agent</param>
5619 </member> 6290 </member>
5620 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.Simulator"> 6291 <member name="T:OpenMetaverse.Packets.UUIDGroupNameReplyPacket.UUIDNameBlockBlock">
5621 <summary>Get the Simulator this request is from of the agent</summary> 6292 <exclude/>
5622 </member> 6293 </member>
5623 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID"> 6294 <member name="T:OpenMetaverse.Packets.ChildAgentDyingPacket">
5624 <summary>Get the ID of the agent</summary> 6295 <exclude/>
5625 </member> 6296 </member>
5626 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.IsTrial"> 6297 <member name="T:OpenMetaverse.Packets.ChildAgentDyingPacket.AgentDataBlock">
5627 <summary>true if the agent is a trial account</summary> 6298 <exclude/>
5628 </member> 6299 </member>
5629 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.DefaultTexture"> 6300 <member name="T:OpenMetaverse.Packets.ChildAgentUnknownPacket">
5630 <summary>Get the default agent texture</summary> 6301 <exclude/>
5631 </member> 6302 </member>
5632 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.FaceTextures"> 6303 <member name="T:OpenMetaverse.Packets.ChildAgentUnknownPacket.AgentDataBlock">
5633 <summary>Get the agents appearance layer textures</summary> 6304 <exclude/>
5634 </member> 6305 </member>
5635 <member name="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams"> 6306 <member name="T:OpenMetaverse.Packets.GetScriptRunningPacket">
5636 <summary>Get the <see cref="T:OpenMetaverse.VisualParams" /> for the agent</summary> 6307 <exclude/>
5637 </member> 6308 </member>
5638 <member name="T:OpenMetaverse.AvatarInterestsReplyEventArgs"> 6309 <member name="T:OpenMetaverse.Packets.GetScriptRunningPacket.ScriptBlock">
5639 <summary>Represents the interests from the profile of an agent</summary> 6310 <exclude/>
5640 </member> 6311 </member>
5641 <member name="P:OpenMetaverse.AvatarInterestsReplyEventArgs.AvatarID"> 6312 <member name="T:OpenMetaverse.Packets.ScriptRunningReplyPacket">
5642 <summary>Get the ID of the agent</summary> 6313 <exclude/>
5643 </member> 6314 </member>
5644 <member name="T:OpenMetaverse.AvatarPropertiesReplyEventArgs"> 6315 <member name="T:OpenMetaverse.Packets.ScriptRunningReplyPacket.ScriptBlock">
5645 <summary>The properties of an agent</summary> 6316 <exclude/>
5646 </member> 6317 </member>
5647 <member name="P:OpenMetaverse.AvatarPropertiesReplyEventArgs.AvatarID"> 6318 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket">
5648 <summary>Get the ID of the agent</summary> 6319 <exclude/>
5649 </member> 6320 </member>
5650 <member name="P:OpenMetaverse.AvatarGroupsReplyEventArgs.AvatarID"> 6321 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket.AgentDataBlock">
5651 <summary>Get the ID of the agent</summary> 6322 <exclude/>
5652 </member> 6323 </member>
5653 <member name="P:OpenMetaverse.AvatarPicksReplyEventArgs.AvatarID"> 6324 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket.ScriptBlock">
5654 <summary>Get the ID of the agent</summary> 6325 <exclude/>
5655 </member> 6326 </member>
5656 <member name="P:OpenMetaverse.AvatarClassifiedReplyEventArgs.AvatarID"> 6327 <member name="T:OpenMetaverse.Packets.ScriptResetPacket">
5657 <summary>Get the ID of the avatar</summary> 6328 <exclude/>
5658 </member> 6329 </member>
5659 <member name="T:OpenMetaverse.DisplayNameUpdateEventArgs"> 6330 <member name="T:OpenMetaverse.Packets.ScriptResetPacket.AgentDataBlock">
5660 <summary> 6331 <exclude/>
5661 Event args class for display name notification messages
5662 </summary>
5663 </member> 6332 </member>
5664 <member name="T:OpenMetaverse.BinBVHAnimationReader"> 6333 <member name="T:OpenMetaverse.Packets.ScriptResetPacket.ScriptBlock">
5665 <summary> 6334 <exclude/>
5666 Reads in a byte array of an Animation Asset created by the SecondLife(tm) client.
5667 </summary>
5668 </member> 6335 </member>
5669 <member name="M:OpenMetaverse.BinBVHAnimationReader.#ctor(System.Byte[])"> 6336 <member name="T:OpenMetaverse.Packets.ScriptSensorRequestPacket">
5670 <summary> 6337 <exclude/>
5671 Searialize an animation asset into it's joints/keyframes/meta data
5672 </summary>
5673 <param name="animationdata">
5674 </param>
5675 </member> 6338 </member>
5676 <member name="F:OpenMetaverse.BinBVHAnimationReader.rotationkeys"> 6339 <member name="T:OpenMetaverse.Packets.ScriptSensorRequestPacket.RequesterBlock">
5677 <summary> 6340 <exclude/>
5678 Rotation Keyframe count (used internally)
5679 </summary>
5680 </member> 6341 </member>
5681 <member name="F:OpenMetaverse.BinBVHAnimationReader.positionkeys"> 6342 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket">
5682 <summary> 6343 <exclude/>
5683 Position Keyframe count (used internally)
5684 </summary>
5685 </member> 6344 </member>
5686 <member name="F:OpenMetaverse.BinBVHAnimationReader.Priority"> 6345 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket.RequesterBlock">
5687 <summary> 6346 <exclude/>
5688 Animation Priority
5689 </summary>
5690 </member> 6347 </member>
5691 <member name="F:OpenMetaverse.BinBVHAnimationReader.Length"> 6348 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket.SensedDataBlock">
5692 <summary> 6349 <exclude/>
5693 The animation length in seconds.
5694 </summary>
5695 </member> 6350 </member>
5696 <member name="F:OpenMetaverse.BinBVHAnimationReader.ExpressionName"> 6351 <member name="T:OpenMetaverse.Packets.CompleteAgentMovementPacket">
5697 <summary> 6352 <exclude/>
5698 Expression set in the client. Null if [None] is selected
5699 </summary>
5700 </member> 6353 </member>
5701 <member name="F:OpenMetaverse.BinBVHAnimationReader.InPoint"> 6354 <member name="T:OpenMetaverse.Packets.CompleteAgentMovementPacket.AgentDataBlock">
5702 <summary> 6355 <exclude/>
5703 The time in seconds to start the animation
5704 </summary>
5705 </member> 6356 </member>
5706 <member name="F:OpenMetaverse.BinBVHAnimationReader.OutPoint"> 6357 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket">
5707 <summary> 6358 <exclude/>
5708 The time in seconds to end the animation
5709 </summary>
5710 </member> 6359 </member>
5711 <member name="F:OpenMetaverse.BinBVHAnimationReader.Loop"> 6360 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.AgentDataBlock">
5712 <summary> 6361 <exclude/>
5713 Loop the animation
5714 </summary>
5715 </member> 6362 </member>
5716 <member name="F:OpenMetaverse.BinBVHAnimationReader.EaseInTime"> 6363 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.DataBlock">
5717 <summary> 6364 <exclude/>
5718 Meta data. Ease in Seconds.
5719 </summary>
5720 </member> 6365 </member>
5721 <member name="F:OpenMetaverse.BinBVHAnimationReader.EaseOutTime"> 6366 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.SimDataBlock">
5722 <summary> 6367 <exclude/>
5723 Meta data. Ease out seconds.
5724 </summary>
5725 </member> 6368 </member>
5726 <member name="F:OpenMetaverse.BinBVHAnimationReader.HandPose"> 6369 <member name="T:OpenMetaverse.Packets.LogoutRequestPacket">
5727 <summary> 6370 <exclude/>
5728 Meta Data for the Hand Pose
5729 </summary>
5730 </member> 6371 </member>
5731 <member name="F:OpenMetaverse.BinBVHAnimationReader.JointCount"> 6372 <member name="T:OpenMetaverse.Packets.LogoutRequestPacket.AgentDataBlock">
5732 <summary> 6373 <exclude/>
5733 Number of joints defined in the animation
5734 </summary>
5735 </member> 6374 </member>
5736 <member name="F:OpenMetaverse.BinBVHAnimationReader.joints"> 6375 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket">
5737 <summary> 6376 <exclude/>
5738 Contains an array of joints
5739 </summary>
5740 </member> 6377 </member>
5741 <member name="M:OpenMetaverse.BinBVHAnimationReader.ReadBytesUntilNull(System.Byte[],System.Int32@)"> 6378 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket.AgentDataBlock">
5742 <summary> 6379 <exclude/>
5743 Variable length strings seem to be null terminated in the animation asset.. but..
5744 use with caution, home grown.
5745 advances the index.
5746 </summary>
5747 <param name="data">The animation asset byte array</param>
5748 <param name="i">The offset to start reading</param>
5749 <returns>a string</returns>
5750 </member> 6380 </member>
5751 <member name="M:OpenMetaverse.BinBVHAnimationReader.readJoint(System.Byte[],System.Int32@)"> 6381 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket.InventoryDataBlock">
5752 <summary> 6382 <exclude/>
5753 Read in a Joint from an animation asset byte array
5754 Variable length Joint fields, yay!
5755 Advances the index
5756 </summary>
5757 <param name="data">animation asset byte array</param>
5758 <param name="i">Byte Offset of the start of the joint</param>
5759 <returns>The Joint data serialized into the binBVHJoint structure</returns>
5760 </member> 6383 </member>
5761 <member name="M:OpenMetaverse.BinBVHAnimationReader.readKeys(System.Byte[],System.Int32@,System.Int32,System.Single,System.Single)"> 6384 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket">
5762 <summary> 6385 <exclude/>
5763 Read Keyframes of a certain type
5764 advance i
5765 </summary>
5766 <param name="data">Animation Byte array</param>
5767 <param name="i">Offset in the Byte Array. Will be advanced</param>
5768 <param name="keycount">Number of Keyframes</param>
5769 <param name="min">Scaling Min to pass to the Uint16ToFloat method</param>
5770 <param name="max">Scaling Max to pass to the Uint16ToFloat method</param>
5771 <returns>
5772 </returns>
5773 </member> 6386 </member>
5774 <member name="T:OpenMetaverse.binBVHJoint"> 6387 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket.AgentDataBlock">
5775 <summary> 6388 <exclude/>
5776 A Joint and it's associated meta data and keyframes
5777 </summary>
5778 </member> 6389 </member>
5779 <member name="F:OpenMetaverse.binBVHJoint.Name"> 6390 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket.MessageBlockBlock">
5780 <summary> 6391 <exclude/>
5781 Name of the Joint. Matches the avatar_skeleton.xml in client distros
5782 </summary>
5783 </member> 6392 </member>
5784 <member name="F:OpenMetaverse.binBVHJoint.Priority"> 6393 <member name="T:OpenMetaverse.Packets.RetrieveInstantMessagesPacket">
5785 <summary> 6394 <exclude/>
5786 Joint Animation Override? Was the same as the Priority in testing..
5787 </summary>
5788 </member> 6395 </member>
5789 <member name="F:OpenMetaverse.binBVHJoint.rotationkeys"> 6396 <member name="T:OpenMetaverse.Packets.RetrieveInstantMessagesPacket.AgentDataBlock">
5790 <summary> 6397 <exclude/>
5791 Array of Rotation Keyframes in order from earliest to latest
5792 </summary>
5793 </member> 6398 </member>
5794 <member name="F:OpenMetaverse.binBVHJoint.positionkeys"> 6399 <member name="T:OpenMetaverse.Packets.FindAgentPacket">
5795 <summary> 6400 <exclude/>
5796 Array of Position Keyframes in order from earliest to latest
5797 This seems to only be for the Pelvis?
5798 </summary>
5799 </member> 6401 </member>
5800 <member name="F:OpenMetaverse.binBVHJoint.Tag"> 6402 <member name="T:OpenMetaverse.Packets.FindAgentPacket.AgentBlockBlock">
5801 <summary> 6403 <exclude/>
5802 Custom application data that can be attached to a joint
5803 </summary>
5804 </member> 6404 </member>
5805 <member name="T:OpenMetaverse.binBVHJointKey"> 6405 <member name="T:OpenMetaverse.Packets.FindAgentPacket.LocationBlockBlock">
5806 <summary> 6406 <exclude/>
5807 A Joint Keyframe. This is either a position or a rotation.
5808 </summary>
5809 </member> 6407 </member>
5810 <member name="F:OpenMetaverse.binBVHJointKey.key_element"> 6408 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket">
6409 <exclude/>
6410 </member>
6411 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket.AgentDataBlock">
6412 <exclude/>
6413 </member>
6414 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket.RequestBlockBlock">
6415 <exclude/>
6416 </member>
6417 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket">
6418 <exclude/>
6419 </member>
6420 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket.AgentDataBlock">
6421 <exclude/>
6422 </member>
6423 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket.GrantDataBlock">
6424 <exclude/>
6425 </member>
6426 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket">
6427 <exclude/>
6428 </member>
6429 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.AgentDataBlock">
6430 <exclude/>
6431 </member>
6432 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.MethodDataBlock">
6433 <exclude/>
6434 </member>
6435 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.ParamListBlock">
6436 <exclude/>
6437 </member>
6438 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket">
6439 <exclude/>
6440 </member>
6441 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.AgentDataBlock">
6442 <exclude/>
6443 </member>
6444 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.MethodDataBlock">
6445 <exclude/>
6446 </member>
6447 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.ParamListBlock">
6448 <exclude/>
6449 </member>
6450 <member name="T:OpenMetaverse.Packets.GenericMessagePacket">
6451 <exclude/>
6452 </member>
6453 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.AgentDataBlock">
6454 <exclude/>
6455 </member>
6456 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.MethodDataBlock">
6457 <exclude/>
6458 </member>
6459 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.ParamListBlock">
6460 <exclude/>
6461 </member>
6462 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket">
6463 <exclude/>
6464 </member>
6465 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket.AgentDataBlock">
6466 <exclude/>
6467 </member>
6468 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket.MuteDataBlock">
6469 <exclude/>
6470 </member>
6471 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket">
6472 <exclude/>
6473 </member>
6474 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket.AgentDataBlock">
6475 <exclude/>
6476 </member>
6477 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket.MuteDataBlock">
6478 <exclude/>
6479 </member>
6480 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket">
6481 <exclude/>
6482 </member>
6483 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket.AgentDataBlock">
6484 <exclude/>
6485 </member>
6486 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket.MuteDataBlock">
6487 <exclude/>
6488 </member>
6489 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket">
6490 <exclude/>
6491 </member>
6492 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.AgentDataBlock">
6493 <exclude/>
6494 </member>
6495 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.NotecardDataBlock">
6496 <exclude/>
6497 </member>
6498 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.InventoryDataBlock">
6499 <exclude/>
6500 </member>
6501 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket">
6502 <exclude/>
6503 </member>
6504 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket.AgentDataBlock">
6505 <exclude/>
6506 </member>
6507 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket.InventoryDataBlock">
6508 <exclude/>
6509 </member>
6510 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket">
6511 <exclude/>
6512 </member>
6513 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket.AgentDataBlock">
6514 <exclude/>
6515 </member>
6516 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket.InventoryDataBlock">
6517 <exclude/>
6518 </member>
6519 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket">
6520 <exclude/>
6521 </member>
6522 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket.AgentDataBlock">
6523 <exclude/>
6524 </member>
6525 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket.InventoryDataBlock">
6526 <exclude/>
6527 </member>
6528 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket">
6529 <exclude/>
6530 </member>
6531 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket.AgentDataBlock">
6532 <exclude/>
6533 </member>
6534 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket.InventoryDataBlock">
6535 <exclude/>
6536 </member>
6537 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket">
6538 <exclude/>
6539 </member>
6540 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket.AgentDataBlock">
6541 <exclude/>
6542 </member>
6543 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket.InventoryDataBlock">
6544 <exclude/>
6545 </member>
6546 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket">
6547 <exclude/>
6548 </member>
6549 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket.AgentDataBlock">
6550 <exclude/>
6551 </member>
6552 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket.InventoryDataBlock">
6553 <exclude/>
6554 </member>
6555 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket">
6556 <exclude/>
6557 </member>
6558 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket.AgentDataBlock">
6559 <exclude/>
6560 </member>
6561 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket.InventoryDataBlock">
6562 <exclude/>
6563 </member>
6564 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket">
6565 <exclude/>
6566 </member>
6567 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket.AgentDataBlock">
6568 <exclude/>
6569 </member>
6570 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket.FolderDataBlock">
6571 <exclude/>
6572 </member>
6573 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket">
6574 <exclude/>
6575 </member>
6576 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket.AgentDataBlock">
6577 <exclude/>
6578 </member>
6579 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket.FolderDataBlock">
6580 <exclude/>
6581 </member>
6582 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket">
6583 <exclude/>
6584 </member>
6585 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket.AgentDataBlock">
6586 <exclude/>
6587 </member>
6588 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket.InventoryDataBlock">
6589 <exclude/>
6590 </member>
6591 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket">
6592 <exclude/>
6593 </member>
6594 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket.AgentDataBlock">
6595 <exclude/>
6596 </member>
6597 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket.FolderDataBlock">
6598 <exclude/>
6599 </member>
6600 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket">
6601 <exclude/>
6602 </member>
6603 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket.AgentDataBlock">
6604 <exclude/>
6605 </member>
6606 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket.InventoryDataBlock">
6607 <exclude/>
6608 </member>
6609 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket">
6610 <exclude/>
6611 </member>
6612 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.AgentDataBlock">
6613 <exclude/>
6614 </member>
6615 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.FolderDataBlock">
6616 <exclude/>
6617 </member>
6618 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.ItemDataBlock">
6619 <exclude/>
6620 </member>
6621 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket">
6622 <exclude/>
6623 </member>
6624 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket.AgentDataBlock">
6625 <exclude/>
6626 </member>
6627 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket.InventoryDataBlock">
6628 <exclude/>
6629 </member>
6630 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket">
6631 <exclude/>
6632 </member>
6633 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket.AgentDataBlock">
6634 <exclude/>
6635 </member>
6636 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket.InventoryDataBlock">
6637 <exclude/>
6638 </member>
6639 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket">
6640 <exclude/>
6641 </member>
6642 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.AgentDataBlock">
6643 <exclude/>
6644 </member>
6645 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.FolderDataBlock">
6646 <exclude/>
6647 </member>
6648 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.ItemDataBlock">
6649 <exclude/>
6650 </member>
6651 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket">
6652 <exclude/>
6653 </member>
6654 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.AgentDataBlock">
6655 <exclude/>
6656 </member>
6657 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.FolderDataBlock">
6658 <exclude/>
6659 </member>
6660 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.ItemDataBlock">
6661 <exclude/>
6662 </member>
6663 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket">
6664 <exclude/>
6665 </member>
6666 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket.AgentDataBlock">
6667 <exclude/>
6668 </member>
6669 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket.InventoryDataBlock">
6670 <exclude/>
6671 </member>
6672 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket">
6673 <exclude/>
6674 </member>
6675 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.AgentDataBlock">
6676 <exclude/>
6677 </member>
6678 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.UpdateDataBlock">
6679 <exclude/>
6680 </member>
6681 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.InventoryDataBlock">
6682 <exclude/>
6683 </member>
6684 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket">
6685 <exclude/>
6686 </member>
6687 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket.AgentDataBlock">
6688 <exclude/>
6689 </member>
6690 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket.InventoryDataBlock">
6691 <exclude/>
6692 </member>
6693 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket">
6694 <exclude/>
6695 </member>
6696 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket.AgentDataBlock">
6697 <exclude/>
6698 </member>
6699 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket.InventoryDataBlock">
6700 <exclude/>
6701 </member>
6702 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket">
6703 <exclude/>
6704 </member>
6705 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket.AgentDataBlock">
6706 <exclude/>
6707 </member>
6708 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket.InventoryDataBlock">
6709 <exclude/>
6710 </member>
6711 <member name="T:OpenMetaverse.Packets.ReplyTaskInventoryPacket">
6712 <exclude/>
6713 </member>
6714 <member name="T:OpenMetaverse.Packets.ReplyTaskInventoryPacket.InventoryDataBlock">
6715 <exclude/>
6716 </member>
6717 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket">
6718 <exclude/>
6719 </member>
6720 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.AgentDataBlock">
6721 <exclude/>
6722 </member>
6723 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.AgentBlockBlock">
6724 <exclude/>
6725 </member>
6726 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.ObjectDataBlock">
6727 <exclude/>
6728 </member>
6729 <member name="T:OpenMetaverse.Packets.DeRezAckPacket">
6730 <exclude/>
6731 </member>
6732 <member name="T:OpenMetaverse.Packets.DeRezAckPacket.TransactionDataBlock">
6733 <exclude/>
6734 </member>
6735 <member name="T:OpenMetaverse.Packets.RezObjectPacket">
6736 <exclude/>
6737 </member>
6738 <member name="T:OpenMetaverse.Packets.RezObjectPacket.AgentDataBlock">
6739 <exclude/>
6740 </member>
6741 <member name="T:OpenMetaverse.Packets.RezObjectPacket.RezDataBlock">
6742 <exclude/>
6743 </member>
6744 <member name="T:OpenMetaverse.Packets.RezObjectPacket.InventoryDataBlock">
6745 <exclude/>
6746 </member>
6747 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket">
6748 <exclude/>
6749 </member>
6750 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.AgentDataBlock">
6751 <exclude/>
6752 </member>
6753 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.RezDataBlock">
6754 <exclude/>
6755 </member>
6756 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.NotecardDataBlock">
6757 <exclude/>
6758 </member>
6759 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.InventoryDataBlock">
6760 <exclude/>
6761 </member>
6762 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket">
6763 <exclude/>
6764 </member>
6765 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.AgentDataBlock">
6766 <exclude/>
6767 </member>
6768 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.TransactionBlockBlock">
6769 <exclude/>
6770 </member>
6771 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.FolderDataBlock">
6772 <exclude/>
6773 </member>
6774 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket">
6775 <exclude/>
6776 </member>
6777 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket.AgentDataBlock">
6778 <exclude/>
6779 </member>
6780 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket.TransactionBlockBlock">
6781 <exclude/>
6782 </member>
6783 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket">
6784 <exclude/>
6785 </member>
6786 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket.AgentDataBlock">
6787 <exclude/>
6788 </member>
6789 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket.ExBlockBlock">
6790 <exclude/>
6791 </member>
6792 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket">
6793 <exclude/>
6794 </member>
6795 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket.AgentDataBlock">
6796 <exclude/>
6797 </member>
6798 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket.AgentBlockBlock">
6799 <exclude/>
6800 </member>
6801 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket">
6802 <exclude/>
6803 </member>
6804 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.AgentDataBlock">
6805 <exclude/>
6806 </member>
6807 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.TransactionBlockBlock">
6808 <exclude/>
6809 </member>
6810 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.FolderDataBlock">
6811 <exclude/>
6812 </member>
6813 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket">
6814 <exclude/>
6815 </member>
6816 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket.AgentDataBlock">
6817 <exclude/>
6818 </member>
6819 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket.TransactionBlockBlock">
6820 <exclude/>
6821 </member>
6822 <member name="T:OpenMetaverse.Packets.RezScriptPacket">
6823 <exclude/>
6824 </member>
6825 <member name="T:OpenMetaverse.Packets.RezScriptPacket.AgentDataBlock">
6826 <exclude/>
6827 </member>
6828 <member name="T:OpenMetaverse.Packets.RezScriptPacket.UpdateBlockBlock">
6829 <exclude/>
6830 </member>
6831 <member name="T:OpenMetaverse.Packets.RezScriptPacket.InventoryBlockBlock">
6832 <exclude/>
6833 </member>
6834 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket">
6835 <exclude/>
6836 </member>
6837 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket.AgentDataBlock">
6838 <exclude/>
6839 </member>
6840 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket.InventoryBlockBlock">
6841 <exclude/>
6842 </member>
6843 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket">
6844 <exclude/>
6845 </member>
6846 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.AgentDataBlock">
6847 <exclude/>
6848 </member>
6849 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.EventDataBlock">
6850 <exclude/>
6851 </member>
6852 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.InventoryBlockBlock">
6853 <exclude/>
6854 </member>
6855 <member name="T:OpenMetaverse.Packets.RegionHandleRequestPacket">
6856 <exclude/>
6857 </member>
6858 <member name="T:OpenMetaverse.Packets.RegionHandleRequestPacket.RequestBlockBlock">
6859 <exclude/>
6860 </member>
6861 <member name="T:OpenMetaverse.Packets.RegionIDAndHandleReplyPacket">
6862 <exclude/>
6863 </member>
6864 <member name="T:OpenMetaverse.Packets.RegionIDAndHandleReplyPacket.ReplyBlockBlock">
6865 <exclude/>
6866 </member>
6867 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket">
6868 <exclude/>
6869 </member>
6870 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket.AgentDataBlock">
6871 <exclude/>
6872 </member>
6873 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket.MoneyDataBlock">
6874 <exclude/>
6875 </member>
6876 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket">
6877 <exclude/>
6878 </member>
6879 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket.AgentDataBlock">
6880 <exclude/>
6881 </member>
6882 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket.MoneyDataBlock">
6883 <exclude/>
6884 </member>
6885 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket">
6886 <exclude/>
6887 </member>
6888 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket.MoneyDataBlock">
6889 <exclude/>
6890 </member>
6891 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket.TransactionInfoBlock">
6892 <exclude/>
6893 </member>
6894 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket">
6895 <exclude/>
6896 </member>
6897 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.TargetBlockBlock">
6898 <exclude/>
6899 </member>
6900 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.MoneyDataBlock">
6901 <exclude/>
6902 </member>
6903 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.TransactionInfoBlock">
6904 <exclude/>
6905 </member>
6906 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket">
6907 <exclude/>
6908 </member>
6909 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket.AgentDataBlock">
6910 <exclude/>
6911 </member>
6912 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket.DataBlock">
6913 <exclude/>
6914 </member>
6915 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket">
6916 <exclude/>
6917 </member>
6918 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket.AgentDataBlock">
6919 <exclude/>
6920 </member>
6921 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket.DataBlock">
6922 <exclude/>
6923 </member>
6924 <member name="T:OpenMetaverse.Packets.MuteListUpdatePacket">
6925 <exclude/>
6926 </member>
6927 <member name="T:OpenMetaverse.Packets.MuteListUpdatePacket.MuteDataBlock">
6928 <exclude/>
6929 </member>
6930 <member name="T:OpenMetaverse.Packets.UseCachedMuteListPacket">
6931 <exclude/>
6932 </member>
6933 <member name="T:OpenMetaverse.Packets.UseCachedMuteListPacket.AgentDataBlock">
6934 <exclude/>
6935 </member>
6936 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket">
6937 <exclude/>
6938 </member>
6939 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket.AgentDataBlock">
6940 <exclude/>
6941 </member>
6942 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket.RightsBlock">
6943 <exclude/>
6944 </member>
6945 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket">
6946 <exclude/>
6947 </member>
6948 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket.AgentDataBlock">
6949 <exclude/>
6950 </member>
6951 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket.RightsBlock">
6952 <exclude/>
6953 </member>
6954 <member name="T:OpenMetaverse.Packets.OnlineNotificationPacket">
6955 <exclude/>
6956 </member>
6957 <member name="T:OpenMetaverse.Packets.OnlineNotificationPacket.AgentBlockBlock">
6958 <exclude/>
6959 </member>
6960 <member name="T:OpenMetaverse.Packets.OfflineNotificationPacket">
6961 <exclude/>
6962 </member>
6963 <member name="T:OpenMetaverse.Packets.OfflineNotificationPacket.AgentBlockBlock">
6964 <exclude/>
6965 </member>
6966 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket">
6967 <exclude/>
6968 </member>
6969 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket.AgentDataBlock">
6970 <exclude/>
6971 </member>
6972 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket.StartLocationDataBlock">
6973 <exclude/>
6974 </member>
6975 <member name="T:OpenMetaverse.Packets.AssetUploadRequestPacket">
6976 <exclude/>
6977 </member>
6978 <member name="T:OpenMetaverse.Packets.AssetUploadRequestPacket.AssetBlockBlock">
6979 <exclude/>
6980 </member>
6981 <member name="T:OpenMetaverse.Packets.AssetUploadCompletePacket">
6982 <exclude/>
6983 </member>
6984 <member name="T:OpenMetaverse.Packets.AssetUploadCompletePacket.AssetBlockBlock">
6985 <exclude/>
6986 </member>
6987 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket">
6988 <exclude/>
6989 </member>
6990 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket.AgentDataBlock">
6991 <exclude/>
6992 </member>
6993 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket.GroupDataBlock">
6994 <exclude/>
6995 </member>
6996 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket">
6997 <exclude/>
6998 </member>
6999 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket.AgentDataBlock">
7000 <exclude/>
7001 </member>
7002 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket.ReplyDataBlock">
7003 <exclude/>
7004 </member>
7005 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket">
7006 <exclude/>
7007 </member>
7008 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket.AgentDataBlock">
7009 <exclude/>
7010 </member>
7011 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket.GroupDataBlock">
7012 <exclude/>
7013 </member>
7014 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket">
7015 <exclude/>
7016 </member>
7017 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket.AgentDataBlock">
7018 <exclude/>
7019 </member>
7020 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket.RoleChangeBlock">
7021 <exclude/>
7022 </member>
7023 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket">
7024 <exclude/>
7025 </member>
7026 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket.AgentDataBlock">
7027 <exclude/>
7028 </member>
7029 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket.GroupDataBlock">
7030 <exclude/>
7031 </member>
7032 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket">
7033 <exclude/>
7034 </member>
7035 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket.AgentDataBlock">
7036 <exclude/>
7037 </member>
7038 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket.GroupDataBlock">
7039 <exclude/>
7040 </member>
7041 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket">
7042 <exclude/>
7043 </member>
7044 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.AgentDataBlock">
7045 <exclude/>
7046 </member>
7047 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.GroupDataBlock">
7048 <exclude/>
7049 </member>
7050 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.EjectDataBlock">
7051 <exclude/>
7052 </member>
7053 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket">
7054 <exclude/>
7055 </member>
7056 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.AgentDataBlock">
7057 <exclude/>
7058 </member>
7059 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.GroupDataBlock">
7060 <exclude/>
7061 </member>
7062 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.EjectDataBlock">
7063 <exclude/>
7064 </member>
7065 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket">
7066 <exclude/>
7067 </member>
7068 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket.AgentDataBlock">
7069 <exclude/>
7070 </member>
7071 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket.GroupDataBlock">
7072 <exclude/>
7073 </member>
7074 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket">
7075 <exclude/>
7076 </member>
7077 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket.AgentDataBlock">
7078 <exclude/>
7079 </member>
7080 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket.GroupDataBlock">
7081 <exclude/>
7082 </member>
7083 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket">
7084 <exclude/>
7085 </member>
7086 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.AgentDataBlock">
7087 <exclude/>
7088 </member>
7089 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.GroupDataBlock">
7090 <exclude/>
7091 </member>
7092 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.InviteDataBlock">
7093 <exclude/>
7094 </member>
7095 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket">
7096 <exclude/>
7097 </member>
7098 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket.AgentDataBlock">
7099 <exclude/>
7100 </member>
7101 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket.GroupDataBlock">
7102 <exclude/>
7103 </member>
7104 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket">
7105 <exclude/>
7106 </member>
7107 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket.AgentDataBlock">
7108 <exclude/>
7109 </member>
7110 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket.GroupDataBlock">
7111 <exclude/>
7112 </member>
7113 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket">
7114 <exclude/>
7115 </member>
7116 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket.AgentDataBlock">
7117 <exclude/>
7118 </member>
7119 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket.MoneyDataBlock">
7120 <exclude/>
7121 </member>
7122 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket">
7123 <exclude/>
7124 </member>
7125 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket.AgentDataBlock">
7126 <exclude/>
7127 </member>
7128 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket.MoneyDataBlock">
7129 <exclude/>
7130 </member>
7131 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket">
7132 <exclude/>
7133 </member>
7134 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket.AgentDataBlock">
7135 <exclude/>
7136 </member>
7137 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket.MoneyDataBlock">
7138 <exclude/>
7139 </member>
7140 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket">
7141 <exclude/>
7142 </member>
7143 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.AgentDataBlock">
7144 <exclude/>
7145 </member>
7146 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.MoneyDataBlock">
7147 <exclude/>
7148 </member>
7149 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.HistoryDataBlock">
7150 <exclude/>
7151 </member>
7152 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket">
7153 <exclude/>
7154 </member>
7155 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket.AgentDataBlock">
7156 <exclude/>
7157 </member>
7158 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket.MoneyDataBlock">
7159 <exclude/>
7160 </member>
7161 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket">
7162 <exclude/>
7163 </member>
7164 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.AgentDataBlock">
7165 <exclude/>
7166 </member>
7167 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.MoneyDataBlock">
7168 <exclude/>
7169 </member>
7170 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.HistoryDataBlock">
7171 <exclude/>
7172 </member>
7173 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket">
7174 <exclude/>
7175 </member>
7176 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.AgentDataBlock">
7177 <exclude/>
7178 </member>
7179 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.GroupDataBlock">
7180 <exclude/>
7181 </member>
7182 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.TransactionDataBlock">
7183 <exclude/>
7184 </member>
7185 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket">
7186 <exclude/>
7187 </member>
7188 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.AgentDataBlock">
7189 <exclude/>
7190 </member>
7191 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.TransactionDataBlock">
7192 <exclude/>
7193 </member>
7194 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.ProposalDataBlock">
7195 <exclude/>
7196 </member>
7197 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket">
7198 <exclude/>
7199 </member>
7200 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.AgentDataBlock">
7201 <exclude/>
7202 </member>
7203 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.GroupDataBlock">
7204 <exclude/>
7205 </member>
7206 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.TransactionDataBlock">
7207 <exclude/>
7208 </member>
7209 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket">
7210 <exclude/>
7211 </member>
7212 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.AgentDataBlock">
7213 <exclude/>
7214 </member>
7215 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.TransactionDataBlock">
7216 <exclude/>
7217 </member>
7218 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.HistoryItemDataBlock">
7219 <exclude/>
7220 </member>
7221 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.VoteItemBlock">
7222 <exclude/>
7223 </member>
7224 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket">
7225 <exclude/>
7226 </member>
7227 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket.AgentDataBlock">
7228 <exclude/>
7229 </member>
7230 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket.ProposalDataBlock">
7231 <exclude/>
7232 </member>
7233 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket">
7234 <exclude/>
7235 </member>
7236 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket.AgentDataBlock">
7237 <exclude/>
7238 </member>
7239 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket.ProposalDataBlock">
7240 <exclude/>
7241 </member>
7242 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket">
7243 <exclude/>
7244 </member>
7245 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket.AgentDataBlock">
7246 <exclude/>
7247 </member>
7248 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket.GroupDataBlock">
7249 <exclude/>
7250 </member>
7251 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket">
7252 <exclude/>
7253 </member>
7254 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.AgentDataBlock">
7255 <exclude/>
7256 </member>
7257 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.GroupDataBlock">
7258 <exclude/>
7259 </member>
7260 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.MemberDataBlock">
7261 <exclude/>
7262 </member>
7263 <member name="T:OpenMetaverse.Packets.ActivateGroupPacket">
7264 <exclude/>
7265 </member>
7266 <member name="T:OpenMetaverse.Packets.ActivateGroupPacket.AgentDataBlock">
7267 <exclude/>
7268 </member>
7269 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket">
7270 <exclude/>
7271 </member>
7272 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket.AgentDataBlock">
7273 <exclude/>
7274 </member>
7275 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket.DataBlock">
7276 <exclude/>
7277 </member>
7278 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket">
7279 <exclude/>
7280 </member>
7281 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.AgentDataBlock">
7282 <exclude/>
7283 </member>
7284 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.DataBlock">
7285 <exclude/>
7286 </member>
7287 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.NewDataBlock">
7288 <exclude/>
7289 </member>
7290 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket">
7291 <exclude/>
7292 </member>
7293 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket.AgentDataBlock">
7294 <exclude/>
7295 </member>
7296 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket.GroupDataBlock">
7297 <exclude/>
7298 </member>
7299 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket">
7300 <exclude/>
7301 </member>
7302 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.AgentDataBlock">
7303 <exclude/>
7304 </member>
7305 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.GroupDataBlock">
7306 <exclude/>
7307 </member>
7308 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.RoleDataBlock">
7309 <exclude/>
7310 </member>
7311 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket">
7312 <exclude/>
7313 </member>
7314 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket.AgentDataBlock">
7315 <exclude/>
7316 </member>
7317 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket.GroupDataBlock">
7318 <exclude/>
7319 </member>
7320 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket">
7321 <exclude/>
7322 </member>
7323 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket.AgentDataBlock">
7324 <exclude/>
7325 </member>
7326 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket.MemberDataBlock">
7327 <exclude/>
7328 </member>
7329 <member name="T:OpenMetaverse.Packets.GroupTitlesRequestPacket">
7330 <exclude/>
7331 </member>
7332 <member name="T:OpenMetaverse.Packets.GroupTitlesRequestPacket.AgentDataBlock">
7333 <exclude/>
7334 </member>
7335 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket">
7336 <exclude/>
7337 </member>
7338 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket.AgentDataBlock">
7339 <exclude/>
7340 </member>
7341 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket.GroupDataBlock">
7342 <exclude/>
7343 </member>
7344 <member name="T:OpenMetaverse.Packets.GroupTitleUpdatePacket">
7345 <exclude/>
7346 </member>
7347 <member name="T:OpenMetaverse.Packets.GroupTitleUpdatePacket.AgentDataBlock">
7348 <exclude/>
7349 </member>
7350 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket">
7351 <exclude/>
7352 </member>
7353 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket.AgentDataBlock">
7354 <exclude/>
7355 </member>
7356 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket.RoleDataBlock">
7357 <exclude/>
7358 </member>
7359 <member name="T:OpenMetaverse.Packets.LiveHelpGroupRequestPacket">
7360 <exclude/>
7361 </member>
7362 <member name="T:OpenMetaverse.Packets.LiveHelpGroupRequestPacket.RequestDataBlock">
7363 <exclude/>
7364 </member>
7365 <member name="T:OpenMetaverse.Packets.LiveHelpGroupReplyPacket">
7366 <exclude/>
7367 </member>
7368 <member name="T:OpenMetaverse.Packets.LiveHelpGroupReplyPacket.ReplyDataBlock">
7369 <exclude/>
7370 </member>
7371 <member name="T:OpenMetaverse.Packets.AgentWearablesRequestPacket">
7372 <exclude/>
7373 </member>
7374 <member name="T:OpenMetaverse.Packets.AgentWearablesRequestPacket.AgentDataBlock">
7375 <exclude/>
7376 </member>
7377 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket">
7378 <exclude/>
7379 </member>
7380 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket.AgentDataBlock">
7381 <exclude/>
7382 </member>
7383 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket.WearableDataBlock">
7384 <exclude/>
7385 </member>
7386 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket">
7387 <exclude/>
7388 </member>
7389 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket.AgentDataBlock">
7390 <exclude/>
7391 </member>
7392 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket.WearableDataBlock">
7393 <exclude/>
7394 </member>
7395 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket">
7396 <exclude/>
7397 </member>
7398 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket.AgentDataBlock">
7399 <exclude/>
7400 </member>
7401 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket.WearableDataBlock">
7402 <exclude/>
7403 </member>
7404 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket">
7405 <exclude/>
7406 </member>
7407 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket.AgentDataBlock">
7408 <exclude/>
7409 </member>
7410 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket.WearableDataBlock">
7411 <exclude/>
7412 </member>
7413 <member name="T:OpenMetaverse.Packets.AgentDataUpdateRequestPacket">
7414 <exclude/>
7415 </member>
7416 <member name="T:OpenMetaverse.Packets.AgentDataUpdateRequestPacket.AgentDataBlock">
7417 <exclude/>
7418 </member>
7419 <member name="T:OpenMetaverse.Packets.AgentDataUpdatePacket">
7420 <exclude/>
7421 </member>
7422 <member name="T:OpenMetaverse.Packets.AgentDataUpdatePacket.AgentDataBlock">
7423 <exclude/>
7424 </member>
7425 <member name="T:OpenMetaverse.Packets.GroupDataUpdatePacket">
7426 <exclude/>
7427 </member>
7428 <member name="T:OpenMetaverse.Packets.GroupDataUpdatePacket.AgentGroupDataBlock">
7429 <exclude/>
7430 </member>
7431 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket">
7432 <exclude/>
7433 </member>
7434 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket.AgentDataBlock">
7435 <exclude/>
7436 </member>
7437 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket.GroupDataBlock">
7438 <exclude/>
7439 </member>
7440 <member name="T:OpenMetaverse.Packets.AgentDropGroupPacket">
7441 <exclude/>
7442 </member>
7443 <member name="T:OpenMetaverse.Packets.AgentDropGroupPacket.AgentDataBlock">
7444 <exclude/>
7445 </member>
7446 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket">
7447 <exclude/>
7448 </member>
7449 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket.AgentDataBlock">
7450 <exclude/>
7451 </member>
7452 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket.ObjectDataBlock">
7453 <exclude/>
7454 </member>
7455 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket">
7456 <exclude/>
7457 </member>
7458 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.AgentDataBlock">
7459 <exclude/>
7460 </member>
7461 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.HeaderDataBlock">
7462 <exclude/>
7463 </member>
7464 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.ObjectDataBlock">
7465 <exclude/>
7466 </member>
7467 <member name="T:OpenMetaverse.Packets.DetachAttachmentIntoInvPacket">
7468 <exclude/>
7469 </member>
7470 <member name="T:OpenMetaverse.Packets.DetachAttachmentIntoInvPacket.ObjectDataBlock">
7471 <exclude/>
7472 </member>
7473 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket">
7474 <exclude/>
7475 </member>
7476 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.AgentDataBlock">
7477 <exclude/>
7478 </member>
7479 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.HeaderDataBlock">
7480 <exclude/>
7481 </member>
7482 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.ObjectDataBlock">
7483 <exclude/>
7484 </member>
7485 <member name="T:OpenMetaverse.Packets.UserInfoRequestPacket">
7486 <exclude/>
7487 </member>
7488 <member name="T:OpenMetaverse.Packets.UserInfoRequestPacket.AgentDataBlock">
7489 <exclude/>
7490 </member>
7491 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket">
7492 <exclude/>
7493 </member>
7494 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket.AgentDataBlock">
7495 <exclude/>
7496 </member>
7497 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket.UserDataBlock">
7498 <exclude/>
7499 </member>
7500 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket">
7501 <exclude/>
7502 </member>
7503 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket.AgentDataBlock">
7504 <exclude/>
7505 </member>
7506 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket.UserDataBlock">
7507 <exclude/>
7508 </member>
7509 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket">
7510 <exclude/>
7511 </member>
7512 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket.AgentDataBlock">
7513 <exclude/>
7514 </member>
7515 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket.FileDataBlock">
7516 <exclude/>
7517 </member>
7518 <member name="T:OpenMetaverse.Packets.MapLayerRequestPacket">
7519 <exclude/>
7520 </member>
7521 <member name="T:OpenMetaverse.Packets.MapLayerRequestPacket.AgentDataBlock">
7522 <exclude/>
7523 </member>
7524 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket">
7525 <exclude/>
7526 </member>
7527 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket.AgentDataBlock">
7528 <exclude/>
7529 </member>
7530 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket.LayerDataBlock">
7531 <exclude/>
7532 </member>
7533 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket">
7534 <exclude/>
7535 </member>
7536 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket.AgentDataBlock">
7537 <exclude/>
7538 </member>
7539 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket.PositionDataBlock">
7540 <exclude/>
7541 </member>
7542 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket">
7543 <exclude/>
7544 </member>
7545 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket.AgentDataBlock">
7546 <exclude/>
7547 </member>
7548 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket.NameDataBlock">
7549 <exclude/>
7550 </member>
7551 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket">
7552 <exclude/>
7553 </member>
7554 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket.AgentDataBlock">
7555 <exclude/>
7556 </member>
7557 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket.DataBlock">
7558 <exclude/>
7559 </member>
7560 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket">
7561 <exclude/>
7562 </member>
7563 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket.AgentDataBlock">
7564 <exclude/>
7565 </member>
7566 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket.RequestDataBlock">
7567 <exclude/>
7568 </member>
7569 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket">
7570 <exclude/>
7571 </member>
7572 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.AgentDataBlock">
7573 <exclude/>
7574 </member>
7575 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.RequestDataBlock">
7576 <exclude/>
7577 </member>
7578 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.DataBlock">
7579 <exclude/>
7580 </member>
7581 <member name="T:OpenMetaverse.Packets.SendPostcardPacket">
7582 <exclude/>
7583 </member>
7584 <member name="T:OpenMetaverse.Packets.SendPostcardPacket.AgentDataBlock">
7585 <exclude/>
7586 </member>
7587 <member name="T:OpenMetaverse.Packets.ParcelMediaCommandMessagePacket">
7588 <exclude/>
7589 </member>
7590 <member name="T:OpenMetaverse.Packets.ParcelMediaCommandMessagePacket.CommandBlockBlock">
7591 <exclude/>
7592 </member>
7593 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket">
7594 <exclude/>
7595 </member>
7596 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket.DataBlockBlock">
7597 <exclude/>
7598 </member>
7599 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket.DataBlockExtendedBlock">
7600 <exclude/>
7601 </member>
7602 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket">
7603 <exclude/>
7604 </member>
7605 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket.AgentDataBlock">
7606 <exclude/>
7607 </member>
7608 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket.RequestDataBlock">
7609 <exclude/>
7610 </member>
7611 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket">
7612 <exclude/>
7613 </member>
7614 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket.RequestDataBlock">
7615 <exclude/>
7616 </member>
7617 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket.ReportDataBlock">
7618 <exclude/>
7619 </member>
7620 <member name="T:OpenMetaverse.Packets.ErrorPacket">
7621 <exclude/>
7622 </member>
7623 <member name="T:OpenMetaverse.Packets.ErrorPacket.AgentDataBlock">
7624 <exclude/>
7625 </member>
7626 <member name="T:OpenMetaverse.Packets.ErrorPacket.DataBlock">
7627 <exclude/>
7628 </member>
7629 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket">
7630 <exclude/>
7631 </member>
7632 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket.AgentDataBlock">
7633 <exclude/>
7634 </member>
7635 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket.ObjectDataBlock">
7636 <exclude/>
7637 </member>
7638 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket">
7639 <exclude/>
7640 </member>
7641 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket.AgentDataBlock">
7642 <exclude/>
7643 </member>
7644 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket.InventoryDataBlock">
7645 <exclude/>
7646 </member>
7647 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket">
7648 <exclude/>
7649 </member>
7650 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket.AgentDataBlock">
7651 <exclude/>
7652 </member>
7653 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket.InventoryBlockBlock">
7654 <exclude/>
7655 </member>
7656 <member name="T:OpenMetaverse.Packets.PacketAckPacket">
7657 <exclude/>
7658 </member>
7659 <member name="T:OpenMetaverse.Packets.PacketAckPacket.PacketsBlock">
7660 <exclude/>
7661 </member>
7662 <member name="T:OpenMetaverse.Packets.OpenCircuitPacket">
7663 <exclude/>
7664 </member>
7665 <member name="T:OpenMetaverse.Packets.OpenCircuitPacket.CircuitInfoBlock">
7666 <exclude/>
7667 </member>
7668 <member name="T:OpenMetaverse.Packets.CloseCircuitPacket">
7669 <exclude/>
7670 </member>
7671 <member name="T:OpenMetaverse.Packets.ObjectAddPacket">
7672 <exclude/>
7673 </member>
7674 <member name="T:OpenMetaverse.Packets.ObjectAddPacket.AgentDataBlock">
7675 <exclude/>
7676 </member>
7677 <member name="T:OpenMetaverse.Packets.ObjectAddPacket.ObjectDataBlock">
7678 <exclude/>
7679 </member>
7680 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket">
7681 <exclude/>
7682 </member>
7683 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket.AgentDataBlock">
7684 <exclude/>
7685 </member>
7686 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket.ObjectDataBlock">
7687 <exclude/>
7688 </member>
7689 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket">
7690 <exclude/>
7691 </member>
7692 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket.AgentDataBlock">
7693 <exclude/>
7694 </member>
7695 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket.ObjectDataBlock">
7696 <exclude/>
7697 </member>
7698 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket">
7699 <exclude/>
7700 </member>
7701 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket.AgentDataBlock">
7702 <exclude/>
7703 </member>
7704 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket.ObjectDataBlock">
7705 <exclude/>
7706 </member>
7707 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket">
7708 <exclude/>
7709 </member>
7710 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket.AgentDataBlock">
7711 <exclude/>
7712 </member>
7713 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket.ObjectDataBlock">
7714 <exclude/>
7715 </member>
7716 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket">
7717 <exclude/>
7718 </member>
7719 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.LocationBlock">
7720 <exclude/>
7721 </member>
7722 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.IndexBlock">
7723 <exclude/>
7724 </member>
7725 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.AgentDataBlock">
7726 <exclude/>
7727 </member>
7728 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket">
7729 <exclude/>
7730 </member>
7731 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.AgentDataBlock">
7732 <exclude/>
7733 </member>
7734 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.RegionDataBlock">
7735 <exclude/>
7736 </member>
7737 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.InfoBlock">
7738 <exclude/>
7739 </member>
7740 <member name="T:OpenMetaverse.Packets.ConfirmEnableSimulatorPacket">
7741 <exclude/>
7742 </member>
7743 <member name="T:OpenMetaverse.Packets.ConfirmEnableSimulatorPacket.AgentDataBlock">
7744 <exclude/>
7745 </member>
7746 <member name="T:OpenMetaverse.Packets.ObjectPropertiesPacket">
7747 <exclude/>
7748 </member>
7749 <member name="T:OpenMetaverse.Packets.ObjectPropertiesPacket.ObjectDataBlock">
7750 <exclude/>
7751 </member>
7752 <member name="T:OpenMetaverse.Packets.ObjectPropertiesFamilyPacket">
7753 <exclude/>
7754 </member>
7755 <member name="T:OpenMetaverse.Packets.ObjectPropertiesFamilyPacket.ObjectDataBlock">
7756 <exclude/>
7757 </member>
7758 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket">
7759 <exclude/>
7760 </member>
7761 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket.AgentDataBlock">
7762 <exclude/>
7763 </member>
7764 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket.ParcelDataBlock">
7765 <exclude/>
7766 </member>
7767 <member name="T:OpenMetaverse.Packets.AttachedSoundPacket">
7768 <exclude/>
7769 </member>
7770 <member name="T:OpenMetaverse.Packets.AttachedSoundPacket.DataBlockBlock">
7771 <exclude/>
7772 </member>
7773 <member name="T:OpenMetaverse.Packets.AttachedSoundGainChangePacket">
7774 <exclude/>
7775 </member>
7776 <member name="T:OpenMetaverse.Packets.AttachedSoundGainChangePacket.DataBlockBlock">
7777 <exclude/>
7778 </member>
7779 <member name="T:OpenMetaverse.Packets.PreloadSoundPacket">
7780 <exclude/>
7781 </member>
7782 <member name="T:OpenMetaverse.Packets.PreloadSoundPacket.DataBlockBlock">
7783 <exclude/>
7784 </member>
7785 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket">
7786 <exclude/>
7787 </member>
7788 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket.AgentDataBlock">
7789 <exclude/>
7790 </member>
7791 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket.EffectBlock">
7792 <exclude/>
7793 </member>
7794 <member name="T:OpenMetaverse.Packets.StartPingCheckPacket">
7795 <exclude/>
7796 </member>
7797 <member name="T:OpenMetaverse.Packets.StartPingCheckPacket.PingIDBlock">
7798 <exclude/>
7799 </member>
7800 <member name="T:OpenMetaverse.Packets.CompletePingCheckPacket">
7801 <exclude/>
7802 </member>
7803 <member name="T:OpenMetaverse.Packets.CompletePingCheckPacket.PingIDBlock">
7804 <exclude/>
7805 </member>
7806 <member name="T:OpenMetaverse.Packets.AgentUpdatePacket">
7807 <exclude/>
7808 </member>
7809 <member name="T:OpenMetaverse.Packets.AgentUpdatePacket.AgentDataBlock">
7810 <exclude/>
7811 </member>
7812 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket">
7813 <exclude/>
7814 </member>
7815 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.AgentDataBlock">
7816 <exclude/>
7817 </member>
7818 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.AnimationListBlock">
7819 <exclude/>
7820 </member>
7821 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.PhysicalAvatarEventListBlock">
7822 <exclude/>
7823 </member>
7824 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket">
7825 <exclude/>
7826 </member>
7827 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket.AgentDataBlock">
7828 <exclude/>
7829 </member>
7830 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket.TargetObjectBlock">
7831 <exclude/>
7832 </member>
7833 <member name="T:OpenMetaverse.Packets.AgentSitPacket">
7834 <exclude/>
7835 </member>
7836 <member name="T:OpenMetaverse.Packets.AgentSitPacket.AgentDataBlock">
7837 <exclude/>
7838 </member>
7839 <member name="T:OpenMetaverse.Packets.RequestImagePacket">
7840 <exclude/>
7841 </member>
7842 <member name="T:OpenMetaverse.Packets.RequestImagePacket.AgentDataBlock">
7843 <exclude/>
7844 </member>
7845 <member name="T:OpenMetaverse.Packets.RequestImagePacket.RequestImageBlock">
7846 <exclude/>
7847 </member>
7848 <member name="T:OpenMetaverse.Packets.ImageDataPacket">
7849 <exclude/>
7850 </member>
7851 <member name="T:OpenMetaverse.Packets.ImageDataPacket.ImageIDBlock">
7852 <exclude/>
7853 </member>
7854 <member name="T:OpenMetaverse.Packets.ImageDataPacket.ImageDataBlock">
7855 <exclude/>
7856 </member>
7857 <member name="T:OpenMetaverse.Packets.ImagePacketPacket">
7858 <exclude/>
7859 </member>
7860 <member name="T:OpenMetaverse.Packets.ImagePacketPacket.ImageIDBlock">
7861 <exclude/>
7862 </member>
7863 <member name="T:OpenMetaverse.Packets.ImagePacketPacket.ImageDataBlock">
7864 <exclude/>
7865 </member>
7866 <member name="T:OpenMetaverse.Packets.LayerDataPacket">
7867 <exclude/>
7868 </member>
7869 <member name="T:OpenMetaverse.Packets.LayerDataPacket.LayerIDBlock">
7870 <exclude/>
7871 </member>
7872 <member name="T:OpenMetaverse.Packets.LayerDataPacket.LayerDataBlock">
7873 <exclude/>
7874 </member>
7875 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket">
7876 <exclude/>
7877 </member>
7878 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket.RegionDataBlock">
7879 <exclude/>
7880 </member>
7881 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket.ObjectDataBlock">
7882 <exclude/>
7883 </member>
7884 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket">
7885 <exclude/>
7886 </member>
7887 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket.RegionDataBlock">
7888 <exclude/>
7889 </member>
7890 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket.ObjectDataBlock">
7891 <exclude/>
7892 </member>
7893 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket">
7894 <exclude/>
7895 </member>
7896 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket.RegionDataBlock">
7897 <exclude/>
7898 </member>
7899 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket.ObjectDataBlock">
7900 <exclude/>
7901 </member>
7902 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket">
7903 <exclude/>
7904 </member>
7905 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket.RegionDataBlock">
7906 <exclude/>
7907 </member>
7908 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket.ObjectDataBlock">
7909 <exclude/>
7910 </member>
7911 <member name="T:OpenMetaverse.Packets.KillObjectPacket">
7912 <exclude/>
7913 </member>
7914 <member name="T:OpenMetaverse.Packets.KillObjectPacket.ObjectDataBlock">
7915 <exclude/>
7916 </member>
7917 <member name="T:OpenMetaverse.Packets.TransferPacketPacket">
7918 <exclude/>
7919 </member>
7920 <member name="T:OpenMetaverse.Packets.TransferPacketPacket.TransferDataBlock">
7921 <exclude/>
7922 </member>
7923 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket">
7924 <exclude/>
7925 </member>
7926 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket.XferIDBlock">
7927 <exclude/>
7928 </member>
7929 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket.DataPacketBlock">
7930 <exclude/>
7931 </member>
7932 <member name="T:OpenMetaverse.Packets.ConfirmXferPacketPacket">
7933 <exclude/>
7934 </member>
7935 <member name="T:OpenMetaverse.Packets.ConfirmXferPacketPacket.XferIDBlock">
7936 <exclude/>
7937 </member>
7938 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket">
7939 <exclude/>
7940 </member>
7941 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.SenderBlock">
7942 <exclude/>
7943 </member>
7944 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.AnimationListBlock">
7945 <exclude/>
7946 </member>
7947 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.AnimationSourceListBlock">
7948 <exclude/>
7949 </member>
7950 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.PhysicalAvatarEventListBlock">
7951 <exclude/>
7952 </member>
7953 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket">
7954 <exclude/>
7955 </member>
7956 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket.SitObjectBlock">
7957 <exclude/>
7958 </member>
7959 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket.SitTransformBlock">
7960 <exclude/>
7961 </member>
7962 <member name="T:OpenMetaverse.Packets.CameraConstraintPacket">
7963 <exclude/>
7964 </member>
7965 <member name="T:OpenMetaverse.Packets.CameraConstraintPacket.CameraCollidePlaneBlock">
7966 <exclude/>
7967 </member>
7968 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket">
7969 <exclude/>
7970 </member>
7971 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket.ParcelDataBlock">
7972 <exclude/>
7973 </member>
7974 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket.AgeVerificationBlockBlock">
7975 <exclude/>
7976 </member>
7977 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket">
7978 <exclude/>
7979 </member>
7980 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentDataBlock">
7981 <exclude/>
7982 </member>
7983 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.GroupDataBlock">
7984 <exclude/>
7985 </member>
7986 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AnimationDataBlock">
7987 <exclude/>
7988 </member>
7989 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.GranterBlockBlock">
7990 <exclude/>
7991 </member>
7992 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.NVPairDataBlock">
7993 <exclude/>
7994 </member>
7995 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.VisualParamBlock">
7996 <exclude/>
7997 </member>
7998 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentAccessBlock">
7999 <exclude/>
8000 </member>
8001 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentInfoBlock">
8002 <exclude/>
8003 </member>
8004 <member name="T:OpenMetaverse.Packets.ChildAgentAlivePacket">
8005 <exclude/>
8006 </member>
8007 <member name="T:OpenMetaverse.Packets.ChildAgentAlivePacket.AgentDataBlock">
8008 <exclude/>
8009 </member>
8010 <member name="T:OpenMetaverse.Packets.ChildAgentPositionUpdatePacket">
8011 <exclude/>
8012 </member>
8013 <member name="T:OpenMetaverse.Packets.ChildAgentPositionUpdatePacket.AgentDataBlock">
8014 <exclude/>
8015 </member>
8016 <member name="T:OpenMetaverse.Packets.SoundTriggerPacket">
8017 <exclude/>
8018 </member>
8019 <member name="T:OpenMetaverse.Packets.SoundTriggerPacket.SoundDataBlock">
8020 <exclude/>
8021 </member>
8022 <member name="M:OpenMetaverse.Packets.PacketDecoder.AddCallback(System.String,OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder)">
5811 <summary> 8023 <summary>
5812 Either a Vector3 position or a Vector3 Euler rotation 8024 Add a custom decoder callback
5813 </summary> 8025 </summary>
8026 <param name="key">The key of the field to decode</param>
8027 <param name="customPacketHandler">The custom decode handler</param>
5814 </member> 8028 </member>
5815 <member name="T:OpenMetaverse.HandPose"> 8029 <member name="M:OpenMetaverse.Packets.PacketDecoder.RemoveCustomHandler(System.String,OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder)">
5816 <summary> 8030 <summary>
5817 Poses set in the animation metadata for the hands. 8031 Remove a custom decoder callback
5818 </summary> 8032 </summary>
8033 <param name="key">The key of the field to decode</param>
8034 <param name="customPacketHandler">The custom decode handler</param>
5819 </member> 8035 </member>
5820 <member name="T:OpenMetaverse.BitPack"> 8036 <member name="M:OpenMetaverse.Packets.PacketDecoder.PacketToString(OpenMetaverse.Packets.Packet)">
5821 <summary> 8037 <summary>
5822 Wrapper around a byte array that allows bit to be packed and unpacked 8038 Creates a formatted string containing the values of a Packet
5823 one at a time or by a variable amount. Useful for very tightly packed
5824 data like LayerData packets
5825 </summary> 8039 </summary>
8040 <param name="packet">The Packet</param>
8041 <returns>A formatted string of values of the nested items in the Packet object</returns>
5826 </member> 8042 </member>
5827 <member name="M:OpenMetaverse.BitPack.#ctor(System.Byte[],System.Int32)"> 8043 <member name="M:OpenMetaverse.Packets.PacketDecoder.MessageToString(System.Object,System.Int32)">
5828 <summary> 8044 <summary>
5829 Default constructor, initialize the bit packer / bit unpacker 8045 Decode an IMessage object into a beautifully formatted string
5830 with a byte array and starting position
5831 </summary> 8046 </summary>
5832 <param name="data">Byte array to pack bits in to or unpack from</param> 8047 <param name="message">The IMessage object</param>
5833 <param name="pos">Starting position in the byte array</param> 8048 <param name="recurseLevel">Recursion level (used for indenting)</param>
8049 <returns>A formatted string containing the names and values of the source object</returns>
5834 </member> 8050 </member>
5835 <member name="F:OpenMetaverse.BitPack.Data"> 8051 <member name="T:OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder">
5836 <summary> 8052 <summary>
8053 A custom decoder callback
5837 </summary> 8054 </summary>
8055 <param name="fieldName">The key of the object</param>
8056 <param name="fieldData">the data to decode</param>
8057 <returns>A string represending the fieldData</returns>
5838 </member> 8058 </member>
5839 <member name="P:OpenMetaverse.BitPack.BytePos"> 8059 <member name="T:OpenMetaverse.DirectoryManager">
5840 <summary> 8060 <summary>
8061 Access to the data server which allows searching for land, events, people, etc
5841 </summary> 8062 </summary>
5842 </member> 8063 </member>
5843 <member name="P:OpenMetaverse.BitPack.BitPos"> 8064 <member name="F:OpenMetaverse.DirectoryManager.m_EventInfoReply">
8065 <summary>The event subscribers. null if no subcribers</summary>
8066 </member>
8067 <member name="M:OpenMetaverse.DirectoryManager.OnEventInfo(OpenMetaverse.EventInfoReplyEventArgs)">
8068 <summary>Raises the EventInfoReply event</summary>
8069 <param name="e">An EventInfoReplyEventArgs object containing the
8070 data returned from the data server</param>
8071 </member>
8072 <member name="F:OpenMetaverse.DirectoryManager.m_EventDetailLock">
8073 <summary>Thread sync lock object</summary>
8074 </member>
8075 <member name="F:OpenMetaverse.DirectoryManager.m_DirEvents">
8076 <summary>The event subscribers. null if no subcribers</summary>
8077 </member>
8078 <member name="M:OpenMetaverse.DirectoryManager.OnDirEvents(OpenMetaverse.DirEventsReplyEventArgs)">
8079 <summary>Raises the DirEventsReply event</summary>
8080 <param name="e">An DirEventsReplyEventArgs object containing the
8081 data returned from the data server</param>
8082 </member>
8083 <member name="F:OpenMetaverse.DirectoryManager.m_DirEventsLock">
8084 <summary>Thread sync lock object</summary>
8085 </member>
8086 <member name="F:OpenMetaverse.DirectoryManager.m_Places">
8087 <summary>The event subscribers. null if no subcribers</summary>
8088 </member>
8089 <member name="M:OpenMetaverse.DirectoryManager.OnPlaces(OpenMetaverse.PlacesReplyEventArgs)">
8090 <summary>Raises the PlacesReply event</summary>
8091 <param name="e">A PlacesReplyEventArgs object containing the
8092 data returned from the data server</param>
8093 </member>
8094 <member name="F:OpenMetaverse.DirectoryManager.m_PlacesLock">
8095 <summary>Thread sync lock object</summary>
8096 </member>
8097 <member name="F:OpenMetaverse.DirectoryManager.m_DirPlaces">
8098 <summary>The event subscribers. null if no subcribers</summary>
8099 </member>
8100 <member name="M:OpenMetaverse.DirectoryManager.OnDirPlaces(OpenMetaverse.DirPlacesReplyEventArgs)">
8101 <summary>Raises the DirPlacesReply event</summary>
8102 <param name="e">A DirPlacesReplyEventArgs object containing the
8103 data returned from the data server</param>
8104 </member>
8105 <member name="F:OpenMetaverse.DirectoryManager.m_DirPlacesLock">
8106 <summary>Thread sync lock object</summary>
8107 </member>
8108 <member name="F:OpenMetaverse.DirectoryManager.m_DirClassifieds">
8109 <summary>The event subscribers. null if no subcribers</summary>
8110 </member>
8111 <member name="M:OpenMetaverse.DirectoryManager.OnDirClassifieds(OpenMetaverse.DirClassifiedsReplyEventArgs)">
8112 <summary>Raises the DirClassifiedsReply event</summary>
8113 <param name="e">A DirClassifiedsReplyEventArgs object containing the
8114 data returned from the data server</param>
8115 </member>
8116 <member name="F:OpenMetaverse.DirectoryManager.m_DirClassifiedsLock">
8117 <summary>Thread sync lock object</summary>
8118 </member>
8119 <member name="F:OpenMetaverse.DirectoryManager.m_DirGroups">
8120 <summary>The event subscribers. null if no subcribers</summary>
8121 </member>
8122 <member name="M:OpenMetaverse.DirectoryManager.OnDirGroups(OpenMetaverse.DirGroupsReplyEventArgs)">
8123 <summary>Raises the DirGroupsReply event</summary>
8124 <param name="e">A DirGroupsReplyEventArgs object containing the
8125 data returned from the data server</param>
8126 </member>
8127 <member name="F:OpenMetaverse.DirectoryManager.m_DirGroupsLock">
8128 <summary>Thread sync lock object</summary>
8129 </member>
8130 <member name="F:OpenMetaverse.DirectoryManager.m_DirPeople">
8131 <summary>The event subscribers. null if no subcribers</summary>
8132 </member>
8133 <member name="M:OpenMetaverse.DirectoryManager.OnDirPeople(OpenMetaverse.DirPeopleReplyEventArgs)">
8134 <summary>Raises the DirPeopleReply event</summary>
8135 <param name="e">A DirPeopleReplyEventArgs object containing the
8136 data returned from the data server</param>
8137 </member>
8138 <member name="F:OpenMetaverse.DirectoryManager.m_DirPeopleLock">
8139 <summary>Thread sync lock object</summary>
8140 </member>
8141 <member name="F:OpenMetaverse.DirectoryManager.m_DirLandReply">
8142 <summary>The event subscribers. null if no subcribers</summary>
8143 </member>
8144 <member name="M:OpenMetaverse.DirectoryManager.OnDirLand(OpenMetaverse.DirLandReplyEventArgs)">
8145 <summary>Raises the DirLandReply event</summary>
8146 <param name="e">A DirLandReplyEventArgs object containing the
8147 data returned from the data server</param>
8148 </member>
8149 <member name="F:OpenMetaverse.DirectoryManager.m_DirLandLock">
8150 <summary>Thread sync lock object</summary>
8151 </member>
8152 <member name="M:OpenMetaverse.DirectoryManager.#ctor(OpenMetaverse.GridClient)">
5844 <summary> 8153 <summary>
8154 Constructs a new instance of the DirectoryManager class
5845 </summary> 8155 </summary>
8156 <param name="client">An instance of GridClient</param>
5846 </member> 8157 </member>
5847 <member name="M:OpenMetaverse.BitPack.PackFloat(System.Single)"> 8158 <member name="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String)">
5848 <summary> 8159 <summary>
5849 Pack a floating point value in to the data 8160 Query the data server for a list of classified ads containing the specified string.
8161 Defaults to searching for classified placed in any category, and includes PG, Adult and Mature
8162 results.
8163
8164 Responses are sent 16 per response packet, there is no way to know how many results a query reply will contain however assuming
8165 the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
8166
8167 The <see cref="!:OnClassifiedReply"/> event is raised when a response is received from the simulator
5850 </summary> 8168 </summary>
5851 <param name="data">Floating point value to pack</param> 8169 <param name="searchText">A string containing a list of keywords to search for</param>
8170 <returns>A UUID to correlate the results when the <see cref="!:OnClassifiedReply"/> event is raised</returns>
5852 </member> 8171 </member>
5853 <member name="M:OpenMetaverse.BitPack.PackBits(System.Int32,System.Int32)"> 8172 <member name="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String,OpenMetaverse.DirectoryManager.ClassifiedCategories,OpenMetaverse.DirectoryManager.ClassifiedQueryFlags)">
5854 <summary> 8173 <summary>
5855 Pack part or all of an integer in to the data 8174 Query the data server for a list of classified ads which contain specified keywords (Overload)
8175
8176 The <see cref="!:OnClassifiedReply"/> event is raised when a response is received from the simulator
5856 </summary> 8177 </summary>
5857 <param name="data">Integer containing the data to pack</param> 8178 <param name="searchText">A string containing a list of keywords to search for</param>
5858 <param name="totalCount">Number of bits of the integer to pack</param> 8179 <param name="category">The category to search</param>
8180 <param name="queryFlags">A set of flags which can be ORed to modify query options
8181 such as classified maturity rating.</param>
8182 <returns>A UUID to correlate the results when the <see cref="!:OnClassifiedReply"/> event is raised</returns>
8183 <example>
8184 Search classified ads containing the key words "foo" and "bar" in the "Any" category that are either PG or Mature
8185 <code>
8186 UUID searchID = StartClassifiedSearch("foo bar", ClassifiedCategories.Any, ClassifiedQueryFlags.PG | ClassifiedQueryFlags.Mature);
8187 </code>
8188 </example>
8189 <remarks>
8190 Responses are sent 16 at a time, there is no way to know how many results a query reply will contain however assuming
8191 the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
8192 </remarks>
5859 </member> 8193 </member>
5860 <member name="M:OpenMetaverse.BitPack.PackBits(System.UInt32,System.Int32)"> 8194 <member name="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,System.Int32)">
5861 <summary> 8195 <summary>
5862 Pack part or all of an unsigned integer in to the data 8196 Starts search for places (Overloaded)
8197
8198 The <see cref="!:OnDirPlacesReply"/> event is raised when a response is received from the simulator
5863 </summary> 8199 </summary>
5864 <param name="data">Unsigned integer containing the data to pack</param> 8200 <param name="searchText">Search text</param>
5865 <param name="totalCount">Number of bits of the integer to pack</param> 8201 <param name="queryStart">Each request is limited to 100 places
8202 being returned. To get the first 100 result entries of a request use 0,
8203 from 100-199 use 1, 200-299 use 2, etc.</param>
8204 <returns>A UUID to correlate the results when the <see cref="!:OnDirPlacesReply"/> event is raised</returns>
5866 </member> 8205 </member>
5867 <member name="M:OpenMetaverse.BitPack.PackBit(System.Boolean)"> 8206 <member name="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.Int32)">
5868 <summary> 8207 <summary>
5869 Pack a single bit in to the data 8208 Queries the dataserver for parcels of land which are flagged to be shown in search
8209
8210 The <see cref="!:OnDirPlacesReply"/> event is raised when a response is received from the simulator
5870 </summary> 8211 </summary>
5871 <param name="bit">Bit to pack</param> 8212 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
8213 <param name="queryFlags">A set of flags which can be ORed to modify query options
8214 such as classified maturity rating.</param>
8215 <param name="category">The category to search</param>
8216 <param name="queryStart">Each request is limited to 100 places
8217 being returned. To get the first 100 result entries of a request use 0,
8218 from 100-199 use 1, 200-299 use 2, etc.</param>
8219 <returns>A UUID to correlate the results when the <see cref="!:OnDirPlacesReply"/> event is raised</returns>
8220 <example>
8221 Search places containing the key words "foo" and "bar" in the "Any" category that are either PG or Adult
8222 <code>
8223 UUID searchID = StartDirPlacesSearch("foo bar", DirFindFlags.DwellSort | DirFindFlags.IncludePG | DirFindFlags.IncludeAdult, ParcelCategory.Any, 0);
8224 </code>
8225 </example>
8226 <remarks>
8227 Additional information on the results can be obtained by using the ParcelManager.InfoRequest method
8228 </remarks>
5872 </member> 8229 </member>
5873 <member name="M:OpenMetaverse.BitPack.PackFixed(System.Single,System.Boolean,System.Int32,System.Int32)"> 8230 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.SearchTypeFlags)">
5874 <summary> 8231 <summary>
8232 Starts a search for land sales using the directory
8233
8234 The <see cref="!:OnDirLandReply"/> event is raised when a response is received from the simulator
5875 </summary> 8235 </summary>
5876 <param name="data"> 8236 <param name="typeFlags">What type of land to search for. Auction,
5877 </param> 8237 estate, mainland, "first land", etc</param>
5878 <param name="isSigned"> 8238 <remarks>The OnDirLandReply event handler must be registered before
5879 </param> 8239 calling this function. There is no way to determine how many
5880 <param name="intBits"> 8240 results will be returned, or how many times the callback will be
5881 </param> 8241 fired other than you won't get more than 100 total parcels from
5882 <param name="fracBits"> 8242 each query.</remarks>
5883 </param>
5884 </member> 8243 </member>
5885 <member name="M:OpenMetaverse.BitPack.PackUUID(OpenMetaverse.UUID)"> 8244 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.SearchTypeFlags,System.Int32,System.Int32,System.Int32)">
5886 <summary> 8245 <summary>
8246 Starts a search for land sales using the directory
8247
8248 The <seealso cref="!:OnDirLandReply"/> event is raised when a response is received from the simulator
5887 </summary> 8249 </summary>
5888 <param name="data"> 8250 <param name="typeFlags">What type of land to search for. Auction,
5889 </param> 8251 estate, mainland, "first land", etc</param>
8252 <param name="priceLimit">Maximum price to search for</param>
8253 <param name="areaLimit">Maximum area to search for</param>
8254 <param name="queryStart">Each request is limited to 100 parcels
8255 being returned. To get the first 100 parcels of a request use 0,
8256 from 100-199 use 1, 200-299 use 2, etc.</param>
8257 <remarks>The OnDirLandReply event handler must be registered before
8258 calling this function. There is no way to determine how many
8259 results will be returned, or how many times the callback will be
8260 fired other than you won't get more than 100 total parcels from
8261 each query.</remarks>
5890 </member> 8262 </member>
5891 <member name="M:OpenMetaverse.BitPack.PackColor(OpenMetaverse.Color4)"> 8263 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.DirectoryManager.SearchTypeFlags,System.Int32,System.Int32,System.Int32)">
5892 <summary> 8264 <summary>
8265 Send a request to the data server for land sales listings
5893 </summary> 8266 </summary>
5894 <param name="data"> 8267
8268 <param name="findFlags">Flags sent to specify query options
8269
8270 Available flags:
8271 Specify the parcel rating with one or more of the following:
8272 IncludePG IncludeMature IncludeAdult
8273
8274 Specify the field to pre sort the results with ONLY ONE of the following:
8275 PerMeterSort NameSort AreaSort PricesSort
8276
8277 Specify the order the results are returned in, if not specified the results are pre sorted in a Descending Order
8278 SortAsc
8279
8280 Specify additional filters to limit the results with one or both of the following:
8281 LimitByPrice LimitByArea
8282
8283 Flags can be combined by separating them with the | (pipe) character
8284
8285 Additional details can be found in <see cref="T:OpenMetaverse.DirectoryManager.DirFindFlags"/>
5895 </param> 8286 </param>
8287 <param name="typeFlags">What type of land to search for. Auction,
8288 Estate or Mainland</param>
8289 <param name="priceLimit">Maximum price to search for when the
8290 DirFindFlags.LimitByPrice flag is specified in findFlags</param>
8291 <param name="areaLimit">Maximum area to search for when the
8292 DirFindFlags.LimitByArea flag is specified in findFlags</param>
8293 <param name="queryStart">Each request is limited to 100 parcels
8294 being returned. To get the first 100 parcels of a request use 0,
8295 from 100-199 use 100, 200-299 use 200, etc.</param>
8296 <remarks><para>The <seealso cref="!:OnDirLandReply"/> event will be raised with the response from the simulator
8297
8298 There is no way to determine how many results will be returned, or how many times the callback will be
8299 fired other than you won't get more than 100 total parcels from
8300 each reply.</para>
8301
8302 <para>Any land set for sale to either anybody or specific to the connected agent will be included in the
8303 results if the land is included in the query</para></remarks>
8304 <example>
8305 <code>
8306 // request all mainland, any maturity rating that is larger than 512 sq.m
8307 StartLandSearch(DirFindFlags.SortAsc | DirFindFlags.PerMeterSort | DirFindFlags.LimitByArea | DirFindFlags.IncludePG | DirFindFlags.IncludeMature | DirFindFlags.IncludeAdult, SearchTypeFlags.Mainland, 0, 512, 0);
8308 </code></example>
5896 </member> 8309 </member>
5897 <member name="M:OpenMetaverse.BitPack.UnpackFloat"> 8310 <member name="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32)">
5898 <summary> 8311 <summary>
5899 Unpacking a floating point value from the data 8312 Search for Groups
5900 </summary> 8313 </summary>
5901 <returns>Unpacked floating point value</returns> 8314 <param name="searchText">The name or portion of the name of the group you wish to search for</param>
8315 <param name="queryStart">Start from the match number</param>
8316 <returns></returns>
5902 </member> 8317 </member>
5903 <member name="M:OpenMetaverse.BitPack.UnpackBits(System.Int32)"> 8318 <member name="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32,OpenMetaverse.DirectoryManager.DirFindFlags)">
5904 <summary> 8319 <summary>
5905 Unpack a variable number of bits from the data in to integer format 8320 Search for Groups
5906 </summary> 8321 </summary>
5907 <param name="totalCount">Number of bits to unpack</param> 8322 <param name="searchText">The name or portion of the name of the group you wish to search for</param>
5908 <returns>An integer containing the unpacked bits</returns> 8323 <param name="queryStart">Start from the match number</param>
5909 <remarks>This function is only useful up to 32 bits</remarks> 8324 <param name="flags">Search flags</param>
8325 <returns></returns>
5910 </member> 8326 </member>
5911 <member name="M:OpenMetaverse.BitPack.UnpackUBits(System.Int32)"> 8327 <member name="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)">
5912 <summary> 8328 <summary>
5913 Unpack a variable number of bits from the data in to unsigned 8329 Search the People directory for other avatars
5914 integer format
5915 </summary> 8330 </summary>
5916 <param name="totalCount">Number of bits to unpack</param> 8331 <param name="searchText">The name or portion of the name of the avatar you wish to search for</param>
5917 <returns>An unsigned integer containing the unpacked bits</returns> 8332 <param name="queryStart"></param>
5918 <remarks>This function is only useful up to 32 bits</remarks> 8333 <returns></returns>
5919 </member> 8334 </member>
5920 <member name="M:OpenMetaverse.BitPack.UnpackShort"> 8335 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch">
5921 <summary> 8336 <summary>
5922 Unpack a 16-bit signed integer 8337 Search Places for parcels of land you personally own
5923 </summary> 8338 </summary>
5924 <returns>16-bit signed integer</returns>
5925 </member> 8339 </member>
5926 <member name="M:OpenMetaverse.BitPack.UnpackUShort"> 8340 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.UUID)">
5927 <summary> 8341 <summary>
5928 Unpack a 16-bit unsigned integer 8342 Searches Places for land owned by the specified group
5929 </summary> 8343 </summary>
5930 <returns>16-bit unsigned integer</returns> 8344 <param name="groupID">ID of the group you want to recieve land list for (You must be a member of the group)</param>
8345 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
5931 </member> 8346 </member>
5932 <member name="M:OpenMetaverse.BitPack.UnpackInt"> 8347 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(System.String)">
5933 <summary> 8348 <summary>
5934 Unpack a 32-bit signed integer 8349 Search the Places directory for parcels that are listed in search and contain the specified keywords
5935 </summary> 8350 </summary>
5936 <returns>32-bit signed integer</returns> 8351 <param name="searchText">A string containing the keywords to search for</param>
8352 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
5937 </member> 8353 </member>
5938 <member name="M:OpenMetaverse.BitPack.UnpackUInt"> 8354 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID)">
5939 <summary> 8355 <summary>
5940 Unpack a 32-bit unsigned integer 8356 Search Places - All Options
5941 </summary> 8357 </summary>
5942 <returns>32-bit unsigned integer</returns> 8358 <param name="findFlags">One of the Values from the DirFindFlags struct, ie: AgentOwned, GroupOwned, etc.</param>
8359 <param name="searchCategory">One of the values from the SearchCategory Struct, ie: Any, Linden, Newcomer</param>
8360 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
8361 <param name="simulatorName">String Simulator Name to search in</param>
8362 <param name="groupID">LLUID of group you want to recieve results for</param>
8363 <param name="transactionID">Transaction (Query) ID which can be associated with results from your request.</param>
8364 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
5943 </member> 8365 </member>
5944 <member name="T:OpenMetaverse.Caps"> 8366 <member name="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,System.UInt32)">
5945 <summary> 8367 <summary>
5946 Capabilities is the name of the bi-directional HTTP REST protocol 8368 Search All Events with specifid searchText in all categories, includes PG, Mature and Adult
5947 used to communicate non real-time transactions such as teleporting or
5948 group messaging
5949 </summary> 8369 </summary>
8370 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
8371 <param name="queryStart">Each request is limited to 100 entries
8372 being returned. To get the first group of entries of a request use 0,
8373 from 100-199 use 100, 200-299 use 200, etc.</param>
8374 <returns>UUID of query to correlate results in callback.</returns>
5950 </member> 8375 </member>
5951 <member name="M:OpenMetaverse.Caps.#ctor(OpenMetaverse.Simulator,System.String)"> 8376 <member name="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,System.String,System.UInt32,OpenMetaverse.DirectoryManager.EventCategories)">
5952 <summary> 8377 <summary>
5953 Default constructor 8378 Search Events
5954 </summary> 8379 </summary>
5955 <param name="simulator"> 8380 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
5956 </param> 8381 <param name="queryFlags">One or more of the following flags: DateEvents, IncludePG, IncludeMature, IncludeAdult
5957 <param name="seedcaps"> 8382 from the <see cref="T:OpenMetaverse.DirectoryManager.DirFindFlags"/> Enum
5958 </param> 8383
8384 Multiple flags can be combined by separating the flags with the | (pipe) character</param>
8385 <param name="eventDay">"u" for in-progress and upcoming events, -or- number of days since/until event is scheduled
8386 For example "0" = Today, "1" = tomorrow, "2" = following day, "-1" = yesterday, etc.</param>
8387 <param name="queryStart">Each request is limited to 100 entries
8388 being returned. To get the first group of entries of a request use 0,
8389 from 100-199 use 100, 200-299 use 200, etc.</param>
8390 <param name="category">EventCategory event is listed under.</param>
8391 <returns>UUID of query to correlate results in callback.</returns>
5959 </member> 8392 </member>
5960 <member name="T:OpenMetaverse.Caps.EventQueueCallback"> 8393 <member name="M:OpenMetaverse.DirectoryManager.EventInfoRequest(System.UInt32)">
5961 <summary> 8394 <summary>Requests Event Details</summary>
5962 Triggered when an event is received via the EventQueueGet 8395 <param name="eventID">ID of Event returned from the <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,System.UInt32)"/> method</param>
5963 capability
5964 </summary>
5965 <param name="capsKey">Event name</param>
5966 <param name="message">Decoded event data</param>
5967 <param name="simulator">The simulator that generated the event</param>
5968 </member> 8396 </member>
5969 <member name="F:OpenMetaverse.Caps.Simulator"> 8397 <member name="M:OpenMetaverse.DirectoryManager.DirClassifiedReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
5970 <summary>Reference to the simulator this system is connected to</summary> 8398 <summary>Process an incoming packet and raise the appropriate events</summary>
8399 <param name="sender">The sender</param>
8400 <param name="e">The EventArgs object containing the packet data</param>
5971 </member> 8401 </member>
5972 <member name="P:OpenMetaverse.Caps.SeedCapsURI"> 8402 <member name="M:OpenMetaverse.DirectoryManager.DirLandReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
5973 <summary>Capabilities URI this system was initialized with</summary> 8403 <summary>Process an incoming packet and raise the appropriate events</summary>
8404 <param name="sender">The sender</param>
8405 <param name="e">The EventArgs object containing the packet data</param>
5974 </member> 8406 </member>
5975 <member name="P:OpenMetaverse.Caps.IsEventQueueRunning"> 8407 <member name="M:OpenMetaverse.DirectoryManager.DirLandReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
5976 <summary>Whether the capabilities event queue is connected and 8408 <summary>Process an incoming <see cref="T:OpenMetaverse.Messages.Linden.DirLandReplyMessage"/> event message</summary>
5977 listening for incoming events</summary> 8409 <param name="capsKey">The Unique Capabilities Key</param>
8410 <param name="message">The <see cref="T:OpenMetaverse.Messages.Linden.DirLandReplyMessage"/> event message containing the data</param>
8411 <param name="simulator">The simulator the message originated from</param>
5978 </member> 8412 </member>
5979 <member name="M:OpenMetaverse.Caps.CapabilityURI(System.String)"> 8413 <member name="M:OpenMetaverse.DirectoryManager.DirPeopleReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
5980 <summary> 8414 <summary>Process an incoming packet and raise the appropriate events</summary>
5981 Request the URI of a named capability 8415 <param name="sender">The sender</param>
5982 </summary> 8416 <param name="e">The EventArgs object containing the packet data</param>
5983 <param name="capability">Name of the capability to request</param>
5984 <returns>The URI of the requested capability, or String.Empty if
5985 the capability does not exist</returns>
5986 </member> 8417 </member>
5987 <member name="M:OpenMetaverse.Caps.EventQueueEventHandler(System.String,OpenMetaverse.StructuredData.OSDMap)"> 8418 <member name="M:OpenMetaverse.DirectoryManager.DirGroupsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
5988 <summary> 8419 <summary>Process an incoming packet and raise the appropriate events</summary>
5989 Process any incoming events, check to see if we have a message created for the event, 8420 <param name="sender">The sender</param>
5990 </summary> 8421 <param name="e">The EventArgs object containing the packet data</param>
5991 <param name="eventName">
5992 </param>
5993 <param name="body">
5994 </param>
5995 </member> 8422 </member>
5996 <member name="M:OpenMetaverse.Packets.Packet.BuildPacket(System.String,OpenMetaverse.StructuredData.OSDMap)"> 8423 <member name="M:OpenMetaverse.DirectoryManager.PlacesReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
5997 <summary> 8424 <summary>Process an incoming <see cref="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage"/> event message</summary>
5998 Attempts to convert an LLSD structure to a known Packet type 8425 <param name="capsKey">The Unique Capabilities Key</param>
5999 </summary> 8426 <param name="message">The <see cref="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage"/> event message containing the data</param>
6000 <param name="capsEventName">Event name, this must match an actual 8427 <param name="simulator">The simulator the message originated from</param>
6001 packet name for a Packet to be successfully built</param>
6002 <param name="body">LLSD to convert to a Packet</param>
6003 <returns>A Packet on success, otherwise null</returns>
6004 </member> 8428 </member>
6005 <member name="P:OpenMetaverse.CoordinateFrame.Origin"> 8429 <member name="M:OpenMetaverse.DirectoryManager.PlacesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6006 <summary>Origin position of this coordinate frame</summary> 8430 <summary>Process an incoming packet and raise the appropriate events</summary>
8431 <param name="sender">The sender</param>
8432 <param name="e">The EventArgs object containing the packet data</param>
6007 </member> 8433 </member>
6008 <member name="P:OpenMetaverse.CoordinateFrame.XAxis"> 8434 <member name="M:OpenMetaverse.DirectoryManager.EventsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6009 <summary>X axis of this coordinate frame, or Forward/At in grid terms</summary> 8435 <summary>Process an incoming packet and raise the appropriate events</summary>
8436 <param name="sender">The sender</param>
8437 <param name="e">The EventArgs object containing the packet data</param>
6010 </member> 8438 </member>
6011 <member name="P:OpenMetaverse.CoordinateFrame.YAxis"> 8439 <member name="M:OpenMetaverse.DirectoryManager.EventInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6012 <summary>Y axis of this coordinate frame, or Left in grid terms</summary> 8440 <summary>Process an incoming packet and raise the appropriate events</summary>
8441 <param name="sender">The sender</param>
8442 <param name="e">The EventArgs object containing the packet data</param>
6013 </member> 8443 </member>
6014 <member name="P:OpenMetaverse.CoordinateFrame.ZAxis"> 8444 <member name="M:OpenMetaverse.DirectoryManager.DirPlacesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6015 <summary>Z axis of this coordinate frame, or Up in grid terms</summary> 8445 <summary>Process an incoming packet and raise the appropriate events</summary>
8446 <param name="sender">The sender</param>
8447 <param name="e">The EventArgs object containing the packet data</param>
6016 </member> 8448 </member>
6017 <member name="M:OpenMetaverse.CoordinateFrame.LookDirection(OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 8449 <member name="E:OpenMetaverse.DirectoryManager.EventInfoReply">
6018 <summary> 8450 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.EventInfoRequest(System.UInt32)"/> request.</summary>
6019 </summary>
6020 <param name="at">Looking direction, must be a normalized vector</param>
6021 <param name="upDirection">Up direction, must be a normalized vector</param>
6022 </member> 8451 </member>
6023 <member name="M:OpenMetaverse.CoordinateFrame.LookDirection(System.Double)"> 8452 <member name="E:OpenMetaverse.DirectoryManager.DirEventsReply">
6024 <summary> 8453 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,System.UInt32)"/> request.</summary>
6025 Align the coordinate frame X and Y axis with a given rotation
6026 around the Z axis in radians
6027 </summary>
6028 <param name="heading">Absolute rotation around the Z axis in
6029 radians</param>
6030 </member> 8454 </member>
6031 <member name="T:OpenMetaverse.DirectoryManager"> 8455 <member name="E:OpenMetaverse.DirectoryManager.PlacesReply">
6032 <summary> 8456 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch"/> request.</summary>
6033 Access to the data server which allows searching for land, events, people, etc
6034 </summary>
6035 </member> 8457 </member>
6036 <member name="M:OpenMetaverse.DirectoryManager.#ctor(OpenMetaverse.GridClient)"> 8458 <member name="E:OpenMetaverse.DirectoryManager.DirPlacesReply">
6037 <summary> 8459 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,System.Int32)"/> request.</summary>
6038 Constructs a new instance of the DirectoryManager class 8460 </member>
6039 </summary> 8461 <member name="E:OpenMetaverse.DirectoryManager.DirClassifiedsReply">
6040 <param name="client">An instance of GridClient</param> 8462 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String,OpenMetaverse.DirectoryManager.ClassifiedCategories,System.Boolean)"/> request.</summary>
8463 </member>
8464 <member name="E:OpenMetaverse.DirectoryManager.DirGroupsReply">
8465 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32)"/> request.</summary>
8466 </member>
8467 <member name="E:OpenMetaverse.DirectoryManager.DirPeopleReply">
8468 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)"/> request.</summary>
8469 </member>
8470 <member name="E:OpenMetaverse.DirectoryManager.DirLandReply">
8471 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.SearchTypeFlags)"/> request.</summary>
6041 </member> 8472 </member>
6042 <member name="T:OpenMetaverse.DirectoryManager.ClassifiedCategories"> 8473 <member name="T:OpenMetaverse.DirectoryManager.ClassifiedCategories">
6043 <summary>Classified Ad categories</summary> 8474 <summary>Classified Ad categories</summary>
@@ -6052,87 +8483,69 @@
6052 <summary>Classified is </summary> 8483 <summary>Classified is </summary>
6053 </member> 8484 </member>
6054 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.PropertyRental"> 8485 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.PropertyRental">
6055 <summary> 8486 <summary></summary>
6056 </summary>
6057 </member> 8487 </member>
6058 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.SpecialAttraction"> 8488 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.SpecialAttraction">
6059 <summary> 8489 <summary></summary>
6060 </summary>
6061 </member> 8490 </member>
6062 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.NewProducts"> 8491 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.NewProducts">
6063 <summary> 8492 <summary></summary>
6064 </summary>
6065 </member> 8493 </member>
6066 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Employment"> 8494 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Employment">
6067 <summary> 8495 <summary></summary>
6068 </summary>
6069 </member> 8496 </member>
6070 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Wanted"> 8497 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Wanted">
6071 <summary> 8498 <summary></summary>
6072 </summary>
6073 </member> 8499 </member>
6074 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Service"> 8500 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Service">
6075 <summary> 8501 <summary></summary>
6076 </summary>
6077 </member> 8502 </member>
6078 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Personal"> 8503 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedCategories.Personal">
6079 <summary> 8504 <summary></summary>
6080 </summary>
6081 </member> 8505 </member>
6082 <member name="T:OpenMetaverse.DirectoryManager.EventCategories"> 8506 <member name="T:OpenMetaverse.DirectoryManager.EventCategories">
6083 <summary>Event Categories</summary> 8507 <summary>Event Categories</summary>
6084 </member> 8508 </member>
6085 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.All"> 8509 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.All">
6086 <summary> 8510 <summary></summary>
6087 </summary>
6088 </member> 8511 </member>
6089 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Discussion"> 8512 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Discussion">
6090 <summary> 8513 <summary></summary>
6091 </summary>
6092 </member> 8514 </member>
6093 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Sports"> 8515 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Sports">
6094 <summary> 8516 <summary></summary>
6095 </summary>
6096 </member> 8517 </member>
6097 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.LiveMusic"> 8518 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.LiveMusic">
6098 <summary> 8519 <summary></summary>
6099 </summary>
6100 </member> 8520 </member>
6101 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Commercial"> 8521 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Commercial">
6102 <summary> 8522 <summary></summary>
6103 </summary>
6104 </member> 8523 </member>
6105 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Nightlife"> 8524 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Nightlife">
6106 <summary> 8525 <summary></summary>
6107 </summary>
6108 </member> 8526 </member>
6109 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Games"> 8527 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Games">
6110 <summary> 8528 <summary></summary>
6111 </summary>
6112 </member> 8529 </member>
6113 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Pageants"> 8530 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Pageants">
6114 <summary> 8531 <summary></summary>
6115 </summary>
6116 </member> 8532 </member>
6117 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Education"> 8533 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Education">
6118 <summary> 8534 <summary></summary>
6119 </summary>
6120 </member> 8535 </member>
6121 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Arts"> 8536 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Arts">
6122 <summary> 8537 <summary></summary>
6123 </summary>
6124 </member> 8538 </member>
6125 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Charity"> 8539 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Charity">
6126 <summary> 8540 <summary></summary>
6127 </summary>
6128 </member> 8541 </member>
6129 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Miscellaneous"> 8542 <member name="F:OpenMetaverse.DirectoryManager.EventCategories.Miscellaneous">
6130 <summary> 8543 <summary></summary>
6131 </summary>
6132 </member> 8544 </member>
6133 <member name="T:OpenMetaverse.DirectoryManager.DirFindFlags"> 8545 <member name="T:OpenMetaverse.DirectoryManager.DirFindFlags">
6134 <summary> 8546 <summary>
6135 Query Flags used in many of the DirectoryManager methods to specify which query to execute and how to return the results. 8547 Query Flags used in many of the DirectoryManager methods to specify which query to execute and how to return the results.
8548
6136 Flags can be combined using the | (pipe) character, not all flags are available in all queries 8549 Flags can be combined using the | (pipe) character, not all flags are available in all queries
6137 </summary> 8550 </summary>
6138 </member> 8551 </member>
@@ -6140,12 +8553,10 @@
6140 <summary>Query the People database</summary> 8553 <summary>Query the People database</summary>
6141 </member> 8554 </member>
6142 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Online"> 8555 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Online">
6143 <summary> 8556 <summary></summary>
6144 </summary>
6145 </member> 8557 </member>
6146 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Events"> 8558 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Events">
6147 <summary> 8559 <summary></summary>
6148 </summary>
6149 </member> 8560 </member>
6150 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Groups"> 8561 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.Groups">
6151 <summary>Query the Groups database</summary> 8562 <summary>Query the Groups database</summary>
@@ -6157,8 +8568,7 @@
6157 <summary>Query the land holdings database for land owned by the currently connected agent</summary> 8568 <summary>Query the land holdings database for land owned by the currently connected agent</summary>
6158 </member> 8569 </member>
6159 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.ForSale"> 8570 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.ForSale">
6160 <summary> 8571 <summary></summary>
6161 </summary>
6162 </member> 8572 </member>
6163 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.GroupOwned"> 8573 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.GroupOwned">
6164 <summary>Query the land holdings database for land which is owned by a Group</summary> 8574 <summary>Query the land holdings database for land which is owned by a Group</summary>
@@ -6168,39 +8578,35 @@
6168 when searching the Places database</summary> 8578 when searching the Places database</summary>
6169 </member> 8579 </member>
6170 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PgSimsOnly"> 8580 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PgSimsOnly">
6171 <summary> 8581 <summary></summary>
6172 </summary>
6173 </member> 8582 </member>
6174 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PicturesOnly"> 8583 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PicturesOnly">
6175 <summary> 8584 <summary></summary>
6176 </summary>
6177 </member> 8585 </member>
6178 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PgEventsOnly"> 8586 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PgEventsOnly">
6179 <summary> 8587 <summary></summary>
6180 </summary>
6181 </member> 8588 </member>
6182 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.MatureSimsOnly"> 8589 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.MatureSimsOnly">
6183 <summary> 8590 <summary></summary>
6184 </summary>
6185 </member> 8591 </member>
6186 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.SortAsc"> 8592 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.SortAsc">
6187 <summary>Specifies the query should pre sort the results in an ascending order when searching the land sales database. 8593 <summary>Specifies the query should pre sort the results in an ascending order when searching the land sales database.
6188 This flag is only used when searching the land sales database</summary> 8594 This flag is only used when searching the land sales database</summary>
6189 </member> 8595 </member>
6190 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PricesSort"> 8596 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PricesSort">
6191 <summary>Specifies the query should pre sort the results using the SalePrice field when searching the land sales database. 8597 <summary>Specifies the query should pre sort the results using the SalePrice field when searching the land sales database.
6192 This flag is only used when searching the land sales database</summary> 8598 This flag is only used when searching the land sales database</summary>
6193 </member> 8599 </member>
6194 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PerMeterSort"> 8600 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PerMeterSort">
6195 <summary>Specifies the query should pre sort the results by calculating the average price/sq.m (SalePrice / Area) when searching the land sales database. 8601 <summary>Specifies the query should pre sort the results by calculating the average price/sq.m (SalePrice / Area) when searching the land sales database.
6196 This flag is only used when searching the land sales database</summary> 8602 This flag is only used when searching the land sales database</summary>
6197 </member> 8603 </member>
6198 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.AreaSort"> 8604 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.AreaSort">
6199 <summary>Specifies the query should pre sort the results using the ParcelSize field when searching the land sales database. 8605 <summary>Specifies the query should pre sort the results using the ParcelSize field when searching the land sales database.
6200 This flag is only used when searching the land sales database</summary> 8606 This flag is only used when searching the land sales database</summary>
6201 </member> 8607 </member>
6202 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.NameSort"> 8608 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.NameSort">
6203 <summary>Specifies the query should pre sort the results using the Name field when searching the land sales database. 8609 <summary>Specifies the query should pre sort the results using the Name field when searching the land sales database.
6204 This flag is only used when searching the land sales database</summary> 8610 This flag is only used when searching the land sales database</summary>
6205 </member> 8611 </member>
6206 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.LimitByPrice"> 8612 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.LimitByPrice">
@@ -6212,12 +8618,10 @@
6212 This flag is only used when searching the land sales database</summary> 8618 This flag is only used when searching the land sales database</summary>
6213 </member> 8619 </member>
6214 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.FilterMature"> 8620 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.FilterMature">
6215 <summary> 8621 <summary></summary>
6216 </summary>
6217 </member> 8622 </member>
6218 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PGOnly"> 8623 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.PGOnly">
6219 <summary> 8624 <summary></summary>
6220 </summary>
6221 </member> 8625 </member>
6222 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.IncludePG"> 8626 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.IncludePG">
6223 <summary>Include PG land in results. This flag is used when searching both the Groups, Events and Land sales databases</summary> 8627 <summary>Include PG land in results. This flag is used when searching both the Groups, Events and Land sales databases</summary>
@@ -6229,8 +8633,7 @@
6229 <summary>Include Adult land in results. This flag is used when searching both the Groups, Events and Land sales databases</summary> 8633 <summary>Include Adult land in results. This flag is used when searching both the Groups, Events and Land sales databases</summary>
6230 </member> 8634 </member>
6231 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.AdultOnly"> 8635 <member name="F:OpenMetaverse.DirectoryManager.DirFindFlags.AdultOnly">
6232 <summary> 8636 <summary></summary>
6233 </summary>
6234 </member> 8637 </member>
6235 <member name="T:OpenMetaverse.DirectoryManager.SearchTypeFlags"> 8638 <member name="T:OpenMetaverse.DirectoryManager.SearchTypeFlags">
6236 <summary> 8639 <summary>
@@ -6271,24 +8674,19 @@
6271 This set of flags is for the newer style</remarks> 8674 This set of flags is for the newer style</remarks>
6272 </member> 8675 </member>
6273 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.None"> 8676 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.None">
6274 <summary> 8677 <summary></summary>
6275 </summary>
6276 </member> 8678 </member>
6277 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.Mature"> 8679 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.Mature">
6278 <summary> 8680 <summary></summary>
6279 </summary>
6280 </member> 8681 </member>
6281 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.Enabled"> 8682 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.Enabled">
6282 <summary> 8683 <summary></summary>
6283 </summary>
6284 </member> 8684 </member>
6285 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.UpdateTime"> 8685 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.UpdateTime">
6286 <summary> 8686 <summary></summary>
6287 </summary>
6288 </member> 8687 </member>
6289 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.AutoRenew"> 8688 <member name="F:OpenMetaverse.DirectoryManager.ClassifiedFlags.AutoRenew">
6290 <summary> 8689 <summary></summary>
6291 </summary>
6292 </member> 8690 </member>
6293 <member name="T:OpenMetaverse.DirectoryManager.ClassifiedQueryFlags"> 8691 <member name="T:OpenMetaverse.DirectoryManager.ClassifiedQueryFlags">
6294 <summary> 8692 <summary>
@@ -6348,14 +8746,14 @@
6348 </member> 8746 </member>
6349 <member name="T:OpenMetaverse.DirectoryManager.DirectoryParcel"> 8747 <member name="T:OpenMetaverse.DirectoryManager.DirectoryParcel">
6350 <summary> 8748 <summary>
6351 A parcel retrieved from the dataserver such as results from the 8749 A parcel retrieved from the dataserver such as results from the
6352 "For-Sale" listings or "Places" Search 8750 "For-Sale" listings or "Places" Search
6353 </summary> 8751 </summary>
6354 </member> 8752 </member>
6355 <member name="F:OpenMetaverse.DirectoryManager.DirectoryParcel.ID"> 8753 <member name="F:OpenMetaverse.DirectoryManager.DirectoryParcel.ID">
6356 <summary>The unique dataserver parcel ID</summary> 8754 <summary>The unique dataserver parcel ID</summary>
6357 <remarks>This id is used to obtain additional information from the entry 8755 <remarks>This id is used to obtain additional information from the entry
6358 by using the <see cref="!:ParcelManager.InfoRequest" /> method</remarks> 8756 by using the <see cref="!:ParcelManager.InfoRequest"/> method</remarks>
6359 </member> 8757 </member>
6360 <member name="F:OpenMetaverse.DirectoryManager.DirectoryParcel.Name"> 8758 <member name="F:OpenMetaverse.DirectoryManager.DirectoryParcel.Name">
6361 <summary>A string containing the name of the parcel</summary> 8759 <summary>A string containing the name of the parcel</summary>
@@ -6397,7 +8795,7 @@
6397 <summary>The agents last name</summary> 8795 <summary>The agents last name</summary>
6398 </member> 8796 </member>
6399 <member name="F:OpenMetaverse.DirectoryManager.AgentSearchData.AgentID"> 8797 <member name="F:OpenMetaverse.DirectoryManager.AgentSearchData.AgentID">
6400 <summary>The agents <see cref="T:OpenMetaverse.UUID" /></summary> 8798 <summary>The agents <see cref="T:OpenMetaverse.UUID"/></summary>
6401 </member> 8799 </member>
6402 <member name="M:OpenMetaverse.DirectoryManager.AgentSearchData.ToString"> 8800 <member name="M:OpenMetaverse.DirectoryManager.AgentSearchData.ToString">
6403 <summary>Print the struct data as a string</summary> 8801 <summary>Print the struct data as a string</summary>
@@ -6405,7 +8803,7 @@
6405 </member> 8803 </member>
6406 <member name="T:OpenMetaverse.DirectoryManager.GroupSearchData"> 8804 <member name="T:OpenMetaverse.DirectoryManager.GroupSearchData">
6407 <summary> 8805 <summary>
6408 Response to a "Groups" Search 8806 Response to a "Groups" Search
6409 </summary> 8807 </summary>
6410 </member> 8808 </member>
6411 <member name="F:OpenMetaverse.DirectoryManager.GroupSearchData.GroupID"> 8809 <member name="F:OpenMetaverse.DirectoryManager.GroupSearchData.GroupID">
@@ -6423,13 +8821,14 @@
6423 </member> 8821 </member>
6424 <member name="T:OpenMetaverse.DirectoryManager.PlacesSearchData"> 8822 <member name="T:OpenMetaverse.DirectoryManager.PlacesSearchData">
6425 <summary> 8823 <summary>
6426 Parcel information returned from a <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID)" /> request 8824 Parcel information returned from a <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch"/> request
6427 <para> 8825 <para>
6428 Represents one of the following: 8826 Represents one of the following:
6429 A parcel of land on the grid that has its Show In Search flag set 8827 A parcel of land on the grid that has its Show In Search flag set
6430 A parcel of land owned by the agent making the request 8828 A parcel of land owned by the agent making the request
6431 A parcel of land owned by a group the agent making the request is a member of 8829 A parcel of land owned by a group the agent making the request is a member of
6432 </para><para> 8830 </para>
8831 <para>
6433 In a request for Group Land, the First record will contain an empty record 8832 In a request for Group Land, the First record will contain an empty record
6434 </para> 8833 </para>
6435 Note: This is not the same as searching the land for sale data source 8834 Note: This is not the same as searching the land for sale data source
@@ -6476,7 +8875,14 @@
6476 <member name="F:OpenMetaverse.DirectoryManager.PlacesSearchData.SKU"> 8875 <member name="F:OpenMetaverse.DirectoryManager.PlacesSearchData.SKU">
6477 <summary>The billing product SKU</summary> 8876 <summary>The billing product SKU</summary>
6478 <remarks>Known values are: 8877 <remarks>Known values are:
6479 <list type="table"><item><term>023</term><description>Mainland / Full Region</description></item><item><term>024</term><description>Estate / Full Region</description></item><item><term>027</term><description>Estate / Openspace</description></item><item><term>029</term><description>Estate / Homestead</description></item><item><term>129</term><description>Mainland / Homestead (Linden Owned)</description></item></list></remarks> 8878 <list type="table">
8879 <item><term>023</term><description>Mainland / Full Region</description></item>
8880 <item><term>024</term><description>Estate / Full Region</description></item>
8881 <item><term>027</term><description>Estate / Openspace</description></item>
8882 <item><term>029</term><description>Estate / Homestead</description></item>
8883 <item><term>129</term><description>Mainland / Homestead (Linden Owned)</description></item>
8884 </list>
8885 </remarks>
6480 </member> 8886 </member>
6481 <member name="F:OpenMetaverse.DirectoryManager.PlacesSearchData.Price"> 8887 <member name="F:OpenMetaverse.DirectoryManager.PlacesSearchData.Price">
6482 <summary>No longer used, will always be 0</summary> 8888 <summary>No longer used, will always be 0</summary>
@@ -6568,396 +8974,6 @@
6568 <summary>Print the struct data as a string</summary> 8974 <summary>Print the struct data as a string</summary>
6569 <returns>A string containing the field name, and field value</returns> 8975 <returns>A string containing the field name, and field value</returns>
6570 </member> 8976 </member>
6571 <member name="F:OpenMetaverse.DirectoryManager.m_EventInfoReply">
6572 <summary>The event subscribers. null if no subcribers</summary>
6573 </member>
6574 <member name="F:OpenMetaverse.DirectoryManager.m_EventDetailLock">
6575 <summary>Thread sync lock object</summary>
6576 </member>
6577 <member name="F:OpenMetaverse.DirectoryManager.m_DirEvents">
6578 <summary>The event subscribers. null if no subcribers</summary>
6579 </member>
6580 <member name="F:OpenMetaverse.DirectoryManager.m_DirEventsLock">
6581 <summary>Thread sync lock object</summary>
6582 </member>
6583 <member name="F:OpenMetaverse.DirectoryManager.m_Places">
6584 <summary>The event subscribers. null if no subcribers</summary>
6585 </member>
6586 <member name="F:OpenMetaverse.DirectoryManager.m_PlacesLock">
6587 <summary>Thread sync lock object</summary>
6588 </member>
6589 <member name="F:OpenMetaverse.DirectoryManager.m_DirPlaces">
6590 <summary>The event subscribers. null if no subcribers</summary>
6591 </member>
6592 <member name="F:OpenMetaverse.DirectoryManager.m_DirPlacesLock">
6593 <summary>Thread sync lock object</summary>
6594 </member>
6595 <member name="F:OpenMetaverse.DirectoryManager.m_DirClassifieds">
6596 <summary>The event subscribers. null if no subcribers</summary>
6597 </member>
6598 <member name="F:OpenMetaverse.DirectoryManager.m_DirClassifiedsLock">
6599 <summary>Thread sync lock object</summary>
6600 </member>
6601 <member name="F:OpenMetaverse.DirectoryManager.m_DirGroups">
6602 <summary>The event subscribers. null if no subcribers</summary>
6603 </member>
6604 <member name="F:OpenMetaverse.DirectoryManager.m_DirGroupsLock">
6605 <summary>Thread sync lock object</summary>
6606 </member>
6607 <member name="F:OpenMetaverse.DirectoryManager.m_DirPeople">
6608 <summary>The event subscribers. null if no subcribers</summary>
6609 </member>
6610 <member name="F:OpenMetaverse.DirectoryManager.m_DirPeopleLock">
6611 <summary>Thread sync lock object</summary>
6612 </member>
6613 <member name="F:OpenMetaverse.DirectoryManager.m_DirLandReply">
6614 <summary>The event subscribers. null if no subcribers</summary>
6615 </member>
6616 <member name="F:OpenMetaverse.DirectoryManager.m_DirLandLock">
6617 <summary>Thread sync lock object</summary>
6618 </member>
6619 <member name="E:OpenMetaverse.DirectoryManager.EventInfoReply">
6620 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.EventInfoRequest(System.UInt32)" /> request.</summary>
6621 </member>
6622 <member name="E:OpenMetaverse.DirectoryManager.DirEventsReply">
6623 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,System.String,System.UInt32,OpenMetaverse.DirectoryManager.EventCategories)" /> request.</summary>
6624 </member>
6625 <member name="E:OpenMetaverse.DirectoryManager.PlacesReply">
6626 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID)" /> request.</summary>
6627 </member>
6628 <member name="E:OpenMetaverse.DirectoryManager.DirPlacesReply">
6629 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.Int32)" /> request.</summary>
6630 </member>
6631 <member name="E:OpenMetaverse.DirectoryManager.DirClassifiedsReply">
6632 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String,OpenMetaverse.DirectoryManager.ClassifiedCategories,OpenMetaverse.DirectoryManager.ClassifiedQueryFlags)" /> request.</summary>
6633 </member>
6634 <member name="E:OpenMetaverse.DirectoryManager.DirGroupsReply">
6635 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32,OpenMetaverse.DirectoryManager.DirFindFlags)" /> request.</summary>
6636 </member>
6637 <member name="E:OpenMetaverse.DirectoryManager.DirPeopleReply">
6638 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)" /> request.</summary>
6639 </member>
6640 <member name="E:OpenMetaverse.DirectoryManager.DirLandReply">
6641 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.DirectoryManager.SearchTypeFlags,System.Int32,System.Int32,System.Int32)" /> request.</summary>
6642 </member>
6643 <member name="M:OpenMetaverse.DirectoryManager.OnEventInfo(OpenMetaverse.EventInfoReplyEventArgs)">
6644 <summary>Raises the EventInfoReply event</summary>
6645 <param name="e">An EventInfoReplyEventArgs object containing the
6646 data returned from the data server</param>
6647 </member>
6648 <member name="M:OpenMetaverse.DirectoryManager.OnDirEvents(OpenMetaverse.DirEventsReplyEventArgs)">
6649 <summary>Raises the DirEventsReply event</summary>
6650 <param name="e">An DirEventsReplyEventArgs object containing the
6651 data returned from the data server</param>
6652 </member>
6653 <member name="M:OpenMetaverse.DirectoryManager.OnPlaces(OpenMetaverse.PlacesReplyEventArgs)">
6654 <summary>Raises the PlacesReply event</summary>
6655 <param name="e">A PlacesReplyEventArgs object containing the
6656 data returned from the data server</param>
6657 </member>
6658 <member name="M:OpenMetaverse.DirectoryManager.OnDirPlaces(OpenMetaverse.DirPlacesReplyEventArgs)">
6659 <summary>Raises the DirPlacesReply event</summary>
6660 <param name="e">A DirPlacesReplyEventArgs object containing the
6661 data returned from the data server</param>
6662 </member>
6663 <member name="M:OpenMetaverse.DirectoryManager.OnDirClassifieds(OpenMetaverse.DirClassifiedsReplyEventArgs)">
6664 <summary>Raises the DirClassifiedsReply event</summary>
6665 <param name="e">A DirClassifiedsReplyEventArgs object containing the
6666 data returned from the data server</param>
6667 </member>
6668 <member name="M:OpenMetaverse.DirectoryManager.OnDirGroups(OpenMetaverse.DirGroupsReplyEventArgs)">
6669 <summary>Raises the DirGroupsReply event</summary>
6670 <param name="e">A DirGroupsReplyEventArgs object containing the
6671 data returned from the data server</param>
6672 </member>
6673 <member name="M:OpenMetaverse.DirectoryManager.OnDirPeople(OpenMetaverse.DirPeopleReplyEventArgs)">
6674 <summary>Raises the DirPeopleReply event</summary>
6675 <param name="e">A DirPeopleReplyEventArgs object containing the
6676 data returned from the data server</param>
6677 </member>
6678 <member name="M:OpenMetaverse.DirectoryManager.OnDirLand(OpenMetaverse.DirLandReplyEventArgs)">
6679 <summary>Raises the DirLandReply event</summary>
6680 <param name="e">A DirLandReplyEventArgs object containing the
6681 data returned from the data server</param>
6682 </member>
6683 <member name="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String)">
6684 <summary>
6685 Query the data server for a list of classified ads containing the specified string.
6686 Defaults to searching for classified placed in any category, and includes PG, Adult and Mature
6687 results.
6688 Responses are sent 16 per response packet, there is no way to know how many results a query reply will contain however assuming
6689 the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
6690 The <see cref="!:OnClassifiedReply" /> event is raised when a response is received from the simulator
6691 </summary>
6692 <param name="searchText">A string containing a list of keywords to search for</param>
6693 <returns>A UUID to correlate the results when the <see cref="!:OnClassifiedReply" /> event is raised</returns>
6694 </member>
6695 <member name="M:OpenMetaverse.DirectoryManager.StartClassifiedSearch(System.String,OpenMetaverse.DirectoryManager.ClassifiedCategories,OpenMetaverse.DirectoryManager.ClassifiedQueryFlags)">
6696 <summary>
6697 Query the data server for a list of classified ads which contain specified keywords (Overload)
6698 The <see cref="!:OnClassifiedReply" /> event is raised when a response is received from the simulator
6699 </summary>
6700 <param name="searchText">A string containing a list of keywords to search for</param>
6701 <param name="category">The category to search</param>
6702 <param name="queryFlags">A set of flags which can be ORed to modify query options
6703 such as classified maturity rating.</param>
6704 <returns>A UUID to correlate the results when the <see cref="!:OnClassifiedReply" /> event is raised</returns>
6705 <example>
6706 Search classified ads containing the key words "foo" and "bar" in the "Any" category that are either PG or Mature
6707 <code>
6708 UUID searchID = StartClassifiedSearch("foo bar", ClassifiedCategories.Any, ClassifiedQueryFlags.PG | ClassifiedQueryFlags.Mature);
6709 </code></example>
6710 <remarks>
6711 Responses are sent 16 at a time, there is no way to know how many results a query reply will contain however assuming
6712 the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
6713 </remarks>
6714 </member>
6715 <member name="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,System.Int32)">
6716 <summary>
6717 Starts search for places (Overloaded)
6718 The <see cref="!:OnDirPlacesReply" /> event is raised when a response is received from the simulator
6719 </summary>
6720 <param name="searchText">Search text</param>
6721 <param name="queryStart">Each request is limited to 100 places
6722 being returned. To get the first 100 result entries of a request use 0,
6723 from 100-199 use 1, 200-299 use 2, etc.</param>
6724 <returns>A UUID to correlate the results when the <see cref="!:OnDirPlacesReply" /> event is raised</returns>
6725 </member>
6726 <member name="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.Int32)">
6727 <summary>
6728 Queries the dataserver for parcels of land which are flagged to be shown in search
6729 The <see cref="!:OnDirPlacesReply" /> event is raised when a response is received from the simulator
6730 </summary>
6731 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
6732 <param name="queryFlags">A set of flags which can be ORed to modify query options
6733 such as classified maturity rating.</param>
6734 <param name="category">The category to search</param>
6735 <param name="queryStart">Each request is limited to 100 places
6736 being returned. To get the first 100 result entries of a request use 0,
6737 from 100-199 use 1, 200-299 use 2, etc.</param>
6738 <returns>A UUID to correlate the results when the <see cref="!:OnDirPlacesReply" /> event is raised</returns>
6739 <example>
6740 Search places containing the key words "foo" and "bar" in the "Any" category that are either PG or Adult
6741 <code>
6742 UUID searchID = StartDirPlacesSearch("foo bar", DirFindFlags.DwellSort | DirFindFlags.IncludePG | DirFindFlags.IncludeAdult, ParcelCategory.Any, 0);
6743 </code></example>
6744 <remarks>
6745 Additional information on the results can be obtained by using the ParcelManager.InfoRequest method
6746 </remarks>
6747 </member>
6748 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.SearchTypeFlags)">
6749 <summary>
6750 Starts a search for land sales using the directory
6751 The <see cref="!:OnDirLandReply" /> event is raised when a response is received from the simulator
6752 </summary>
6753 <param name="typeFlags">What type of land to search for. Auction,
6754 estate, mainland, "first land", etc</param>
6755 <remarks>The OnDirLandReply event handler must be registered before
6756 calling this function. There is no way to determine how many
6757 results will be returned, or how many times the callback will be
6758 fired other than you won't get more than 100 total parcels from
6759 each query.</remarks>
6760 </member>
6761 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.SearchTypeFlags,System.Int32,System.Int32,System.Int32)">
6762 <summary>
6763 Starts a search for land sales using the directory
6764 The <seealso cref="!:OnDirLandReply" /> event is raised when a response is received from the simulator
6765 </summary>
6766 <param name="typeFlags">What type of land to search for. Auction,
6767 estate, mainland, "first land", etc</param>
6768 <param name="priceLimit">Maximum price to search for</param>
6769 <param name="areaLimit">Maximum area to search for</param>
6770 <param name="queryStart">Each request is limited to 100 parcels
6771 being returned. To get the first 100 parcels of a request use 0,
6772 from 100-199 use 1, 200-299 use 2, etc.</param>
6773 <remarks>The OnDirLandReply event handler must be registered before
6774 calling this function. There is no way to determine how many
6775 results will be returned, or how many times the callback will be
6776 fired other than you won't get more than 100 total parcels from
6777 each query.</remarks>
6778 </member>
6779 <member name="M:OpenMetaverse.DirectoryManager.StartLandSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.DirectoryManager.SearchTypeFlags,System.Int32,System.Int32,System.Int32)">
6780 <summary>
6781 Send a request to the data server for land sales listings
6782 </summary>
6783 <param name="findFlags">Flags sent to specify query options
6784 Available flags:
6785 Specify the parcel rating with one or more of the following:
6786 IncludePG IncludeMature IncludeAdult
6787 Specify the field to pre sort the results with ONLY ONE of the following:
6788 PerMeterSort NameSort AreaSort PricesSort
6789 Specify the order the results are returned in, if not specified the results are pre sorted in a Descending Order
6790 SortAsc
6791 Specify additional filters to limit the results with one or both of the following:
6792 LimitByPrice LimitByArea
6793 Flags can be combined by separating them with the | (pipe) character
6794 Additional details can be found in <see cref="T:OpenMetaverse.DirectoryManager.DirFindFlags" /></param>
6795 <param name="typeFlags">What type of land to search for. Auction,
6796 Estate or Mainland</param>
6797 <param name="priceLimit">Maximum price to search for when the
6798 DirFindFlags.LimitByPrice flag is specified in findFlags</param>
6799 <param name="areaLimit">Maximum area to search for when the
6800 DirFindFlags.LimitByArea flag is specified in findFlags</param>
6801 <param name="queryStart">Each request is limited to 100 parcels
6802 being returned. To get the first 100 parcels of a request use 0,
6803 from 100-199 use 100, 200-299 use 200, etc.</param>
6804 <remarks>
6805 <para>The <seealso cref="!:OnDirLandReply" /> event will be raised with the response from the simulator
6806 There is no way to determine how many results will be returned, or how many times the callback will be
6807 fired other than you won't get more than 100 total parcels from
6808 each reply.</para>
6809 <para>Any land set for sale to either anybody or specific to the connected agent will be included in the
6810 results if the land is included in the query</para>
6811 </remarks>
6812 <example>
6813 <code>
6814 // request all mainland, any maturity rating that is larger than 512 sq.m
6815 StartLandSearch(DirFindFlags.SortAsc | DirFindFlags.PerMeterSort | DirFindFlags.LimitByArea | DirFindFlags.IncludePG | DirFindFlags.IncludeMature | DirFindFlags.IncludeAdult, SearchTypeFlags.Mainland, 0, 512, 0);
6816 </code>
6817 </example>
6818 </member>
6819 <member name="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32)">
6820 <summary>
6821 Search for Groups
6822 </summary>
6823 <param name="searchText">The name or portion of the name of the group you wish to search for</param>
6824 <param name="queryStart">Start from the match number</param>
6825 <returns>
6826 </returns>
6827 </member>
6828 <member name="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32,OpenMetaverse.DirectoryManager.DirFindFlags)">
6829 <summary>
6830 Search for Groups
6831 </summary>
6832 <param name="searchText">The name or portion of the name of the group you wish to search for</param>
6833 <param name="queryStart">Start from the match number</param>
6834 <param name="flags">Search flags</param>
6835 <returns>
6836 </returns>
6837 </member>
6838 <member name="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)">
6839 <summary>
6840 Search the People directory for other avatars
6841 </summary>
6842 <param name="searchText">The name or portion of the name of the avatar you wish to search for</param>
6843 <param name="queryStart">
6844 </param>
6845 <returns>
6846 </returns>
6847 </member>
6848 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch">
6849 <summary>
6850 Search Places for parcels of land you personally own
6851 </summary>
6852 </member>
6853 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.UUID)">
6854 <summary>
6855 Searches Places for land owned by the specified group
6856 </summary>
6857 <param name="groupID">ID of the group you want to recieve land list for (You must be a member of the group)</param>
6858 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
6859 </member>
6860 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(System.String)">
6861 <summary>
6862 Search the Places directory for parcels that are listed in search and contain the specified keywords
6863 </summary>
6864 <param name="searchText">A string containing the keywords to search for</param>
6865 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
6866 </member>
6867 <member name="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID)">
6868 <summary>
6869 Search Places - All Options
6870 </summary>
6871 <param name="findFlags">One of the Values from the DirFindFlags struct, ie: AgentOwned, GroupOwned, etc.</param>
6872 <param name="searchCategory">One of the values from the SearchCategory Struct, ie: Any, Linden, Newcomer</param>
6873 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
6874 <param name="simulatorName">String Simulator Name to search in</param>
6875 <param name="groupID">LLUID of group you want to recieve results for</param>
6876 <param name="transactionID">Transaction (Query) ID which can be associated with results from your request.</param>
6877 <returns>Transaction (Query) ID which can be associated with results from your request.</returns>
6878 </member>
6879 <member name="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,System.UInt32)">
6880 <summary>
6881 Search All Events with specifid searchText in all categories, includes PG, Mature and Adult
6882 </summary>
6883 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
6884 <param name="queryStart">Each request is limited to 100 entries
6885 being returned. To get the first group of entries of a request use 0,
6886 from 100-199 use 100, 200-299 use 200, etc.</param>
6887 <returns>UUID of query to correlate results in callback.</returns>
6888 </member>
6889 <member name="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,System.String,System.UInt32,OpenMetaverse.DirectoryManager.EventCategories)">
6890 <summary>
6891 Search Events
6892 </summary>
6893 <param name="searchText">A string containing a list of keywords to search for separated by a space character</param>
6894 <param name="queryFlags">One or more of the following flags: DateEvents, IncludePG, IncludeMature, IncludeAdult
6895 from the <see cref="T:OpenMetaverse.DirectoryManager.DirFindFlags" /> Enum
6896 Multiple flags can be combined by separating the flags with the | (pipe) character</param>
6897 <param name="eventDay">"u" for in-progress and upcoming events, -or- number of days since/until event is scheduled
6898 For example "0" = Today, "1" = tomorrow, "2" = following day, "-1" = yesterday, etc.</param>
6899 <param name="queryStart">Each request is limited to 100 entries
6900 being returned. To get the first group of entries of a request use 0,
6901 from 100-199 use 100, 200-299 use 200, etc.</param>
6902 <param name="category">EventCategory event is listed under.</param>
6903 <returns>UUID of query to correlate results in callback.</returns>
6904 </member>
6905 <member name="M:OpenMetaverse.DirectoryManager.EventInfoRequest(System.UInt32)">
6906 <summary>Requests Event Details</summary>
6907 <param name="eventID">ID of Event returned from the <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,System.String,System.UInt32,OpenMetaverse.DirectoryManager.EventCategories)" /> method</param>
6908 </member>
6909 <member name="M:OpenMetaverse.DirectoryManager.DirClassifiedReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6910 <summary>Process an incoming packet and raise the appropriate events</summary>
6911 <param name="sender">The sender</param>
6912 <param name="e">The EventArgs object containing the packet data</param>
6913 </member>
6914 <member name="M:OpenMetaverse.DirectoryManager.DirLandReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6915 <summary>Process an incoming packet and raise the appropriate events</summary>
6916 <param name="sender">The sender</param>
6917 <param name="e">The EventArgs object containing the packet data</param>
6918 </member>
6919 <member name="M:OpenMetaverse.DirectoryManager.DirLandReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
6920 <summary>Process an incoming <see cref="T:OpenMetaverse.Messages.Linden.DirLandReplyMessage" /> event message</summary>
6921 <param name="capsKey">The Unique Capabilities Key</param>
6922 <param name="message">The <see cref="T:OpenMetaverse.Messages.Linden.DirLandReplyMessage" /> event message containing the data</param>
6923 <param name="simulator">The simulator the message originated from</param>
6924 </member>
6925 <member name="M:OpenMetaverse.DirectoryManager.DirPeopleReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6926 <summary>Process an incoming packet and raise the appropriate events</summary>
6927 <param name="sender">The sender</param>
6928 <param name="e">The EventArgs object containing the packet data</param>
6929 </member>
6930 <member name="M:OpenMetaverse.DirectoryManager.DirGroupsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6931 <summary>Process an incoming packet and raise the appropriate events</summary>
6932 <param name="sender">The sender</param>
6933 <param name="e">The EventArgs object containing the packet data</param>
6934 </member>
6935 <member name="M:OpenMetaverse.DirectoryManager.PlacesReplyEventHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
6936 <summary>Process an incoming <see cref="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage" /> event message</summary>
6937 <param name="capsKey">The Unique Capabilities Key</param>
6938 <param name="message">The <see cref="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage" /> event message containing the data</param>
6939 <param name="simulator">The simulator the message originated from</param>
6940 </member>
6941 <member name="M:OpenMetaverse.DirectoryManager.PlacesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6942 <summary>Process an incoming packet and raise the appropriate events</summary>
6943 <param name="sender">The sender</param>
6944 <param name="e">The EventArgs object containing the packet data</param>
6945 </member>
6946 <member name="M:OpenMetaverse.DirectoryManager.EventsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6947 <summary>Process an incoming packet and raise the appropriate events</summary>
6948 <param name="sender">The sender</param>
6949 <param name="e">The EventArgs object containing the packet data</param>
6950 </member>
6951 <member name="M:OpenMetaverse.DirectoryManager.EventInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6952 <summary>Process an incoming packet and raise the appropriate events</summary>
6953 <param name="sender">The sender</param>
6954 <param name="e">The EventArgs object containing the packet data</param>
6955 </member>
6956 <member name="M:OpenMetaverse.DirectoryManager.DirPlacesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
6957 <summary>Process an incoming packet and raise the appropriate events</summary>
6958 <param name="sender">The sender</param>
6959 <param name="e">The EventArgs object containing the packet data</param>
6960 </member>
6961 <member name="T:OpenMetaverse.EventInfoReplyEventArgs"> 8977 <member name="T:OpenMetaverse.EventInfoReplyEventArgs">
6962 <summary>Contains the Event data returned from the data server from an EventInfoRequest</summary> 8978 <summary>Contains the Event data returned from the data server from an EventInfoRequest</summary>
6963 </member> 8979 </member>
@@ -6975,12 +8991,12 @@
6975 </member> 8991 </member>
6976 <member name="M:OpenMetaverse.DirEventsReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.EventsSearchData})"> 8992 <member name="M:OpenMetaverse.DirEventsReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.EventsSearchData})">
6977 <summary>Construct a new instance of the DirEventsReplyEventArgs class</summary> 8993 <summary>Construct a new instance of the DirEventsReplyEventArgs class</summary>
6978 <param name="queryID">The ID of the query returned by the data server. 8994 <param name="queryID">The ID of the query returned by the data server.
6979 This will correlate to the ID returned by the <see cref="!:StartEventsSearch" /> method</param> 8995 This will correlate to the ID returned by the <see cref="!:StartEventsSearch"/> method</param>
6980 <param name="matchedEvents">A list containing the "Events" returned by the search query</param> 8996 <param name="matchedEvents">A list containing the "Events" returned by the search query</param>
6981 </member> 8997 </member>
6982 <member name="P:OpenMetaverse.DirEventsReplyEventArgs.QueryID"> 8998 <member name="P:OpenMetaverse.DirEventsReplyEventArgs.QueryID">
6983 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,System.String,System.UInt32,OpenMetaverse.DirectoryManager.EventCategories)" /></summary> 8999 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartEventsSearch(System.String,System.UInt32)"/></summary>
6984 </member> 9000 </member>
6985 <member name="P:OpenMetaverse.DirEventsReplyEventArgs.MatchedEvents"> 9001 <member name="P:OpenMetaverse.DirEventsReplyEventArgs.MatchedEvents">
6986 <summary>A list of "Events" returned by the data server</summary> 9002 <summary>A list of "Events" returned by the data server</summary>
@@ -6990,12 +9006,12 @@
6990 </member> 9006 </member>
6991 <member name="M:OpenMetaverse.PlacesReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.PlacesSearchData})"> 9007 <member name="M:OpenMetaverse.PlacesReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.PlacesSearchData})">
6992 <summary>Construct a new instance of PlacesReplyEventArgs class</summary> 9008 <summary>Construct a new instance of PlacesReplyEventArgs class</summary>
6993 <param name="queryID">The ID of the query returned by the data server. 9009 <param name="queryID">The ID of the query returned by the data server.
6994 This will correlate to the ID returned by the <see cref="!:StartPlacesSearch" /> method</param> 9010 This will correlate to the ID returned by the <see cref="!:StartPlacesSearch"/> method</param>
6995 <param name="matchedPlaces">A list containing the "Places" returned by the data server query</param> 9011 <param name="matchedPlaces">A list containing the "Places" returned by the data server query</param>
6996 </member> 9012 </member>
6997 <member name="P:OpenMetaverse.PlacesReplyEventArgs.QueryID"> 9013 <member name="P:OpenMetaverse.PlacesReplyEventArgs.QueryID">
6998 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch(OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID)" /></summary> 9014 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartPlacesSearch"/></summary>
6999 </member> 9015 </member>
7000 <member name="P:OpenMetaverse.PlacesReplyEventArgs.MatchedPlaces"> 9016 <member name="P:OpenMetaverse.PlacesReplyEventArgs.MatchedPlaces">
7001 <summary>A list of "Places" returned by the data server</summary> 9017 <summary>A list of "Places" returned by the data server</summary>
@@ -7005,12 +9021,12 @@
7005 </member> 9021 </member>
7006 <member name="M:OpenMetaverse.DirPlacesReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.DirectoryParcel})"> 9022 <member name="M:OpenMetaverse.DirPlacesReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.DirectoryParcel})">
7007 <summary>Construct a new instance of the DirPlacesReplyEventArgs class</summary> 9023 <summary>Construct a new instance of the DirPlacesReplyEventArgs class</summary>
7008 <param name="queryID">The ID of the query returned by the data server. 9024 <param name="queryID">The ID of the query returned by the data server.
7009 This will correlate to the ID returned by the <see cref="!:StartDirPlacesSearch" /> method</param> 9025 This will correlate to the ID returned by the <see cref="!:StartDirPlacesSearch"/> method</param>
7010 <param name="matchedParcels">A list containing land data returned by the data server</param> 9026 <param name="matchedParcels">A list containing land data returned by the data server</param>
7011 </member> 9027 </member>
7012 <member name="P:OpenMetaverse.DirPlacesReplyEventArgs.QueryID"> 9028 <member name="P:OpenMetaverse.DirPlacesReplyEventArgs.QueryID">
7013 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,OpenMetaverse.DirectoryManager.DirFindFlags,OpenMetaverse.ParcelCategory,System.Int32)" /></summary> 9029 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartDirPlacesSearch(System.String,System.Int32)"/></summary>
7014 </member> 9030 </member>
7015 <member name="P:OpenMetaverse.DirPlacesReplyEventArgs.MatchedParcels"> 9031 <member name="P:OpenMetaverse.DirPlacesReplyEventArgs.MatchedParcels">
7016 <summary>A list containing Places data returned by the data server</summary> 9032 <summary>A list containing Places data returned by the data server</summary>
@@ -7030,12 +9046,12 @@
7030 </member> 9046 </member>
7031 <member name="M:OpenMetaverse.DirGroupsReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.GroupSearchData})"> 9047 <member name="M:OpenMetaverse.DirGroupsReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.GroupSearchData})">
7032 <summary>Construct a new instance of the DirGroupsReplyEventArgs class</summary> 9048 <summary>Construct a new instance of the DirGroupsReplyEventArgs class</summary>
7033 <param name="queryID">The ID of the query returned by the data server. 9049 <param name="queryID">The ID of the query returned by the data server.
7034 This will correlate to the ID returned by the <see cref="!:StartGroupSearch" /> method</param> 9050 This will correlate to the ID returned by the <see cref="!:StartGroupSearch"/> method</param>
7035 <param name="matchedGroups">A list of groups data returned by the data server</param> 9051 <param name="matchedGroups">A list of groups data returned by the data server</param>
7036 </member> 9052 </member>
7037 <member name="P:OpenMetaverse.DirGroupsReplyEventArgs.QueryID"> 9053 <member name="P:OpenMetaverse.DirGroupsReplyEventArgs.QueryID">
7038 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32,OpenMetaverse.DirectoryManager.DirFindFlags)" /></summary> 9054 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartGroupSearch(System.String,System.Int32)"/></summary>
7039 </member> 9055 </member>
7040 <member name="P:OpenMetaverse.DirGroupsReplyEventArgs.MatchedGroups"> 9056 <member name="P:OpenMetaverse.DirGroupsReplyEventArgs.MatchedGroups">
7041 <summary>A list containing Groups data returned by the data server</summary> 9057 <summary>A list containing Groups data returned by the data server</summary>
@@ -7045,12 +9061,12 @@
7045 </member> 9061 </member>
7046 <member name="M:OpenMetaverse.DirPeopleReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.AgentSearchData})"> 9062 <member name="M:OpenMetaverse.DirPeopleReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.DirectoryManager.AgentSearchData})">
7047 <summary>Construct a new instance of the DirPeopleReplyEventArgs class</summary> 9063 <summary>Construct a new instance of the DirPeopleReplyEventArgs class</summary>
7048 <param name="queryID">The ID of the query returned by the data server. 9064 <param name="queryID">The ID of the query returned by the data server.
7049 This will correlate to the ID returned by the <see cref="!:StartPeopleSearch" /> method</param> 9065 This will correlate to the ID returned by the <see cref="!:StartPeopleSearch"/> method</param>
7050 <param name="matchedPeople">A list of people data returned by the data server</param> 9066 <param name="matchedPeople">A list of people data returned by the data server</param>
7051 </member> 9067 </member>
7052 <member name="P:OpenMetaverse.DirPeopleReplyEventArgs.QueryID"> 9068 <member name="P:OpenMetaverse.DirPeopleReplyEventArgs.QueryID">
7053 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)" /></summary> 9069 <summary>The ID returned by <see cref="M:OpenMetaverse.DirectoryManager.StartPeopleSearch(System.String,System.Int32)"/></summary>
7054 </member> 9070 </member>
7055 <member name="P:OpenMetaverse.DirPeopleReplyEventArgs.MatchedPeople"> 9071 <member name="P:OpenMetaverse.DirPeopleReplyEventArgs.MatchedPeople">
7056 <summary>A list containing People data returned by the data server</summary> 9072 <summary>A list containing People data returned by the data server</summary>
@@ -7065,732 +9081,619 @@
7065 <member name="P:OpenMetaverse.DirLandReplyEventArgs.DirParcels"> 9081 <member name="P:OpenMetaverse.DirLandReplyEventArgs.DirParcels">
7066 <summary>A list containing land forsale data returned by the data server</summary> 9082 <summary>A list containing land forsale data returned by the data server</summary>
7067 </member> 9083 </member>
7068 <member name="T:OpenMetaverse.DownloadRequest"> 9084 <member name="T:OpenMetaverse.Interfaces.IMessage">
7069 <summary> 9085 <summary>
7070 Represends individual HTTP Download request 9086 Interface requirements for Messaging system
7071 </summary> 9087 </summary>
7072 </member> 9088 </member>
7073 <member name="M:OpenMetaverse.DownloadRequest.#ctor"> 9089 <member name="F:OpenMetaverse.Imaging.ManagedImage.Width">
7074 <summary>Default constructor</summary>
7075 </member>
7076 <member name="M:OpenMetaverse.DownloadRequest.#ctor(System.Uri,System.Int32,System.String,OpenMetaverse.Http.CapsBase.DownloadProgressEventHandler,OpenMetaverse.Http.CapsBase.RequestCompletedEventHandler)">
7077 <summary>Constructor</summary>
7078 </member>
7079 <member name="F:OpenMetaverse.DownloadRequest.Address">
7080 <summary>URI of the item to fetch</summary>
7081 </member>
7082 <member name="F:OpenMetaverse.DownloadRequest.MillisecondsTimeout">
7083 <summary>Timout specified in milliseconds</summary>
7084 </member>
7085 <member name="F:OpenMetaverse.DownloadRequest.DownloadProgressCallback">
7086 <summary>Download progress callback</summary>
7087 </member>
7088 <member name="F:OpenMetaverse.DownloadRequest.CompletedCallback">
7089 <summary>Download completed callback</summary>
7090 </member>
7091 <member name="F:OpenMetaverse.DownloadRequest.ContentType">
7092 <summary>Accept the following content type</summary>
7093 </member>
7094 <member name="T:OpenMetaverse.DownloadManager">
7095 <summary> 9090 <summary>
7096 Manages async HTTP downloads with a limit on maximum 9091 Image width
7097 concurrent downloads
7098 </summary> 9092 </summary>
7099 </member> 9093 </member>
7100 <member name="M:OpenMetaverse.DownloadManager.#ctor"> 9094 <member name="F:OpenMetaverse.Imaging.ManagedImage.Height">
7101 <summary>Default constructor</summary>
7102 </member>
7103 <member name="P:OpenMetaverse.DownloadManager.ParallelDownloads">
7104 <summary>Maximum number of parallel downloads from a single endpoint</summary>
7105 </member>
7106 <member name="P:OpenMetaverse.DownloadManager.ClientCert">
7107 <summary>Client certificate</summary>
7108 </member>
7109 <member name="M:OpenMetaverse.DownloadManager.Dispose">
7110 <summary>Cleanup method</summary>
7111 </member>
7112 <member name="M:OpenMetaverse.DownloadManager.SetupRequest(System.Uri,System.String)">
7113 <summary>Setup http download request</summary>
7114 </member>
7115 <member name="M:OpenMetaverse.DownloadManager.EnqueuePending">
7116 <summary>Check the queue for pending work</summary>
7117 </member>
7118 <member name="M:OpenMetaverse.DownloadManager.QueueDownlad(OpenMetaverse.DownloadRequest)">
7119 <summary>Enqueue a new HTPP download</summary>
7120 </member>
7121 <member name="T:OpenMetaverse.EstateTask">
7122 <summary>Describes tasks returned in LandStatReply</summary>
7123 </member>
7124 <member name="T:OpenMetaverse.EstateTools">
7125 <summary> 9095 <summary>
7126 Estate level administration and utilities 9096 Image height
7127 </summary> 9097 </summary>
7128 </member> 9098 </member>
7129 <member name="M:OpenMetaverse.EstateTools.#ctor(OpenMetaverse.GridClient)"> 9099 <member name="F:OpenMetaverse.Imaging.ManagedImage.Channels">
7130 <summary> 9100 <summary>
7131 Constructor for EstateTools class 9101 Image channel flags
7132 </summary> 9102 </summary>
7133 <param name="client">
7134 </param>
7135 </member>
7136 <member name="T:OpenMetaverse.EstateTools.LandStatReportType">
7137 <summary>Used in the ReportType field of a LandStatRequest</summary>
7138 </member>
7139 <member name="T:OpenMetaverse.EstateTools.EstateAccessDelta">
7140 <summary>Used by EstateOwnerMessage packets</summary>
7141 </member> 9103 </member>
7142 <member name="T:OpenMetaverse.EstateTools.EstateAccessReplyDelta"> 9104 <member name="F:OpenMetaverse.Imaging.ManagedImage.Red">
7143 <summary>Used by EstateOwnerMessage packets</summary>
7144 </member>
7145 <member name="T:OpenMetaverse.EstateTools.EstateReturnFlags">
7146 <summary> 9105 <summary>
9106 Red channel data
7147 </summary> 9107 </summary>
7148 </member> 9108 </member>
7149 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.None"> 9109 <member name="F:OpenMetaverse.Imaging.ManagedImage.Green">
7150 <summary>No flags set</summary> 9110 <summary>
7151 </member> 9111 Green channel data
7152 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnScripted"> 9112 </summary>
7153 <summary>Only return targets scripted objects</summary>
7154 </member>
7155 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnOnOthersLand">
7156 <summary>Only return targets objects if on others land</summary>
7157 </member>
7158 <member name="F:OpenMetaverse.EstateTools.EstateReturnFlags.ReturnScriptedAndOnOthers">
7159 <summary>Returns target's scripted objects and objects on other parcels</summary>
7160 </member>
7161 <member name="T:OpenMetaverse.EstateTools.GroundTextureSettings">
7162 <summary>Ground texture settings for each corner of the region</summary>
7163 </member>
7164 <member name="T:OpenMetaverse.EstateTools.GroundTextureHeight">
7165 <summary>Used by GroundTextureHeightSettings</summary>
7166 </member>
7167 <member name="T:OpenMetaverse.EstateTools.GroundTextureHeightSettings">
7168 <summary>The high and low texture thresholds for each corner of the sim</summary>
7169 </member>
7170 <member name="F:OpenMetaverse.EstateTools.GroundTextures">
7171 <summary>Textures for each of the four terrain height levels</summary>
7172 </member>
7173 <member name="F:OpenMetaverse.EstateTools.GroundTextureLimits">
7174 <summary>Upper/lower texture boundaries for each corner of the sim</summary>
7175 </member>
7176 <member name="F:OpenMetaverse.EstateTools.m_TopCollidersReply">
7177 <summary>The event subscribers. null if no subcribers</summary>
7178 </member>
7179 <member name="F:OpenMetaverse.EstateTools.m_TopCollidersReply_Lock">
7180 <summary>Thread sync lock object</summary>
7181 </member>
7182 <member name="F:OpenMetaverse.EstateTools.m_TopScriptsReply">
7183 <summary>The event subscribers. null if no subcribers</summary>
7184 </member>
7185 <member name="F:OpenMetaverse.EstateTools.m_TopScriptsReply_Lock">
7186 <summary>Thread sync lock object</summary>
7187 </member>
7188 <member name="F:OpenMetaverse.EstateTools.m_EstateUsersReply">
7189 <summary>The event subscribers. null if no subcribers</summary>
7190 </member>
7191 <member name="F:OpenMetaverse.EstateTools.m_EstateUsersReply_Lock">
7192 <summary>Thread sync lock object</summary>
7193 </member>
7194 <member name="F:OpenMetaverse.EstateTools.m_EstateGroupsReply">
7195 <summary>The event subscribers. null if no subcribers</summary>
7196 </member>
7197 <member name="F:OpenMetaverse.EstateTools.m_EstateGroupsReply_Lock">
7198 <summary>Thread sync lock object</summary>
7199 </member>
7200 <member name="F:OpenMetaverse.EstateTools.m_EstateManagersReply">
7201 <summary>The event subscribers. null if no subcribers</summary>
7202 </member>
7203 <member name="F:OpenMetaverse.EstateTools.m_EstateManagersReply_Lock">
7204 <summary>Thread sync lock object</summary>
7205 </member>
7206 <member name="F:OpenMetaverse.EstateTools.m_EstateBansReply">
7207 <summary>The event subscribers. null if no subcribers</summary>
7208 </member>
7209 <member name="F:OpenMetaverse.EstateTools.m_EstateBansReply_Lock">
7210 <summary>Thread sync lock object</summary>
7211 </member>
7212 <member name="F:OpenMetaverse.EstateTools.m_EstateCovenantReply">
7213 <summary>The event subscribers. null if no subcribers</summary>
7214 </member>
7215 <member name="F:OpenMetaverse.EstateTools.m_EstateCovenantReply_Lock">
7216 <summary>Thread sync lock object</summary>
7217 </member>
7218 <member name="F:OpenMetaverse.EstateTools.m_EstateUpdateInfoReply">
7219 <summary>The event subscribers. null if no subcribers</summary>
7220 </member>
7221 <member name="F:OpenMetaverse.EstateTools.m_EstateUpdateInfoReply_Lock">
7222 <summary>Thread sync lock object</summary>
7223 </member>
7224 <member name="E:OpenMetaverse.EstateTools.TopCollidersReply">
7225 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary>
7226 </member>
7227 <member name="E:OpenMetaverse.EstateTools.TopScriptsReply">
7228 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary>
7229 </member>
7230 <member name="E:OpenMetaverse.EstateTools.EstateUsersReply">
7231 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary>
7232 </member>
7233 <member name="E:OpenMetaverse.EstateTools.EstateGroupsReply">
7234 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary>
7235 </member> 9113 </member>
7236 <member name="E:OpenMetaverse.EstateTools.EstateManagersReply"> 9114 <member name="F:OpenMetaverse.Imaging.ManagedImage.Blue">
7237 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary> 9115 <summary>
9116 Blue channel data
9117 </summary>
7238 </member> 9118 </member>
7239 <member name="E:OpenMetaverse.EstateTools.EstateBansReply"> 9119 <member name="F:OpenMetaverse.Imaging.ManagedImage.Alpha">
7240 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary> 9120 <summary>
9121 Alpha channel data
9122 </summary>
7241 </member> 9123 </member>
7242 <member name="E:OpenMetaverse.EstateTools.EstateCovenantReply"> 9124 <member name="F:OpenMetaverse.Imaging.ManagedImage.Bump">
7243 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary> 9125 <summary>
9126 Bump channel data
9127 </summary>
7244 </member> 9128 </member>
7245 <member name="E:OpenMetaverse.EstateTools.EstateUpdateInfoReply"> 9129 <member name="M:OpenMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,OpenMetaverse.Imaging.ManagedImage.ImageChannels)">
7246 <summary>Raised when the data server responds to a <see cref="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)" /> request.</summary> 9130 <summary>
9131 Create a new blank image
9132 </summary>
9133 <param name="width">width</param>
9134 <param name="height">height</param>
9135 <param name="channels">channel flags</param>
7247 </member> 9136 </member>
7248 <member name="M:OpenMetaverse.EstateTools.OnTopCollidersReply(OpenMetaverse.TopCollidersReplyEventArgs)"> 9137 <member name="M:OpenMetaverse.Imaging.ManagedImage.#ctor(System.Drawing.Bitmap)">
7249 <summary>Raises the TopCollidersReply event</summary> 9138 <summary>
7250 <param name="e">A TopCollidersReplyEventArgs object containing the 9139
7251 data returned from the data server</param> 9140 </summary>
9141 <param name="bitmap"></param>
7252 </member> 9142 </member>
7253 <member name="M:OpenMetaverse.EstateTools.OnTopScriptsReply(OpenMetaverse.TopScriptsReplyEventArgs)"> 9143 <member name="M:OpenMetaverse.Imaging.ManagedImage.ConvertChannels(OpenMetaverse.Imaging.ManagedImage.ImageChannels)">
7254 <summary>Raises the TopScriptsReply event</summary> 9144 <summary>
7255 <param name="e">A TopScriptsReplyEventArgs object containing the 9145 Convert the channels in the image. Channels are created or destroyed as required.
7256 data returned from the data server</param> 9146 </summary>
9147 <param name="channels">new channel flags</param>
7257 </member> 9148 </member>
7258 <member name="M:OpenMetaverse.EstateTools.OnEstateUsersReply(OpenMetaverse.EstateUsersReplyEventArgs)"> 9149 <member name="M:OpenMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)">
7259 <summary>Raises the EstateUsersReply event</summary> 9150 <summary>
7260 <param name="e">A EstateUsersReplyEventArgs object containing the 9151 Resize or stretch the image using nearest neighbor (ugly) resampling
7261 data returned from the data server</param> 9152 </summary>
9153 <param name="width">new width</param>
9154 <param name="height">new height</param>
7262 </member> 9155 </member>
7263 <member name="M:OpenMetaverse.EstateTools.OnEstateGroupsReply(OpenMetaverse.EstateGroupsReplyEventArgs)"> 9156 <member name="M:OpenMetaverse.Imaging.ManagedImage.ExportRaw">
7264 <summary>Raises the EstateGroupsReply event</summary> 9157 <summary>
7265 <param name="e">A EstateGroupsReplyEventArgs object containing the 9158 Create a byte array containing 32-bit RGBA data with a bottom-left
7266 data returned from the data server</param> 9159 origin, suitable for feeding directly into OpenGL
9160 </summary>
9161 <returns>A byte array containing raw texture data</returns>
7267 </member> 9162 </member>
7268 <member name="M:OpenMetaverse.EstateTools.OnEstateManagersReply(OpenMetaverse.EstateManagersReplyEventArgs)"> 9163 <member name="T:OpenMetaverse.Assets.AssetMutable">
7269 <summary>Raises the EstateManagersReply event</summary> 9164 <summary>
7270 <param name="e">A EstateManagersReplyEventArgs object containing the 9165 Represents an Animation
7271 data returned from the data server</param> 9166 </summary>
7272 </member> 9167 </member>
7273 <member name="M:OpenMetaverse.EstateTools.OnEstateBansReply(OpenMetaverse.EstateBansReplyEventArgs)"> 9168 <member name="M:OpenMetaverse.Assets.AssetMutable.#ctor(OpenMetaverse.AssetType)">
7274 <summary>Raises the EstateBansReply event</summary> 9169 <summary>Default Constructor</summary>
7275 <param name="e">A EstateBansReplyEventArgs object containing the
7276 data returned from the data server</param>
7277 </member> 9170 </member>
7278 <member name="M:OpenMetaverse.EstateTools.OnEstateCovenantReply(OpenMetaverse.EstateCovenantReplyEventArgs)"> 9171 <member name="M:OpenMetaverse.Assets.AssetMutable.#ctor(OpenMetaverse.AssetType,OpenMetaverse.UUID,System.Byte[])">
7279 <summary>Raises the EstateCovenantReply event</summary> 9172 <summary>
7280 <param name="e">A EstateCovenantReplyEventArgs object containing the 9173 Construct an Asset object of type Animation
7281 data returned from the data server</param> 9174 </summary>
9175 <param name="type">Asset type</param>
9176 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
9177 <param name="assetData">A byte array containing the raw asset data</param>
7282 </member> 9178 </member>
7283 <member name="M:OpenMetaverse.EstateTools.OnEstateUpdateInfoReply(OpenMetaverse.EstateUpdateInfoReplyEventArgs)"> 9179 <member name="P:OpenMetaverse.Assets.AssetMutable.AssetType">
7284 <summary>Raises the EstateUpdateInfoReply event</summary> 9180 <summary>Override the base classes AssetType</summary>
7285 <param name="e">A EstateUpdateInfoReplyEventArgs object containing the
7286 data returned from the data server</param>
7287 </member> 9181 </member>
7288 <member name="M:OpenMetaverse.EstateTools.LandStatRequest(System.Int32,OpenMetaverse.EstateTools.LandStatReportType,System.UInt32,System.String)"> 9182 <member name="T:OpenMetaverse.Assets.AssetLandmark">
7289 <summary> 9183 <summary>
7290 Requests estate information such as top scripts and colliders 9184 Represents a Landmark with RegionID and Position vector
7291 </summary> 9185 </summary>
7292 <param name="parcelLocalID">
7293 </param>
7294 <param name="reportType">
7295 </param>
7296 <param name="requestFlags">
7297 </param>
7298 <param name="filter">
7299 </param>
7300 </member> 9186 </member>
7301 <member name="M:OpenMetaverse.EstateTools.RequestInfo"> 9187 <member name="F:OpenMetaverse.Assets.AssetLandmark.RegionID">
7302 <summary>Requests estate settings, including estate manager and access/ban lists</summary> 9188 <summary>UUID of the Landmark target region</summary>
7303 </member> 9189 </member>
7304 <member name="M:OpenMetaverse.EstateTools.RequestTopScripts"> 9190 <member name="F:OpenMetaverse.Assets.AssetLandmark.Position">
7305 <summary>Requests the "Top Scripts" list for the current region</summary> 9191 <summary> Local position of the target </summary>
7306 </member> 9192 </member>
7307 <member name="M:OpenMetaverse.EstateTools.RequestTopColliders"> 9193 <member name="M:OpenMetaverse.Assets.AssetLandmark.#ctor">
7308 <summary>Requests the "Top Colliders" list for the current region</summary> 9194 <summary>Construct an Asset of type Landmark</summary>
7309 </member> 9195 </member>
7310 <member name="M:OpenMetaverse.EstateTools.SetTerrainVariables(System.Single,System.Single,System.Single,System.Boolean,System.Boolean,System.Single)"> 9196 <member name="M:OpenMetaverse.Assets.AssetLandmark.#ctor(OpenMetaverse.UUID,System.Byte[])">
7311 <summary> 9197 <summary>
7312 Set several estate specific configuration variables 9198 Construct an Asset object of type Landmark
7313 </summary> 9199 </summary>
7314 <param name="WaterHeight">The Height of the waterlevel over the entire estate. Defaults to 20</param> 9200 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
7315 <param name="TerrainRaiseLimit">The maximum height change allowed above the baked terrain. Defaults to 4</param> 9201 <param name="assetData">A byte array containing the raw asset data</param>
7316 <param name="TerrainLowerLimit">The minimum height change allowed below the baked terrain. Defaults to -4</param>
7317 <param name="UseEstateSun">true to use</param>
7318 <param name="FixedSun">if True forces the sun position to the position in SunPosition</param>
7319 <param name="SunPosition">The current position of the sun on the estate, or when FixedSun is true the static position
7320 the sun will remain. <remarks>6.0 = Sunrise, 30.0 = Sunset</remarks></param>
7321 </member> 9202 </member>
7322 <member name="M:OpenMetaverse.EstateTools.SimWideReturn(OpenMetaverse.UUID,OpenMetaverse.EstateTools.EstateReturnFlags,System.Boolean)"> 9203 <member name="M:OpenMetaverse.Assets.AssetLandmark.Encode">
7323 <summary> 9204 <summary>
7324 Request return of objects owned by specified avatar 9205 Encode the raw contents of a string with the specific Landmark format
7325 </summary> 9206 </summary>
7326 <param name="Target">The Agents <see cref="T:OpenMetaverse.UUID" /> owning the primitives to return</param>
7327 <param name="flag">specify the coverage and type of objects to be included in the return</param>
7328 <param name="EstateWide">true to perform return on entire estate</param>
7329 </member> 9207 </member>
7330 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessage(System.String,System.String)"> 9208 <member name="M:OpenMetaverse.Assets.AssetLandmark.Decode">
7331 <summary> 9209 <summary>
9210 Decode the raw asset data, populating the RegionID and Position
7332 </summary> 9211 </summary>
7333 <param name="method"> 9212 <returns>true if the AssetData was successfully decoded to a UUID and Vector</returns>
7334 </param>
7335 <param name="param">
7336 </param>
7337 </member> 9213 </member>
7338 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessage(System.String,System.Collections.Generic.List{System.String})"> 9214 <member name="P:OpenMetaverse.Assets.AssetLandmark.AssetType">
9215 <summary>Override the base classes AssetType</summary>
9216 </member>
9217 <member name="T:ThreadUtil">
7339 <summary> 9218 <summary>
7340 Used for setting and retrieving various estate panel settings 9219
7341 </summary> 9220 </summary>
7342 <param name="method">EstateOwnerMessage Method field</param>
7343 <param name="listParams">List of parameters to include</param>
7344 </member> 9221 </member>
7345 <member name="M:OpenMetaverse.EstateTools.KickUser(OpenMetaverse.UUID)"> 9222 <member name="F:ThreadUtil.wrapperInstance">
7346 <summary> 9223 <summary>
7347 Kick an avatar from an estate 9224 An instance of DelegateWrapper which calls InvokeWrappedDelegate,
9225 which in turn calls the DynamicInvoke method of the wrapped
9226 delegate
7348 </summary> 9227 </summary>
7349 <param name="userID">Key of Agent to remove</param>
7350 </member> 9228 </member>
7351 <member name="M:OpenMetaverse.EstateTools.BanUser(OpenMetaverse.UUID,System.Boolean)"> 9229 <member name="F:ThreadUtil.callback">
7352 <summary> 9230 <summary>
7353 Ban an avatar from an estate</summary> 9231 Callback used to call EndInvoke on the asynchronously
7354 <param name="userID">Key of Agent to remove</param> 9232 invoked DelegateWrapper
7355 <param name="allEstates">Ban user from this estate and all others owned by the estate owner</param> 9233 </summary>
7356 </member> 9234 </member>
7357 <member name="M:OpenMetaverse.EstateTools.UnbanUser(OpenMetaverse.UUID,System.Boolean)"> 9235 <member name="M:ThreadUtil.FireAndForget(System.Delegate,System.Object[])">
7358 <summary>Unban an avatar from an estate</summary>
7359 <param name="userID">Key of Agent to remove</param>
7360 /// <param name="allEstates">Unban user from this estate and all others owned by the estate owner</param></member>
7361 <member name="M:OpenMetaverse.EstateTools.EstateMessage(System.String)">
7362 <summary> 9236 <summary>
7363 Send a message dialog to everyone in an entire estate 9237 Executes the specified delegate with the specified arguments
9238 asynchronously on a thread pool thread
7364 </summary> 9239 </summary>
7365 <param name="message">Message to send all users in the estate</param> 9240 <param name="d"></param>
9241 <param name="args"></param>
7366 </member> 9242 </member>
7367 <member name="M:OpenMetaverse.EstateTools.SimulatorMessage(System.String)"> 9243 <member name="M:ThreadUtil.InvokeWrappedDelegate(System.Delegate,System.Object[])">
7368 <summary> 9244 <summary>
7369 Send a message dialog to everyone in a simulator 9245 Invokes the wrapped delegate synchronously
7370 </summary> 9246 </summary>
7371 <param name="message">Message to send all users in the simulator</param> 9247 <param name="d"></param>
9248 <param name="args"></param>
7372 </member> 9249 </member>
7373 <member name="M:OpenMetaverse.EstateTools.TeleportHomeUser(OpenMetaverse.UUID)"> 9250 <member name="M:ThreadUtil.EndWrapperInvoke(System.IAsyncResult)">
7374 <summary> 9251 <summary>
7375 Send an avatar back to their home location 9252 Calls EndInvoke on the wrapper and Close on the resulting WaitHandle
9253 to prevent resource leaks
7376 </summary> 9254 </summary>
7377 <param name="pest">Key of avatar to send home</param> 9255 <param name="ar"></param>
7378 </member> 9256 </member>
7379 <member name="M:OpenMetaverse.EstateTools.RestartRegion"> 9257 <member name="T:ThreadUtil.DelegateWrapper">
7380 <summary> 9258 <summary>
7381 Begin the region restart process 9259 Delegate to wrap another delegate and its arguments
7382 </summary> 9260 </summary>
9261 <param name="d"></param>
9262 <param name="args"></param>
7383 </member> 9263 </member>
7384 <member name="M:OpenMetaverse.EstateTools.CancelRestart"> 9264 <member name="T:OpenMetaverse.TextureRequestState">
7385 <summary> 9265 <summary>
7386 Cancels a region restart 9266 The current status of a texture request as it moves through the pipeline or final result of a texture request.
7387 </summary> 9267 </summary>
7388 </member> 9268 </member>
7389 <member name="M:OpenMetaverse.EstateTools.SetRegionInfo(System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Single,System.Single,System.Boolean)"> 9269 <member name="F:OpenMetaverse.TextureRequestState.Pending">
7390 <summary>Estate panel "Region" tab settings</summary> 9270 <summary>The initial state given to a request. Requests in this state
9271 are waiting for an available slot in the pipeline</summary>
7391 </member> 9272 </member>
7392 <member name="M:OpenMetaverse.EstateTools.SetRegionDebug(System.Boolean,System.Boolean,System.Boolean)"> 9273 <member name="F:OpenMetaverse.TextureRequestState.Started">
7393 <summary>Estate panel "Debug" tab settings</summary> 9274 <summary>A request that has been added to the pipeline and the request packet
9275 has been sent to the simulator</summary>
7394 </member> 9276 </member>
7395 <member name="M:OpenMetaverse.EstateTools.SetRegionTerrain(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)"> 9277 <member name="F:OpenMetaverse.TextureRequestState.Progress">
7396 <summary>Used for setting the region's terrain textures for its four height levels</summary> 9278 <summary>A request that has received one or more packets back from the simulator</summary>
7397 <param name="low">
7398 </param>
7399 <param name="midLow">
7400 </param>
7401 <param name="midHigh">
7402 </param>
7403 <param name="high">
7404 </param>
7405 </member> 9279 </member>
7406 <member name="M:OpenMetaverse.EstateTools.SetRegionTerrainHeights(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)"> 9280 <member name="F:OpenMetaverse.TextureRequestState.Finished">
7407 <summary>Used for setting sim terrain texture heights</summary> 9281 <summary>A request that has received all packets back from the simulator</summary>
7408 </member> 9282 </member>
7409 <member name="M:OpenMetaverse.EstateTools.RequestCovenant"> 9283 <member name="F:OpenMetaverse.TextureRequestState.Timeout">
7410 <summary>Requests the estate covenant</summary> 9284 <summary>A request that has taken longer than <seealso cref="F:OpenMetaverse.Settings.PIPELINE_REQUEST_TIMEOUT"/>
9285 to download OR the initial packet containing the packet information was never received</summary>
7411 </member> 9286 </member>
7412 <member name="M:OpenMetaverse.EstateTools.UploadTerrain(System.Byte[],System.String)"> 9287 <member name="F:OpenMetaverse.TextureRequestState.Aborted">
7413 <summary> 9288 <summary>The texture request was aborted by request of the agent</summary>
7414 Upload a terrain RAW file
7415 </summary>
7416 <param name="fileData">A byte array containing the encoded terrain data</param>
7417 <param name="fileName">The name of the file being uploaded</param>
7418 <returns>The Id of the transfer request</returns>
7419 </member> 9289 </member>
7420 <member name="M:OpenMetaverse.EstateTools.TeleportHomeAllUsers"> 9290 <member name="F:OpenMetaverse.TextureRequestState.NotFound">
7421 <summary> 9291 <summary>The simulator replied to the request that it was not able to find the requested texture</summary>
7422 Teleports all users home in current Estate
7423 </summary>
7424 </member> 9292 </member>
7425 <member name="M:OpenMetaverse.EstateTools.RemoveEstateManager(OpenMetaverse.UUID,System.Boolean)"> 9293 <member name="T:OpenMetaverse.TextureDownloadCallback">
7426 <summary> 9294 <summary>
7427 Remove estate manager</summary> 9295 A callback fired to indicate the status or final state of the requested texture. For progressive
7428 <param name="userID">Key of Agent to Remove</param> 9296 downloads this will fire each time new asset data is returned from the simulator.
7429 <param name="allEstates">removes manager to this estate and all others owned by the estate owner</param> 9297 </summary>
9298 <param name="state">The <see cref="T:OpenMetaverse.TextureRequestState"/> indicating either Progress for textures not fully downloaded,
9299 or the final result of the request after it has been processed through the TexturePipeline</param>
9300 <param name="assetTexture">The <see cref="T:OpenMetaverse.Assets.AssetTexture"/> object containing the Assets ID, raw data
9301 and other information. For progressive rendering the <see cref="F:OpenMetaverse.Assets.Asset.AssetData"/> will contain
9302 the data from the beginning of the file. For failed, aborted and timed out requests it will contain
9303 an empty byte array.</param>
7430 </member> 9304 </member>
7431 <member name="M:OpenMetaverse.EstateTools.AddEstateManager(OpenMetaverse.UUID,System.Boolean)"> 9305 <member name="T:OpenMetaverse.TexturePipeline">
7432 <summary> 9306 <summary>
7433 Add estate manager</summary> 9307 Texture request download handler, allows a configurable number of download slots which manage multiple
7434 <param name="userID">Key of Agent to Add</param> 9308 concurrent texture downloads from the <seealso cref="T:OpenMetaverse.Simulator"/>
7435 <param name="allEstates">Add agent as manager to this estate and all others owned by the estate owner</param> 9309 </summary>
9310 <remarks>This class makes full use of the internal <seealso cref="!:TextureCache"/>
9311 system for full texture downloads.</remarks>
7436 </member> 9312 </member>
7437 <member name="M:OpenMetaverse.EstateTools.AddAllowedUser(OpenMetaverse.UUID,System.Boolean)"> 9313 <member name="F:OpenMetaverse.TexturePipeline._Transfers">
7438 <summary> 9314 <summary>A dictionary containing all pending and in-process transfer requests where the Key is both the RequestID
7439 Add's an agent to the estate Allowed list</summary> 9315 and also the Asset Texture ID, and the value is an object containing the current state of the request and also
7440 <param name="userID">Key of Agent to Add</param> 9316 the asset data as it is being re-assembled</summary>
7441 <param name="allEstates">Add agent as an allowed reisdent to All estates if true</param>
7442 </member> 9317 </member>
7443 <member name="M:OpenMetaverse.EstateTools.RemoveAllowedUser(OpenMetaverse.UUID,System.Boolean)"> 9318 <member name="F:OpenMetaverse.TexturePipeline._Client">
7444 <summary> 9319 <summary>Holds the reference to the <see cref="T:OpenMetaverse.GridClient"/> client object</summary>
7445 Removes an agent from the estate Allowed list</summary>
7446 <param name="userID">Key of Agent to Remove</param>
7447 <param name="allEstates">Removes agent as an allowed reisdent from All estates if true</param>
7448 </member> 9320 </member>
7449 <member name="M:OpenMetaverse.EstateTools.AddAllowedGroup(OpenMetaverse.UUID,System.Boolean)"> 9321 <member name="F:OpenMetaverse.TexturePipeline.maxTextureRequests">
7450 <summary> 9322 <summary>Maximum concurrent texture requests allowed at a time</summary>
7451 Add's a group to the estate Allowed list</summary>
7452 <param name="groupID">Key of Group to Add</param>
7453 <param name="allEstates">Add Group as an allowed group to All estates if true</param>
7454 </member> 9323 </member>
7455 <member name="M:OpenMetaverse.EstateTools.RemoveAllowedGroup(OpenMetaverse.UUID,System.Boolean)"> 9324 <member name="F:OpenMetaverse.TexturePipeline.resetEvents">
7456 <summary> 9325 <summary>An array of <see cref="T:System.Threading.AutoResetEvent"/> objects used to manage worker request threads</summary>
7457 Removes a group from the estate Allowed list</summary>
7458 <param name="groupID">Key of Group to Remove</param>
7459 <param name="allEstates">Removes Group as an allowed Group from All estates if true</param>
7460 </member> 9326 </member>
7461 <member name="M:OpenMetaverse.EstateTools.EstateCovenantReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 9327 <member name="F:OpenMetaverse.TexturePipeline.threadpoolSlots">
7462 <summary>Process an incoming packet and raise the appropriate events</summary> 9328 <summary>An array of worker slots which shows the availablity status of the slot</summary>
7463 <param name="sender">The sender</param>
7464 <param name="e">The EventArgs object containing the packet data</param>
7465 </member> 9329 </member>
7466 <member name="M:OpenMetaverse.EstateTools.EstateOwnerMessageHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 9330 <member name="F:OpenMetaverse.TexturePipeline.downloadMaster">
7467 <summary>Process an incoming packet and raise the appropriate events</summary> 9331 <summary>The primary thread which manages the requests.</summary>
7468 <param name="sender">The sender</param>
7469 <param name="e">The EventArgs object containing the packet data</param>
7470 </member> 9332 </member>
7471 <member name="M:OpenMetaverse.EstateTools.LandStatReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 9333 <member name="F:OpenMetaverse.TexturePipeline._Running">
7472 <summary>Process an incoming packet and raise the appropriate events</summary> 9334 <summary>true if the TexturePipeline is currently running</summary>
7473 <param name="sender">The sender</param>
7474 <param name="e">The EventArgs object containing the packet data</param>
7475 </member> 9335 </member>
7476 <member name="T:OpenMetaverse.TopCollidersReplyEventArgs"> 9336 <member name="F:OpenMetaverse.TexturePipeline.lockerObject">
7477 <summary>Raised on LandStatReply when the report type is for "top colliders"</summary> 9337 <summary>A synchronization object used by the primary thread</summary>
7478 </member> 9338 </member>
7479 <member name="M:OpenMetaverse.TopCollidersReplyEventArgs.#ctor(System.Int32,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.EstateTask})"> 9339 <member name="F:OpenMetaverse.TexturePipeline.RefreshDownloadsTimer">
7480 <summary>Construct a new instance of the TopCollidersReplyEventArgs class</summary> 9340 <summary>A refresh timer used to increase the priority of stalled requests</summary>
7481 <param name="objectCount">The number of returned items in LandStatReply</param>
7482 <param name="tasks">Dictionary of Object UUIDs to tasks returned in LandStatReply</param>
7483 </member> 9341 </member>
7484 <member name="P:OpenMetaverse.TopCollidersReplyEventArgs.ObjectCount"> 9342 <member name="M:OpenMetaverse.TexturePipeline.#ctor(OpenMetaverse.GridClient)">
7485 <summary> 9343 <summary>
7486 The number of returned items in LandStatReply 9344 Default constructor, Instantiates a new copy of the TexturePipeline class
7487 </summary> 9345 </summary>
9346 <param name="client">Reference to the instantiated <see cref="T:OpenMetaverse.GridClient"/> object</param>
7488 </member> 9347 </member>
7489 <member name="P:OpenMetaverse.TopCollidersReplyEventArgs.Tasks"> 9348 <member name="M:OpenMetaverse.TexturePipeline.Startup">
7490 <summary> 9349 <summary>
7491 A Dictionary of Object UUIDs to tasks returned in LandStatReply 9350 Initialize callbacks required for the TexturePipeline to operate
7492 </summary> 9351 </summary>
7493 </member> 9352 </member>
7494 <member name="T:OpenMetaverse.TopScriptsReplyEventArgs"> 9353 <member name="M:OpenMetaverse.TexturePipeline.Shutdown">
7495 <summary>Raised on LandStatReply when the report type is for "top Scripts"</summary>
7496 </member>
7497 <member name="M:OpenMetaverse.TopScriptsReplyEventArgs.#ctor(System.Int32,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.EstateTask})">
7498 <summary>Construct a new instance of the TopScriptsReplyEventArgs class</summary>
7499 <param name="objectCount">The number of returned items in LandStatReply</param>
7500 <param name="tasks">Dictionary of Object UUIDs to tasks returned in LandStatReply</param>
7501 </member>
7502 <member name="P:OpenMetaverse.TopScriptsReplyEventArgs.ObjectCount">
7503 <summary> 9354 <summary>
7504 The number of scripts returned in LandStatReply 9355 Shutdown the TexturePipeline and cleanup any callbacks or transfers
7505 </summary> 9356 </summary>
7506 </member> 9357 </member>
7507 <member name="P:OpenMetaverse.TopScriptsReplyEventArgs.Tasks"> 9358 <member name="M:OpenMetaverse.TexturePipeline.RequestTexture(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32,OpenMetaverse.TextureDownloadCallback,System.Boolean)">
7508 <summary> 9359 <summary>
7509 A Dictionary of Object UUIDs to tasks returned in LandStatReply 9360 Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline"/> system to
9361 manage the requests and re-assemble the image from the packets received from the simulator
7510 </summary> 9362 </summary>
9363 <param name="textureID">The <see cref="T:OpenMetaverse.UUID"/> of the texture asset to download</param>
9364 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType"/> of the texture asset.
9365 Use <see cref="F:OpenMetaverse.ImageType.Normal"/> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked"/> for baked layer texture assets</param>
9366 <param name="priority">A float indicating the requested priority for the transfer. Higher priority values tell the simulator
9367 to prioritize the request before lower valued requests. An image already being transferred using the <see cref="T:OpenMetaverse.TexturePipeline"/> can have
9368 its priority changed by resending the request with the new priority value</param>
9369 <param name="discardLevel">Number of quality layers to discard.
9370 This controls the end marker of the data sent</param>
9371 <param name="packetStart">The packet number to begin the request at. A value of 0 begins the request
9372 from the start of the asset texture</param>
9373 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback"/> callback to fire when the image is retrieved. The callback
9374 will contain the result of the request and the texture asset data</param>
9375 <param name="progressive">If true, the callback will be fired for each chunk of the downloaded image.
9376 The callback asset parameter will contain all previously received chunks of the texture asset starting
9377 from the beginning of the request</param>
7511 </member> 9378 </member>
7512 <member name="T:OpenMetaverse.EstateBansReplyEventArgs"> 9379 <member name="M:OpenMetaverse.TexturePipeline.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32)">
7513 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
7514 </member>
7515 <member name="M:OpenMetaverse.EstateBansReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
7516 <summary>Construct a new instance of the EstateBansReplyEventArgs class</summary>
7517 <param name="estateID">The estate's identifier on the grid</param>
7518 <param name="count">The number of returned items in LandStatReply</param>
7519 <param name="banned">User UUIDs banned</param>
7520 </member>
7521 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.EstateID">
7522 <summary> 9380 <summary>
7523 The identifier of the estate 9381 Sends the actual request packet to the simulator
7524 </summary> 9382 </summary>
9383 <param name="imageID">The image to download</param>
9384 <param name="type">Type of the image to download, either a baked
9385 avatar texture or a normal texture</param>
9386 <param name="priority">Priority level of the download. Default is
9387 <c>1,013,000.0f</c></param>
9388 <param name="discardLevel">Number of quality layers to discard.
9389 This controls the end marker of the data sent</param>
9390 <param name="packetNum">Packet number to start the download at.
9391 This controls the start marker of the data sent</param>
9392 <remarks>Sending a priority of 0 and a discardlevel of -1 aborts
9393 download</remarks>
7525 </member> 9394 </member>
7526 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.Count"> 9395 <member name="M:OpenMetaverse.TexturePipeline.AbortTextureRequest(OpenMetaverse.UUID)">
7527 <summary> 9396 <summary>
7528 The number of returned itmes 9397 Cancel a pending or in process texture request
7529 </summary> 9398 </summary>
9399 <param name="textureID">The texture assets unique ID</param>
7530 </member> 9400 </member>
7531 <member name="P:OpenMetaverse.EstateBansReplyEventArgs.Banned"> 9401 <member name="M:OpenMetaverse.TexturePipeline.DownloadThread">
7532 <summary> 9402 <summary>
7533 List of UUIDs of Banned Users 9403 Master Download Thread, Queues up downloads in the threadpool
7534 </summary> 9404 </summary>
7535 </member> 9405 </member>
7536 <member name="T:OpenMetaverse.EstateUsersReplyEventArgs"> 9406 <member name="M:OpenMetaverse.TexturePipeline.TextureRequestDoWork(System.Object)">
7537 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary> 9407 <summary>
9408 The worker thread that sends the request and handles timeouts
9409 </summary>
9410 <param name="threadContext">A <see cref="T:OpenMetaverse.TexturePipeline.TaskInfo"/> object containing the request details</param>
7538 </member> 9411 </member>
7539 <member name="M:OpenMetaverse.EstateUsersReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})"> 9412 <member name="M:OpenMetaverse.TexturePipeline.ImageNotInDatabaseHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
7540 <summary>Construct a new instance of the EstateUsersReplyEventArgs class</summary> 9413 <summary>
7541 <param name="estateID">The estate's identifier on the grid</param> 9414 Handle responses from the simulator that tell us a texture we have requested is unable to be located
7542 <param name="count">The number of users</param> 9415 or no longer exists. This will remove the request from the pipeline and free up a slot if one is in use
7543 <param name="allowedUsers">Allowed users UUIDs</param> 9416 </summary>
9417 <param name="sender">The sender</param>
9418 <param name="e">The EventArgs object containing the packet data</param>
7544 </member> 9419 </member>
7545 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.EstateID"> 9420 <member name="M:OpenMetaverse.TexturePipeline.ImagePacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
7546 <summary> 9421 <summary>
7547 The identifier of the estate 9422 Handles the remaining Image data that did not fit in the initial ImageData packet
7548 </summary> 9423 </summary>
9424 <param name="sender">The sender</param>
9425 <param name="e">The EventArgs object containing the packet data</param>
7549 </member> 9426 </member>
7550 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.Count"> 9427 <member name="M:OpenMetaverse.TexturePipeline.ImageDataHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
7551 <summary> 9428 <summary>
7552 The number of returned items 9429 Handle the initial ImageDataPacket sent from the simulator
7553 </summary> 9430 </summary>
9431 <param name="sender">The sender</param>
9432 <param name="e">The EventArgs object containing the packet data</param>
7554 </member> 9433 </member>
7555 <member name="P:OpenMetaverse.EstateUsersReplyEventArgs.AllowedUsers"> 9434 <member name="P:OpenMetaverse.TexturePipeline.TransferCount">
9435 <summary>Current number of pending and in-process transfers</summary>
9436 </member>
9437 <member name="T:OpenMetaverse.TexturePipeline.TaskInfo">
7556 <summary> 9438 <summary>
7557 List of UUIDs of Allowed Users 9439 A request task containing information and status of a request as it is processed through the <see cref="T:OpenMetaverse.TexturePipeline"/>
7558 </summary> 9440 </summary>
7559 </member> 9441 </member>
7560 <member name="T:OpenMetaverse.EstateGroupsReplyEventArgs"> 9442 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.State">
7561 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary> 9443 <summary>The current <seealso cref="T:OpenMetaverse.TextureRequestState"/> which identifies the current status of the request</summary>
7562 </member> 9444 </member>
7563 <member name="M:OpenMetaverse.EstateGroupsReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})"> 9445 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.RequestID">
7564 <summary>Construct a new instance of the EstateGroupsReplyEventArgs class</summary> 9446 <summary>The Unique Request ID, This is also the Asset ID of the texture being requested</summary>
7565 <param name="estateID">The estate's identifier on the grid</param>
7566 <param name="count">The number of Groups</param>
7567 <param name="allowedGroups">Allowed Groups UUIDs</param>
7568 </member> 9447 </member>
7569 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.EstateID"> 9448 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.RequestSlot">
9449 <summary>The slot this request is occupying in the threadpoolSlots array</summary>
9450 </member>
9451 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Type">
9452 <summary>The ImageType of the request.</summary>
9453 </member>
9454 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Callbacks">
9455 <summary>The callback to fire when the request is complete, will include
9456 the <seealso cref="T:OpenMetaverse.TextureRequestState"/> and the <see cref="T:OpenMetaverse.Assets.AssetTexture"/>
9457 object containing the result data</summary>
9458 </member>
9459 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.ReportProgress">
9460 <summary>If true, indicates the callback will be fired whenever new data is returned from the simulator.
9461 This is used to progressively render textures as portions of the texture are received.</summary>
9462 </member>
9463 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Transfer">
9464 <summary>An object that maintains the data of an request thats in-process.</summary>
9465 </member>
9466 <member name="F:OpenMetaverse.UDPPacketBuffer.BUFFER_SIZE">
9467 <summary>Size of the byte array used to store raw packet data</summary>
9468 </member>
9469 <member name="F:OpenMetaverse.UDPPacketBuffer.Data">
9470 <summary>Raw packet data buffer</summary>
9471 </member>
9472 <member name="F:OpenMetaverse.UDPPacketBuffer.DataLength">
9473 <summary>Length of the data to transmit</summary>
9474 </member>
9475 <member name="F:OpenMetaverse.UDPPacketBuffer.RemoteEndPoint">
9476 <summary>EndPoint of the remote host</summary>
9477 </member>
9478 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor">
7570 <summary> 9479 <summary>
7571 The identifier of the estate 9480 Create an allocated UDP packet buffer for receiving a packet
7572 </summary> 9481 </summary>
7573 </member> 9482 </member>
7574 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.Count"> 9483 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor(System.Net.IPEndPoint)">
7575 <summary> 9484 <summary>
7576 The number of returned items 9485 Create an allocated UDP packet buffer for sending a packet
7577 </summary> 9486 </summary>
9487 <param name="endPoint">EndPoint of the remote host</param>
7578 </member> 9488 </member>
7579 <member name="P:OpenMetaverse.EstateGroupsReplyEventArgs.AllowedGroups"> 9489 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor(System.Net.IPEndPoint,System.Int32)">
7580 <summary> 9490 <summary>
7581 List of UUIDs of Allowed Groups 9491 Create an allocated UDP packet buffer for sending a packet
7582 </summary> 9492 </summary>
9493 <param name="endPoint">EndPoint of the remote host</param>
9494 <param name="bufferSize">Size of the buffer to allocate for packet data</param>
7583 </member> 9495 </member>
7584 <member name="T:OpenMetaverse.EstateManagersReplyEventArgs"> 9496 <member name="T:OpenMetaverse.PacketBufferPool">
7585 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
7586 </member>
7587 <member name="M:OpenMetaverse.EstateManagersReplyEventArgs.#ctor(System.UInt32,System.Int32,System.Collections.Generic.List{OpenMetaverse.UUID})">
7588 <summary>Construct a new instance of the EstateManagersReplyEventArgs class</summary>
7589 <param name="estateID">The estate's identifier on the grid</param>
7590 <param name="count">The number of Managers</param>
7591 <param name="managers"> Managers UUIDs</param>
7592 </member>
7593 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.EstateID">
7594 <summary> 9497 <summary>
7595 The identifier of the estate 9498 Object pool for packet buffers. This is used to allocate memory for all
9499 incoming and outgoing packets, and zerocoding buffers for those packets
7596 </summary> 9500 </summary>
7597 </member> 9501 </member>
7598 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.Count"> 9502 <member name="M:OpenMetaverse.ObjectPoolBase`1.#ctor">
7599 <summary> 9503 <summary>
7600 The number of returned items 9504 Creates a new instance of the ObjectPoolBase class. Initialize MUST be called
9505 after using this constructor.
7601 </summary> 9506 </summary>
7602 </member> 9507 </member>
7603 <member name="P:OpenMetaverse.EstateManagersReplyEventArgs.Managers"> 9508 <member name="M:OpenMetaverse.ObjectPoolBase`1.#ctor(System.Int32,System.Int32,System.Boolean,System.Int32)">
7604 <summary> 9509 <summary>
7605 List of UUIDs of the Estate's Managers 9510 Creates a new instance of the ObjectPool Base class.
7606 </summary> 9511 </summary>
9512 <param name="itemsPerSegment">The object pool is composed of segments, which
9513 are allocated whenever the size of the pool is exceeded. The number of items
9514 in a segment should be large enough that allocating a new segmeng is a rare
9515 thing. For example, on a server that will have 10k people logged in at once,
9516 the receive buffer object pool should have segment sizes of at least 1000
9517 byte arrays per segment.
9518 </param>
9519 <param name="minimumSegmentCount">The minimun number of segments that may exist.</param>
9520 <param name="gcOnPoolGrowth">Perform a full GC.Collect whenever a segment is allocated, and then again after allocation to compact the heap.</param>
9521 <param name="cleanupFrequenceMS">The frequency which segments are checked to see if they're eligible for cleanup.</param>
7607 </member> 9522 </member>
7608 <member name="T:OpenMetaverse.EstateCovenantReplyEventArgs"> 9523 <member name="M:OpenMetaverse.ObjectPoolBase`1.ForceCleanup">
7609 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
7610 </member>
7611 <member name="M:OpenMetaverse.EstateCovenantReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Int64,System.String,OpenMetaverse.UUID)">
7612 <summary>Construct a new instance of the EstateCovenantReplyEventArgs class</summary>
7613 <param name="covenantID">The Covenant ID</param>
7614 <param name="timestamp">The timestamp</param>
7615 <param name="estateName">The estate's name</param>
7616 <param name="estateOwnerID">The Estate Owner's ID (can be a GroupID)</param>
7617 </member>
7618 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.CovenantID">
7619 <summary> 9524 <summary>
7620 The Covenant 9525 Forces the segment cleanup algorithm to be run. This method is intended
9526 primarly for use from the Unit Test libraries.
7621 </summary> 9527 </summary>
7622 </member> 9528 </member>
7623 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.Timestamp"> 9529 <member name="M:OpenMetaverse.ObjectPoolBase`1.GetObjectInstance">
7624 <summary> 9530 <summary>
7625 The timestamp 9531 Responsible for allocate 1 instance of an object that will be stored in a segment.
7626 </summary> 9532 </summary>
9533 <returns>An instance of whatever objec the pool is pooling.</returns>
7627 </member> 9534 </member>
7628 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.EstateName"> 9535 <member name="M:OpenMetaverse.ObjectPoolBase`1.CheckIn(OpenMetaverse.ObjectPoolSegment{`0},`0)">
7629 <summary> 9536 <summary>
7630 The Estate name 9537 Checks in an instance of T owned by the object pool. This method is only intended to be called
9538 by the <c>WrappedObject</c> class.
7631 </summary> 9539 </summary>
9540 <param name="owningSegment">The segment from which the instance is checked out.</param>
9541 <param name="instance">The instance of <c>T</c> to check back into the segment.</param>
7632 </member> 9542 </member>
7633 <member name="P:OpenMetaverse.EstateCovenantReplyEventArgs.EstateOwnerID"> 9543 <member name="M:OpenMetaverse.ObjectPoolBase`1.CheckOut">
7634 <summary> 9544 <summary>
7635 The Estate Owner's ID (can be a GroupID) 9545 Checks an instance of <c>T</c> from the pool. If the pool is not sufficient to
9546 allow the checkout, a new segment is created.
7636 </summary> 9547 </summary>
9548 <returns>A <c>WrappedObject</c> around the instance of <c>T</c>. To check
9549 the instance back into the segment, be sureto dispose the WrappedObject
9550 when finished. </returns>
7637 </member> 9551 </member>
7638 <member name="T:OpenMetaverse.EstateUpdateInfoReplyEventArgs"> 9552 <member name="P:OpenMetaverse.ObjectPoolBase`1.TotalSegments">
7639 <summary>Returned, along with other info, upon a successful .RequestInfo()</summary>
7640 </member>
7641 <member name="M:OpenMetaverse.EstateUpdateInfoReplyEventArgs.#ctor(System.String,OpenMetaverse.UUID,System.UInt32,System.Boolean)">
7642 <summary>Construct a new instance of the EstateUpdateInfoReplyEventArgs class</summary>
7643 <param name="estateName">The estate's name</param>
7644 <param name="estateOwner">The Estate Owners ID (can be a GroupID)</param>
7645 <param name="estateID">The estate's identifier on the grid</param>
7646 <param name="denyNoPaymentInfo">
7647 </param>
7648 </member>
7649 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateName">
7650 <summary> 9553 <summary>
7651 The estate's name 9554 The total number of segments created. Intended to be used by the Unit Tests.
7652 </summary> 9555 </summary>
7653 </member> 9556 </member>
7654 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateOwner"> 9557 <member name="P:OpenMetaverse.ObjectPoolBase`1.ItemsPerSegment">
7655 <summary> 9558 <summary>
7656 The Estate Owner's ID (can be a GroupID) 9559 The number of items that are in a segment. Items in a segment
9560 are all allocated at the same time, and are hopefully close to
9561 each other in the managed heap.
7657 </summary> 9562 </summary>
7658 </member> 9563 </member>
7659 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.EstateID"> 9564 <member name="P:OpenMetaverse.ObjectPoolBase`1.MinimumSegmentCount">
7660 <summary> 9565 <summary>
7661 The identifier of the estate on the grid 9566 The minimum number of segments. When segments are reclaimed,
9567 this number of segments will always be left alone. These
9568 segments are allocated at startup.
7662 </summary> 9569 </summary>
7663 </member> 9570 </member>
7664 <member name="P:OpenMetaverse.EstateUpdateInfoReplyEventArgs.DenyNoPaymentInfo"> 9571 <member name="P:OpenMetaverse.ObjectPoolBase`1.MinimumSegmentAgePriorToCleanup">
7665 <summary> 9572 <summary>
9573 The age a segment must be before it's eligible for cleanup.
9574 This is used to prevent thrash, and typical values are in
9575 the 5 minute range.
7666 </summary> 9576 </summary>
7667 </member> 9577 </member>
7668 <member name="T:OpenMetaverse.PacketEventDictionary"> 9578 <member name="P:OpenMetaverse.ObjectPoolBase`1.CleanupFrequencyMilliseconds">
7669 <summary> 9579 <summary>
7670 Registers, unregisters, and fires events generated by incoming packets 9580 The frequence which the cleanup thread runs. This is typically
9581 expected to be in the 5 minute range.
7671 </summary> 9582 </summary>
7672 </member> 9583 </member>
7673 <member name="M:OpenMetaverse.PacketEventDictionary.#ctor(OpenMetaverse.GridClient)"> 9584 <member name="M:OpenMetaverse.PacketBufferPool.#ctor(System.Net.IPEndPoint,System.Int32,System.Int32)">
7674 <summary> 9585 <summary>
7675 Default constructor 9586 Initialize the object pool in client mode
7676 </summary> 9587 </summary>
7677 <param name="client"> 9588 <param name="endPoint">Server to connect to</param>
7678 </param> 9589 <param name="itemsPerSegment"></param>
9590 <param name="minSegments"></param>
7679 </member> 9591 </member>
7680 <member name="T:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper"> 9592 <member name="M:OpenMetaverse.PacketBufferPool.#ctor(System.Int32,System.Int32)">
7681 <summary> 9593 <summary>
7682 Object that is passed to worker threads in the ThreadPool for 9594 Initialize the object pool in server mode
7683 firing packet callbacks
7684 </summary> 9595 </summary>
9596 <param name="itemsPerSegment"></param>
9597 <param name="minSegments"></param>
7685 </member> 9598 </member>
7686 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Callback"> 9599 <member name="M:OpenMetaverse.PacketBufferPool.GetObjectInstance">
7687 <summary>Callback to fire for this packet</summary>
7688 </member>
7689 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Simulator">
7690 <summary>Reference to the simulator that this packet came from</summary>
7691 </member>
7692 <member name="F:OpenMetaverse.PacketEventDictionary.PacketCallbackWrapper.Packet">
7693 <summary>The packet that needs to be processed</summary>
7694 </member>
7695 <member name="F:OpenMetaverse.PacketEventDictionary.Client">
7696 <summary>Reference to the GridClient object</summary>
7697 </member>
7698 <member name="M:OpenMetaverse.PacketEventDictionary.RegisterEvent(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs},System.Boolean)">
7699 <summary> 9600 <summary>
7700 Register an event handler 9601 Returns a packet buffer with EndPoint set if the buffer is in
9602 client mode, or with EndPoint set to null in server mode
7701 </summary> 9603 </summary>
7702 <remarks>Use PacketType.Default to fire this event on every 9604 <returns>Initialized UDPPacketBuffer object</returns>
7703 incoming packet</remarks>
7704 <param name="packetType">Packet type to register the handler for</param>
7705 <param name="eventHandler">Callback to be fired</param>
7706 <param name="isAsync">True if this callback should be ran
7707 asynchronously, false to run it synchronous</param>
7708 </member> 9605 </member>
7709 <member name="M:OpenMetaverse.PacketEventDictionary.UnregisterEvent(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})"> 9606 <member name="M:OpenMetaverse.Pool.#cctor">
7710 <summary> 9607 <summary>
7711 Unregister an event handler 9608 Default constructor
7712 </summary> 9609 </summary>
7713 <param name="packetType">Packet type to unregister the handler for</param>
7714 <param name="eventHandler">Callback to be unregistered</param>
7715 </member> 9610 </member>
7716 <member name="M:OpenMetaverse.PacketEventDictionary.RaiseEvent(OpenMetaverse.Packets.PacketType,OpenMetaverse.Packets.Packet,OpenMetaverse.Simulator)"> 9611 <member name="M:OpenMetaverse.Pool.CheckOut">
7717 <summary> 9612 <summary>
7718 Fire the events registered for this packet type 9613 Check a packet buffer out of the pool
7719 </summary> 9614 </summary>
7720 <param name="packetType">Incoming packet type</param> 9615 <returns>A packet buffer object</returns>
7721 <param name="packet">Incoming packet</param>
7722 <param name="simulator">Simulator this packet was received from</param>
7723 </member> 9616 </member>
7724 <member name="T:OpenMetaverse.CapsEventDictionary"> 9617 <member name="T:OpenMetaverse.Logger">
7725 <summary> 9618 <summary>
7726 Registers, unregisters, and fires events generated by the Capabilities 9619 Singleton logging class for the entire library
7727 event queue
7728 </summary> 9620 </summary>
7729 </member> 9621 </member>
7730 <member name="M:OpenMetaverse.CapsEventDictionary.#ctor(OpenMetaverse.GridClient)"> 9622 <member name="F:OpenMetaverse.Logger.LogInstance">
9623 <summary>log4net logging engine</summary>
9624 </member>
9625 <member name="M:OpenMetaverse.Logger.#cctor">
7731 <summary> 9626 <summary>
7732 Default constructor 9627 Default constructor
7733 </summary> 9628 </summary>
7734 <param name="client">Reference to the GridClient object</param>
7735 </member> 9629 </member>
7736 <member name="T:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper"> 9630 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel)">
7737 <summary> 9631 <summary>
7738 Object that is passed to worker threads in the ThreadPool for 9632 Send a log message to the logging engine
7739 firing CAPS callbacks
7740 </summary> 9633 </summary>
9634 <param name="message">The log message</param>
9635 <param name="level">The severity of the log entry</param>
7741 </member> 9636 </member>
7742 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Callback"> 9637 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,OpenMetaverse.GridClient)">
7743 <summary>Callback to fire for this packet</summary> 9638 <summary>
7744 </member> 9639 Send a log message to the logging engine
7745 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.CapsEvent"> 9640 </summary>
7746 <summary>Name of the CAPS event</summary> 9641 <param name="message">The log message</param>
7747 </member> 9642 <param name="level">The severity of the log entry</param>
7748 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Message"> 9643 <param name="client">Instance of the client</param>
7749 <summary>Strongly typed decoded data</summary>
7750 </member>
7751 <member name="F:OpenMetaverse.CapsEventDictionary.CapsCallbackWrapper.Simulator">
7752 <summary>Reference to the simulator that generated this event</summary>
7753 </member> 9644 </member>
7754 <member name="F:OpenMetaverse.CapsEventDictionary.Client"> 9645 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,System.Exception)">
7755 <summary>Reference to the GridClient object</summary> 9646 <summary>
9647 Send a log message to the logging engine
9648 </summary>
9649 <param name="message">The log message</param>
9650 <param name="level">The severity of the log entry</param>
9651 <param name="exception">Exception that was raised</param>
7756 </member> 9652 </member>
7757 <member name="M:OpenMetaverse.CapsEventDictionary.RegisterEvent(System.String,OpenMetaverse.Caps.EventQueueCallback)"> 9653 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,OpenMetaverse.GridClient,System.Exception)">
7758 <summary> 9654 <summary>
7759 Register an new event handler for a capabilities event sent via the EventQueue 9655 Send a log message to the logging engine
7760 </summary> 9656 </summary>
7761 <remarks>Use String.Empty to fire this event on every CAPS event</remarks> 9657 <param name="message">The log message</param>
7762 <param name="capsEvent">Capability event name to register the 9658 <param name="level">The severity of the log entry</param>
7763 handler for</param> 9659 <param name="client">Instance of the client</param>
7764 <param name="eventHandler">Callback to fire</param> 9660 <param name="exception">Exception that was raised</param>
7765 </member> 9661 </member>
7766 <member name="M:OpenMetaverse.CapsEventDictionary.UnregisterEvent(System.String,OpenMetaverse.Caps.EventQueueCallback)"> 9662 <member name="M:OpenMetaverse.Logger.DebugLog(System.Object)">
7767 <summary> 9663 <summary>
7768 Unregister a previously registered capabilities handler 9664 If the library is compiled with DEBUG defined, an event will be
9665 fired if an <code>OnLogMessage</code> handler is registered and the
9666 message will be sent to the logging engine
7769 </summary> 9667 </summary>
7770 <param name="capsEvent">Capability event name unregister the 9668 <param name="message">The message to log at the DEBUG level to the
7771 handler for</param> 9669 current logging engine</param>
7772 <param name="eventHandler">Callback to unregister</param>
7773 </member> 9670 </member>
7774 <member name="M:OpenMetaverse.CapsEventDictionary.RaiseEvent(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 9671 <member name="M:OpenMetaverse.Logger.DebugLog(System.Object,OpenMetaverse.GridClient)">
7775 <summary> 9672 <summary>
7776 Fire the events registered for this event type synchronously 9673 If the library is compiled with DEBUG defined and
9674 <code>GridClient.Settings.DEBUG</code> is true, an event will be
9675 fired if an <code>OnLogMessage</code> handler is registered and the
9676 message will be sent to the logging engine
7777 </summary> 9677 </summary>
7778 <param name="capsEvent">Capability name</param> 9678 <param name="message">The message to log at the DEBUG level to the
7779 <param name="message">Decoded event body</param> 9679 current logging engine</param>
7780 <param name="simulator">Reference to the simulator that 9680 <param name="client">Instance of the client</param>
7781 generated this event</param>
7782 </member> 9681 </member>
7783 <member name="M:OpenMetaverse.CapsEventDictionary.BeginRaiseEvent(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 9682 <member name="E:OpenMetaverse.Logger.OnLogMessage">
9683 <summary>Triggered whenever a message is logged. If this is left
9684 null, log messages will go to the console</summary>
9685 </member>
9686 <member name="T:OpenMetaverse.Logger.LogCallback">
7784 <summary> 9687 <summary>
7785 Fire the events registered for this event type asynchronously 9688 Callback used for client apps to receive log messages from
9689 the library
7786 </summary> 9690 </summary>
7787 <param name="capsEvent">Capability name</param> 9691 <param name="message">Data being logged</param>
7788 <param name="message">Decoded event body</param> 9692 <param name="level">The severity of the log entry from <seealso cref="T:OpenMetaverse.Helpers.LogLevel"/></param>
7789 <param name="simulator">Reference to the simulator that
7790 generated this event</param>
7791 </member> 9693 </member>
7792 <member name="T:OpenMetaverse.FriendRights"> 9694 <member name="T:OpenMetaverse.FriendRights">
7793 <summary> 9695 <summary>
9696
7794 </summary> 9697 </summary>
7795 </member> 9698 </member>
7796 <member name="F:OpenMetaverse.FriendRights.None"> 9699 <member name="F:OpenMetaverse.FriendRights.None">
@@ -7807,7 +9710,7 @@
7807 </member> 9710 </member>
7808 <member name="T:OpenMetaverse.FriendInfo"> 9711 <member name="T:OpenMetaverse.FriendInfo">
7809 <summary> 9712 <summary>
7810 This class holds information about an avatar in the friends list. There are two ways 9713 This class holds information about an avatar in the friends list. There are two ways
7811 to interface to this class. The first is through the set of boolean properties. This is the typical 9714 to interface to this class. The first is through the set of boolean properties. This is the typical
7812 way clients of this class will use it. The second interface is through two bitflag properties, 9715 way clients of this class will use it. The second interface is through two bitflag properties,
7813 TheirFriendsRights and MyFriendsRights 9716 TheirFriendsRights and MyFriendsRights
@@ -7821,6 +9724,12 @@
7821 <param name="theirRights">Rights the friend has to see you online and to modify your objects</param> 9724 <param name="theirRights">Rights the friend has to see you online and to modify your objects</param>
7822 <param name="myRights">Rights you have to see your friend online and to modify their objects</param> 9725 <param name="myRights">Rights you have to see your friend online and to modify their objects</param>
7823 </member> 9726 </member>
9727 <member name="M:OpenMetaverse.FriendInfo.ToString">
9728 <summary>
9729 FriendInfo represented as a string
9730 </summary>
9731 <returns>A string reprentation of both my rights and my friends rights</returns>
9732 </member>
7824 <member name="P:OpenMetaverse.FriendInfo.UUID"> 9733 <member name="P:OpenMetaverse.FriendInfo.UUID">
7825 <summary> 9734 <summary>
7826 System ID of the avatar 9735 System ID of the avatar
@@ -7843,7 +9752,7 @@
7843 </member> 9752 </member>
7844 <member name="P:OpenMetaverse.FriendInfo.CanSeeMeOnMap"> 9753 <member name="P:OpenMetaverse.FriendInfo.CanSeeMeOnMap">
7845 <summary> 9754 <summary>
7846 True if the friend can see me on the map 9755 True if the friend can see me on the map
7847 </summary> 9756 </summary>
7848 </member> 9757 </member>
7849 <member name="P:OpenMetaverse.FriendInfo.CanModifyMyObjects"> 9758 <member name="P:OpenMetaverse.FriendInfo.CanModifyMyObjects">
@@ -7876,151 +9785,121 @@
7876 My rights represented as bitmapped flags 9785 My rights represented as bitmapped flags
7877 </summary> 9786 </summary>
7878 </member> 9787 </member>
7879 <member name="M:OpenMetaverse.FriendInfo.ToString">
7880 <summary>
7881 FriendInfo represented as a string
7882 </summary>
7883 <returns>A string reprentation of both my rights and my friends rights</returns>
7884 </member>
7885 <member name="T:OpenMetaverse.FriendsManager"> 9788 <member name="T:OpenMetaverse.FriendsManager">
7886 <summary> 9789 <summary>
7887 This class is used to add and remove avatars from your friends list and to manage their permission. 9790 This class is used to add and remove avatars from your friends list and to manage their permission.
7888 </summary>
7889 </member>
7890 <member name="M:OpenMetaverse.FriendsManager.#ctor(OpenMetaverse.GridClient)">
7891 <summary>
7892 Internal constructor
7893 </summary> 9791 </summary>
7894 <param name="client">A reference to the GridClient Object</param>
7895 </member> 9792 </member>
7896 <member name="F:OpenMetaverse.FriendsManager.m_FriendOnline"> 9793 <member name="F:OpenMetaverse.FriendsManager.m_FriendOnline">
7897 <summary>The event subscribers. null if no subcribers</summary> 9794 <summary>The event subscribers. null if no subcribers</summary>
7898 </member> 9795 </member>
9796 <member name="M:OpenMetaverse.FriendsManager.OnFriendOnline(OpenMetaverse.FriendInfoEventArgs)">
9797 <summary>Raises the FriendOnline event</summary>
9798 <param name="e">A FriendInfoEventArgs object containing the
9799 data returned from the data server</param>
9800 </member>
7899 <member name="F:OpenMetaverse.FriendsManager.m_FriendOnlineLock"> 9801 <member name="F:OpenMetaverse.FriendsManager.m_FriendOnlineLock">
7900 <summary>Thread sync lock object</summary> 9802 <summary>Thread sync lock object</summary>
7901 </member> 9803 </member>
7902 <member name="F:OpenMetaverse.FriendsManager.m_FriendOffline"> 9804 <member name="F:OpenMetaverse.FriendsManager.m_FriendOffline">
7903 <summary>The event subscribers. null if no subcribers</summary> 9805 <summary>The event subscribers. null if no subcribers</summary>
7904 </member> 9806 </member>
9807 <member name="M:OpenMetaverse.FriendsManager.OnFriendOffline(OpenMetaverse.FriendInfoEventArgs)">
9808 <summary>Raises the FriendOffline event</summary>
9809 <param name="e">A FriendInfoEventArgs object containing the
9810 data returned from the data server</param>
9811 </member>
7905 <member name="F:OpenMetaverse.FriendsManager.m_FriendOfflineLock"> 9812 <member name="F:OpenMetaverse.FriendsManager.m_FriendOfflineLock">
7906 <summary>Thread sync lock object</summary> 9813 <summary>Thread sync lock object</summary>
7907 </member> 9814 </member>
7908 <member name="F:OpenMetaverse.FriendsManager.m_FriendRights"> 9815 <member name="F:OpenMetaverse.FriendsManager.m_FriendRights">
7909 <summary>The event subscribers. null if no subcribers</summary> 9816 <summary>The event subscribers. null if no subcribers</summary>
7910 </member> 9817 </member>
9818 <member name="M:OpenMetaverse.FriendsManager.OnFriendRights(OpenMetaverse.FriendInfoEventArgs)">
9819 <summary>Raises the FriendRightsUpdate event</summary>
9820 <param name="e">A FriendInfoEventArgs object containing the
9821 data returned from the data server</param>
9822 </member>
7911 <member name="F:OpenMetaverse.FriendsManager.m_FriendRightsLock"> 9823 <member name="F:OpenMetaverse.FriendsManager.m_FriendRightsLock">
7912 <summary>Thread sync lock object</summary> 9824 <summary>Thread sync lock object</summary>
7913 </member> 9825 </member>
7914 <member name="F:OpenMetaverse.FriendsManager.m_FriendNames"> 9826 <member name="F:OpenMetaverse.FriendsManager.m_FriendNames">
7915 <summary>The event subscribers. null if no subcribers</summary> 9827 <summary>The event subscribers. null if no subcribers</summary>
7916 </member> 9828 </member>
9829 <member name="M:OpenMetaverse.FriendsManager.OnFriendNames(OpenMetaverse.FriendNamesEventArgs)">
9830 <summary>Raises the FriendNames event</summary>
9831 <param name="e">A FriendNamesEventArgs object containing the
9832 data returned from the data server</param>
9833 </member>
7917 <member name="F:OpenMetaverse.FriendsManager.m_FriendNamesLock"> 9834 <member name="F:OpenMetaverse.FriendsManager.m_FriendNamesLock">
7918 <summary>Thread sync lock object</summary> 9835 <summary>Thread sync lock object</summary>
7919 </member> 9836 </member>
7920 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipOffered"> 9837 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipOffered">
7921 <summary>The event subscribers. null if no subcribers</summary> 9838 <summary>The event subscribers. null if no subcribers</summary>
7922 </member> 9839 </member>
9840 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipOffered(OpenMetaverse.FriendshipOfferedEventArgs)">
9841 <summary>Raises the FriendshipOffered event</summary>
9842 <param name="e">A FriendshipOfferedEventArgs object containing the
9843 data returned from the data server</param>
9844 </member>
7923 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipOfferedLock"> 9845 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipOfferedLock">
7924 <summary>Thread sync lock object</summary> 9846 <summary>Thread sync lock object</summary>
7925 </member> 9847 </member>
7926 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipResponse"> 9848 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipResponse">
7927 <summary>The event subscribers. null if no subcribers</summary> 9849 <summary>The event subscribers. null if no subcribers</summary>
7928 </member> 9850 </member>
9851 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipResponse(OpenMetaverse.FriendshipResponseEventArgs)">
9852 <summary>Raises the FriendshipResponse event</summary>
9853 <param name="e">A FriendshipResponseEventArgs object containing the
9854 data returned from the data server</param>
9855 </member>
7929 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipResponseLock"> 9856 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipResponseLock">
7930 <summary>Thread sync lock object</summary> 9857 <summary>Thread sync lock object</summary>
7931 </member> 9858 </member>
7932 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipTerminated"> 9859 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipTerminated">
7933 <summary>The event subscribers. null if no subcribers</summary> 9860 <summary>The event subscribers. null if no subcribers</summary>
7934 </member> 9861 </member>
9862 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipTerminated(OpenMetaverse.FriendshipTerminatedEventArgs)">
9863 <summary>Raises the FriendshipTerminated event</summary>
9864 <param name="e">A FriendshipTerminatedEventArgs object containing the
9865 data returned from the data server</param>
9866 </member>
7935 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipTerminatedLock"> 9867 <member name="F:OpenMetaverse.FriendsManager.m_FriendshipTerminatedLock">
7936 <summary>Thread sync lock object</summary> 9868 <summary>Thread sync lock object</summary>
7937 </member> 9869 </member>
7938 <member name="F:OpenMetaverse.FriendsManager.m_FriendFound"> 9870 <member name="F:OpenMetaverse.FriendsManager.m_FriendFound">
7939 <summary>The event subscribers. null if no subcribers</summary> 9871 <summary>The event subscribers. null if no subcribers</summary>
7940 </member> 9872 </member>
9873 <member name="M:OpenMetaverse.FriendsManager.OnFriendFoundReply(OpenMetaverse.FriendFoundReplyEventArgs)">
9874 <summary>Raises the FriendFoundReply event</summary>
9875 <param name="e">A FriendFoundReplyEventArgs object containing the
9876 data returned from the data server</param>
9877 </member>
7941 <member name="F:OpenMetaverse.FriendsManager.m_FriendFoundLock"> 9878 <member name="F:OpenMetaverse.FriendsManager.m_FriendFoundLock">
7942 <summary>Thread sync lock object</summary> 9879 <summary>Thread sync lock object</summary>
7943 </member> 9880 </member>
7944 <member name="F:OpenMetaverse.FriendsManager.FriendList"> 9881 <member name="F:OpenMetaverse.FriendsManager.FriendList">
7945 <summary> 9882 <summary>
7946 A dictionary of key/value pairs containing known friends of this avatar. 9883 A dictionary of key/value pairs containing known friends of this avatar.
7947 The Key is the <seealso cref="T:OpenMetaverse.UUID" /> of the friend, the value is a <seealso cref="T:OpenMetaverse.FriendInfo" /> 9884
9885 The Key is the <seealso cref="T:OpenMetaverse.UUID"/> of the friend, the value is a <seealso cref="T:OpenMetaverse.FriendInfo"/>
7948 object that contains detailed information including permissions you have and have given to the friend 9886 object that contains detailed information including permissions you have and have given to the friend
7949 </summary> 9887 </summary>
7950 </member> 9888 </member>
7951 <member name="F:OpenMetaverse.FriendsManager.FriendRequests"> 9889 <member name="F:OpenMetaverse.FriendsManager.FriendRequests">
7952 <summary> 9890 <summary>
7953 A Dictionary of key/value pairs containing current pending frienship offers. 9891 A Dictionary of key/value pairs containing current pending frienship offers.
7954 The key is the <seealso cref="T:OpenMetaverse.UUID" /> of the avatar making the request, 9892
7955 the value is the <seealso cref="T:OpenMetaverse.UUID" /> of the request which is used to accept 9893 The key is the <seealso cref="T:OpenMetaverse.UUID"/> of the avatar making the request,
9894 the value is the <seealso cref="T:OpenMetaverse.UUID"/> of the request which is used to accept
7956 or decline the friendship offer 9895 or decline the friendship offer
7957 </summary> 9896 </summary>
7958 </member> 9897 </member>
7959 <member name="E:OpenMetaverse.FriendsManager.FriendOnline"> 9898 <member name="M:OpenMetaverse.FriendsManager.#ctor(OpenMetaverse.GridClient)">
7960 <summary>Raised when the simulator sends notification one of the members in our friends list comes online</summary> 9899 <summary>
7961 </member> 9900 Internal constructor
7962 <member name="E:OpenMetaverse.FriendsManager.FriendOffline"> 9901 </summary>
7963 <summary>Raised when the simulator sends notification one of the members in our friends list goes offline</summary> 9902 <param name="client">A reference to the GridClient Object</param>
7964 </member>
7965 <member name="E:OpenMetaverse.FriendsManager.FriendRightsUpdate">
7966 <summary>Raised when the simulator sends notification one of the members in our friends list grants or revokes permissions</summary>
7967 </member>
7968 <member name="E:OpenMetaverse.FriendsManager.FriendNames">
7969 <summary>Raised when the simulator sends us the names on our friends list</summary>
7970 </member>
7971 <member name="E:OpenMetaverse.FriendsManager.FriendshipOffered">
7972 <summary>Raised when the simulator sends notification another agent is offering us friendship</summary>
7973 </member>
7974 <member name="E:OpenMetaverse.FriendsManager.FriendshipResponse">
7975 <summary>Raised when a request we sent to friend another agent is accepted or declined</summary>
7976 </member>
7977 <member name="E:OpenMetaverse.FriendsManager.FriendshipTerminated">
7978 <summary>Raised when the simulator sends notification one of the members in our friends list has terminated
7979 our friendship</summary>
7980 </member>
7981 <member name="E:OpenMetaverse.FriendsManager.FriendFoundReply">
7982 <summary>Raised when the simulator sends the location of a friend we have
7983 requested map location info for</summary>
7984 </member>
7985 <member name="M:OpenMetaverse.FriendsManager.OnFriendOnline(OpenMetaverse.FriendInfoEventArgs)">
7986 <summary>Raises the FriendOnline event</summary>
7987 <param name="e">A FriendInfoEventArgs object containing the
7988 data returned from the data server</param>
7989 </member>
7990 <member name="M:OpenMetaverse.FriendsManager.OnFriendOffline(OpenMetaverse.FriendInfoEventArgs)">
7991 <summary>Raises the FriendOffline event</summary>
7992 <param name="e">A FriendInfoEventArgs object containing the
7993 data returned from the data server</param>
7994 </member>
7995 <member name="M:OpenMetaverse.FriendsManager.OnFriendRights(OpenMetaverse.FriendInfoEventArgs)">
7996 <summary>Raises the FriendRightsUpdate event</summary>
7997 <param name="e">A FriendInfoEventArgs object containing the
7998 data returned from the data server</param>
7999 </member>
8000 <member name="M:OpenMetaverse.FriendsManager.OnFriendNames(OpenMetaverse.FriendNamesEventArgs)">
8001 <summary>Raises the FriendNames event</summary>
8002 <param name="e">A FriendNamesEventArgs object containing the
8003 data returned from the data server</param>
8004 </member>
8005 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipOffered(OpenMetaverse.FriendshipOfferedEventArgs)">
8006 <summary>Raises the FriendshipOffered event</summary>
8007 <param name="e">A FriendshipOfferedEventArgs object containing the
8008 data returned from the data server</param>
8009 </member>
8010 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipResponse(OpenMetaverse.FriendshipResponseEventArgs)">
8011 <summary>Raises the FriendshipResponse event</summary>
8012 <param name="e">A FriendshipResponseEventArgs object containing the
8013 data returned from the data server</param>
8014 </member>
8015 <member name="M:OpenMetaverse.FriendsManager.OnFriendshipTerminated(OpenMetaverse.FriendshipTerminatedEventArgs)">
8016 <summary>Raises the FriendshipTerminated event</summary>
8017 <param name="e">A FriendshipTerminatedEventArgs object containing the
8018 data returned from the data server</param>
8019 </member>
8020 <member name="M:OpenMetaverse.FriendsManager.OnFriendFoundReply(OpenMetaverse.FriendFoundReplyEventArgs)">
8021 <summary>Raises the FriendFoundReply event</summary>
8022 <param name="e">A FriendFoundReplyEventArgs object containing the
8023 data returned from the data server</param>
8024 </member> 9903 </member>
8025 <member name="M:OpenMetaverse.FriendsManager.AcceptFriendship(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 9904 <member name="M:OpenMetaverse.FriendsManager.AcceptFriendship(OpenMetaverse.UUID,OpenMetaverse.UUID)">
8026 <summary> 9905 <summary>
@@ -8033,8 +9912,7 @@
8033 <summary> 9912 <summary>
8034 Decline a friendship request 9913 Decline a friendship request
8035 </summary> 9914 </summary>
8036 <param name="fromAgentID"> 9915 <param name="fromAgentID"><seealso cref="T:OpenMetaverse.UUID"/> of friend</param>
8037 <seealso cref="T:OpenMetaverse.UUID" /> of friend</param>
8038 <param name="imSessionID">imSessionID of the friendship request message</param> 9916 <param name="imSessionID">imSessionID of the friendship request message</param>
8039 </member> 9917 </member>
8040 <member name="M:OpenMetaverse.FriendsManager.OfferFriendship(OpenMetaverse.UUID)"> 9918 <member name="M:OpenMetaverse.FriendsManager.OfferFriendship(OpenMetaverse.UUID)">
@@ -8065,7 +9943,7 @@
8065 <summary> 9943 <summary>
8066 Change the rights of a friend avatar. 9944 Change the rights of a friend avatar.
8067 </summary> 9945 </summary>
8068 <param name="friendID">the <seealso cref="T:OpenMetaverse.UUID" /> of the friend</param> 9946 <param name="friendID">the <seealso cref="T:OpenMetaverse.UUID"/> of the friend</param>
8069 <param name="rights">the new rights to give the friend</param> 9947 <param name="rights">the new rights to give the friend</param>
8070 <remarks>This method will implicitly set the rights to those passed in the rights parameter.</remarks> 9948 <remarks>This method will implicitly set the rights to those passed in the rights parameter.</remarks>
8071 </member> 9949 </member>
@@ -8074,9 +9952,7 @@
8074 Use to map a friends location on the grid. 9952 Use to map a friends location on the grid.
8075 </summary> 9953 </summary>
8076 <param name="friendID">Friends UUID to find</param> 9954 <param name="friendID">Friends UUID to find</param>
8077 <remarks> 9955 <remarks><seealso cref="E:OnFriendFound"/></remarks>
8078 <seealso cref="E:OnFriendFound" />
8079 </remarks>
8080 </member> 9956 </member>
8081 <member name="M:OpenMetaverse.FriendsManager.TrackFriend(OpenMetaverse.UUID)"> 9957 <member name="M:OpenMetaverse.FriendsManager.TrackFriend(OpenMetaverse.UUID)">
8082 <summary> 9958 <summary>
@@ -8094,8 +9970,7 @@
8094 <summary> 9970 <summary>
8095 This handles the asynchronous response of a RequestAvatarNames call. 9971 This handles the asynchronous response of a RequestAvatarNames call.
8096 </summary> 9972 </summary>
8097 <param name="sender"> 9973 <param name="sender"></param>
8098 </param>
8099 <param name="e">names cooresponding to the the list of IDs sent the the RequestAvatarNames call.</param> 9974 <param name="e">names cooresponding to the the list of IDs sent the the RequestAvatarNames call.</param>
8100 </member> 9975 </member>
8101 <member name="M:OpenMetaverse.FriendsManager.OnlineNotificationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 9976 <member name="M:OpenMetaverse.FriendsManager.OnlineNotificationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
@@ -8120,15 +9995,41 @@
8120 </member> 9995 </member>
8121 <member name="M:OpenMetaverse.FriendsManager.Network_OnLoginResponse(System.Boolean,System.Boolean,System.String,System.String,OpenMetaverse.LoginResponseData)"> 9996 <member name="M:OpenMetaverse.FriendsManager.Network_OnLoginResponse(System.Boolean,System.Boolean,System.String,System.String,OpenMetaverse.LoginResponseData)">
8122 <summary> 9997 <summary>
8123 Populate FriendList <seealso cref="!:InternalDictionary" /> with data from the login reply 9998 Populate FriendList <seealso cref="!:InternalDictionary"/> with data from the login reply
8124 </summary> 9999 </summary>
8125 <param name="loginSuccess">true if login was successful</param> 10000 <param name="loginSuccess">true if login was successful</param>
8126 <param name="redirect">true if login request is requiring a redirect</param> 10001 <param name="redirect">true if login request is requiring a redirect</param>
8127 <param name="message">A string containing the response to the login request</param> 10002 <param name="message">A string containing the response to the login request</param>
8128 <param name="reason">A string containing the reason for the request</param> 10003 <param name="reason">A string containing the reason for the request</param>
8129 <param name="replyData">A <seealso cref="T:OpenMetaverse.LoginResponseData" /> object containing the decoded 10004 <param name="replyData">A <seealso cref="T:OpenMetaverse.LoginResponseData"/> object containing the decoded
8130 reply from the login server</param> 10005 reply from the login server</param>
8131 </member> 10006 </member>
10007 <member name="E:OpenMetaverse.FriendsManager.FriendOnline">
10008 <summary>Raised when the simulator sends notification one of the members in our friends list comes online</summary>
10009 </member>
10010 <member name="E:OpenMetaverse.FriendsManager.FriendOffline">
10011 <summary>Raised when the simulator sends notification one of the members in our friends list goes offline</summary>
10012 </member>
10013 <member name="E:OpenMetaverse.FriendsManager.FriendRightsUpdate">
10014 <summary>Raised when the simulator sends notification one of the members in our friends list grants or revokes permissions</summary>
10015 </member>
10016 <member name="E:OpenMetaverse.FriendsManager.FriendNames">
10017 <summary>Raised when the simulator sends us the names on our friends list</summary>
10018 </member>
10019 <member name="E:OpenMetaverse.FriendsManager.FriendshipOffered">
10020 <summary>Raised when the simulator sends notification another agent is offering us friendship</summary>
10021 </member>
10022 <member name="E:OpenMetaverse.FriendsManager.FriendshipResponse">
10023 <summary>Raised when a request we sent to friend another agent is accepted or declined</summary>
10024 </member>
10025 <member name="E:OpenMetaverse.FriendsManager.FriendshipTerminated">
10026 <summary>Raised when the simulator sends notification one of the members in our friends list has terminated
10027 our friendship</summary>
10028 </member>
10029 <member name="E:OpenMetaverse.FriendsManager.FriendFoundReply">
10030 <summary>Raised when the simulator sends the location of a friend we have
10031 requested map location info for</summary>
10032 </member>
8132 <member name="T:OpenMetaverse.FriendInfoEventArgs"> 10033 <member name="T:OpenMetaverse.FriendInfoEventArgs">
8133 <summary>Contains information on a member of our friends list</summary> 10034 <summary>Contains information on a member of our friends list</summary>
8134 </member> 10035 </member>
@@ -8148,11 +10049,11 @@
8148 <summary> 10049 <summary>
8149 Construct a new instance of the FriendNamesEventArgs class 10050 Construct a new instance of the FriendNamesEventArgs class
8150 </summary> 10051 </summary>
8151 <param name="names">A dictionary where the Key is the ID of the Agent, 10052 <param name="names">A dictionary where the Key is the ID of the Agent,
8152 and the Value is a string containing their name</param> 10053 and the Value is a string containing their name</param>
8153 </member> 10054 </member>
8154 <member name="P:OpenMetaverse.FriendNamesEventArgs.Names"> 10055 <member name="P:OpenMetaverse.FriendNamesEventArgs.Names">
8155 <summary>A dictionary where the Key is the ID of the Agent, 10056 <summary>A dictionary where the Key is the ID of the Agent,
8156 and the Value is a string containing their name</summary> 10057 and the Value is a string containing their name</summary>
8157 </member> 10058 </member>
8158 <member name="T:OpenMetaverse.FriendshipOfferedEventArgs"> 10059 <member name="T:OpenMetaverse.FriendshipOfferedEventArgs">
@@ -8164,7 +10065,7 @@
8164 </summary> 10065 </summary>
8165 <param name="agentID">The ID of the agent requesting friendship</param> 10066 <param name="agentID">The ID of the agent requesting friendship</param>
8166 <param name="agentName">The name of the agent requesting friendship</param> 10067 <param name="agentName">The name of the agent requesting friendship</param>
8167 <param name="imSessionID">The ID of the session, used in accepting or declining the 10068 <param name="imSessionID">The ID of the session, used in accepting or declining the
8168 friendship offer</param> 10069 friendship offer</param>
8169 </member> 10070 </member>
8170 <member name="P:OpenMetaverse.FriendshipOfferedEventArgs.AgentID"> 10071 <member name="P:OpenMetaverse.FriendshipOfferedEventArgs.AgentID">
@@ -8174,7 +10075,7 @@
8174 <summary>Get the name of the agent requesting friendship</summary> 10075 <summary>Get the name of the agent requesting friendship</summary>
8175 </member> 10076 </member>
8176 <member name="P:OpenMetaverse.FriendshipOfferedEventArgs.SessionID"> 10077 <member name="P:OpenMetaverse.FriendshipOfferedEventArgs.SessionID">
8177 <summary>Get the ID of the session, used in accepting or declining the 10078 <summary>Get the ID of the session, used in accepting or declining the
8178 friendship offer</summary> 10079 friendship offer</summary>
8179 </member> 10080 </member>
8180 <member name="T:OpenMetaverse.FriendshipResponseEventArgs"> 10081 <member name="T:OpenMetaverse.FriendshipResponseEventArgs">
@@ -8215,7 +10116,7 @@
8215 </member> 10116 </member>
8216 <member name="T:OpenMetaverse.FriendFoundReplyEventArgs"> 10117 <member name="T:OpenMetaverse.FriendFoundReplyEventArgs">
8217 <summary> 10118 <summary>
8218 Data sent in response to a <see cref="!:FindFriend" /> request which contains the information to allow us to map the friends location 10119 Data sent in response to a <see cref="!:FindFriend"/> request which contains the information to allow us to map the friends location
8219 </summary> 10120 </summary>
8220 </member> 10121 </member>
8221 <member name="M:OpenMetaverse.FriendFoundReplyEventArgs.#ctor(OpenMetaverse.UUID,System.UInt64,OpenMetaverse.Vector3)"> 10122 <member name="M:OpenMetaverse.FriendFoundReplyEventArgs.#ctor(OpenMetaverse.UUID,System.UInt64,OpenMetaverse.Vector3)">
@@ -8235,6345 +10136,2832 @@
8235 <member name="P:OpenMetaverse.FriendFoundReplyEventArgs.Location"> 10136 <member name="P:OpenMetaverse.FriendFoundReplyEventArgs.Location">
8236 <summary>Get the simulator local position where our friend is located</summary> 10137 <summary>Get the simulator local position where our friend is located</summary>
8237 </member> 10138 </member>
8238 <member name="T:OpenMetaverse.GridClient"> 10139 <member name="T:OpenMetaverse.Animations">
8239 <summary>
8240 Main class to expose grid functionality to clients. All of the
8241 classes needed for sending and receiving data are accessible through
8242 this class.
8243 </summary>
8244 <example>
8245 <code>
8246 // Example minimum code required to instantiate class and
8247 // connect to a simulator.
8248 using System;
8249 using System.Collections.Generic;
8250 using System.Text;
8251 using OpenMetaverse;
8252 namespace FirstBot
8253 {
8254 class Bot
8255 {
8256 public static GridClient Client;
8257 static void Main(string[] args)
8258 {
8259 Client = new GridClient(); // instantiates the GridClient class
8260 // to the global Client object
8261 // Login to Simulator
8262 Client.Network.Login("FirstName", "LastName", "Password", "FirstBot", "1.0");
8263 // Wait for a Keypress
8264 Console.ReadLine();
8265 // Logout of simulator
8266 Client.Network.Logout();
8267 }
8268 }
8269 }
8270 </code>
8271 </example>
8272 </member>
8273 <member name="M:OpenMetaverse.GridClient.#ctor">
8274 <summary>
8275 Default constructor
8276 </summary>
8277 </member>
8278 <member name="F:OpenMetaverse.GridClient.Network">
8279 <summary>Networking subsystem</summary>
8280 </member>
8281 <member name="F:OpenMetaverse.GridClient.Settings">
8282 <summary>Settings class including constant values and changeable
8283 parameters for everything</summary>
8284 </member>
8285 <member name="F:OpenMetaverse.GridClient.Parcels">
8286 <summary>Parcel (subdivided simulator lots) subsystem</summary>
8287 </member>
8288 <member name="F:OpenMetaverse.GridClient.Self">
8289 <summary>Our own avatars subsystem</summary>
8290 </member>
8291 <member name="F:OpenMetaverse.GridClient.Avatars">
8292 <summary>Other avatars subsystem</summary>
8293 </member>
8294 <member name="F:OpenMetaverse.GridClient.Estate">
8295 <summary>Estate subsystem</summary>
8296 </member>
8297 <member name="F:OpenMetaverse.GridClient.Friends">
8298 <summary>Friends list subsystem</summary>
8299 </member>
8300 <member name="F:OpenMetaverse.GridClient.Grid">
8301 <summary>Grid (aka simulator group) subsystem</summary>
8302 </member>
8303 <member name="F:OpenMetaverse.GridClient.Objects">
8304 <summary>Object subsystem</summary>
8305 </member>
8306 <member name="F:OpenMetaverse.GridClient.Groups">
8307 <summary>Group subsystem</summary>
8308 </member>
8309 <member name="F:OpenMetaverse.GridClient.Assets">
8310 <summary>Asset subsystem</summary>
8311 </member>
8312 <member name="F:OpenMetaverse.GridClient.Appearance">
8313 <summary>Appearance subsystem</summary>
8314 </member>
8315 <member name="F:OpenMetaverse.GridClient.Inventory">
8316 <summary>Inventory subsystem</summary>
8317 </member>
8318 <member name="F:OpenMetaverse.GridClient.Directory">
8319 <summary>Directory searches including classifieds, people, land
8320 sales, etc</summary>
8321 </member>
8322 <member name="F:OpenMetaverse.GridClient.Terrain">
8323 <summary>Handles land, wind, and cloud heightmaps</summary>
8324 </member>
8325 <member name="F:OpenMetaverse.GridClient.Sound">
8326 <summary>Handles sound-related networking</summary>
8327 </member>
8328 <member name="F:OpenMetaverse.GridClient.Throttle">
8329 <summary>Throttling total bandwidth usage, or allocating bandwidth
8330 for specific data stream types</summary>
8331 </member>
8332 <member name="M:OpenMetaverse.GridClient.ToString">
8333 <summary>
8334 Return the full name of this instance
8335 </summary>
8336 <returns>Client avatars full name</returns>
8337 </member>
8338 <member name="T:OpenMetaverse.GridLayerType">
8339 <summary>
8340 Map layer request type
8341 </summary>
8342 </member>
8343 <member name="F:OpenMetaverse.GridLayerType.Objects">
8344 <summary>Objects and terrain are shown</summary>
8345 </member>
8346 <member name="F:OpenMetaverse.GridLayerType.Terrain">
8347 <summary>Only the terrain is shown, no objects</summary>
8348 </member>
8349 <member name="F:OpenMetaverse.GridLayerType.LandForSale">
8350 <summary>Overlay showing land for sale and for auction</summary>
8351 </member>
8352 <member name="T:OpenMetaverse.GridItemType">
8353 <summary>
8354 Type of grid item, such as telehub, event, populator location, etc.
8355 </summary>
8356 </member>
8357 <member name="F:OpenMetaverse.GridItemType.Telehub">
8358 <summary>Telehub</summary>
8359 </member>
8360 <member name="F:OpenMetaverse.GridItemType.PgEvent">
8361 <summary>PG rated event</summary>
8362 </member>
8363 <member name="F:OpenMetaverse.GridItemType.MatureEvent">
8364 <summary>Mature rated event</summary>
8365 </member>
8366 <member name="F:OpenMetaverse.GridItemType.Popular">
8367 <summary>Popular location</summary>
8368 </member>
8369 <member name="F:OpenMetaverse.GridItemType.AgentLocations">
8370 <summary>Locations of avatar groups in a region</summary>
8371 </member>
8372 <member name="F:OpenMetaverse.GridItemType.LandForSale">
8373 <summary>Land for sale</summary>
8374 </member>
8375 <member name="F:OpenMetaverse.GridItemType.Classified">
8376 <summary>Classified ad</summary>
8377 </member>
8378 <member name="F:OpenMetaverse.GridItemType.AdultEvent">
8379 <summary>Adult rated event</summary>
8380 </member>
8381 <member name="F:OpenMetaverse.GridItemType.AdultLandForSale">
8382 <summary>Adult land for sale</summary>
8383 </member>
8384 <member name="T:OpenMetaverse.GridRegion">
8385 <summary> 10140 <summary>
8386 Information about a region on the grid map 10141 Static pre-defined animations available to all agents
8387 </summary> 10142 </summary>
8388 </member> 10143 </member>
8389 <member name="F:OpenMetaverse.GridRegion.X"> 10144 <member name="F:OpenMetaverse.Animations.AFRAID">
8390 <summary>Sim X position on World Map</summary> 10145 <summary>Agent with afraid expression on face</summary>
8391 </member>
8392 <member name="F:OpenMetaverse.GridRegion.Y">
8393 <summary>Sim Y position on World Map</summary>
8394 </member>
8395 <member name="F:OpenMetaverse.GridRegion.Name">
8396 <summary>Sim Name (NOTE: In lowercase!)</summary>
8397 </member>
8398 <member name="F:OpenMetaverse.GridRegion.Access">
8399 <summary>
8400 </summary>
8401 </member> 10146 </member>
8402 <member name="F:OpenMetaverse.GridRegion.RegionFlags"> 10147 <member name="F:OpenMetaverse.Animations.AIM_BAZOOKA_R">
8403 <summary>Appears to always be zero (None)</summary> 10148 <summary>Agent aiming a bazooka (right handed)</summary>
8404 </member> 10149 </member>
8405 <member name="F:OpenMetaverse.GridRegion.WaterHeight"> 10150 <member name="F:OpenMetaverse.Animations.AIM_BOW_L">
8406 <summary>Sim's defined Water Height</summary> 10151 <summary>Agent aiming a bow (left handed)</summary>
8407 </member> 10152 </member>
8408 <member name="F:OpenMetaverse.GridRegion.Agents"> 10153 <member name="F:OpenMetaverse.Animations.AIM_HANDGUN_R">
8409 <summary> 10154 <summary>Agent aiming a hand gun (right handed)</summary>
8410 </summary>
8411 </member> 10155 </member>
8412 <member name="F:OpenMetaverse.GridRegion.MapImageID"> 10156 <member name="F:OpenMetaverse.Animations.AIM_RIFLE_R">
8413 <summary>UUID of the World Map image</summary> 10157 <summary>Agent aiming a rifle (right handed)</summary>
8414 </member> 10158 </member>
8415 <member name="F:OpenMetaverse.GridRegion.RegionHandle"> 10159 <member name="F:OpenMetaverse.Animations.ANGRY">
8416 <summary>Unique identifier for this region, a combination of the X 10160 <summary>Agent with angry expression on face</summary>
8417 and Y position</summary>
8418 </member> 10161 </member>
8419 <member name="M:OpenMetaverse.GridRegion.ToString"> 10162 <member name="F:OpenMetaverse.Animations.AWAY">
8420 <summary> 10163 <summary>Agent hunched over (away)</summary>
8421 </summary>
8422 <returns>
8423 </returns>
8424 </member> 10164 </member>
8425 <member name="M:OpenMetaverse.GridRegion.GetHashCode"> 10165 <member name="F:OpenMetaverse.Animations.BACKFLIP">
8426 <summary> 10166 <summary>Agent doing a backflip</summary>
8427 </summary>
8428 <returns>
8429 </returns>
8430 </member> 10167 </member>
8431 <member name="M:OpenMetaverse.GridRegion.Equals(System.Object)"> 10168 <member name="F:OpenMetaverse.Animations.BELLY_LAUGH">
8432 <summary> 10169 <summary>Agent laughing while holding belly</summary>
8433 </summary>
8434 <param name="obj">
8435 </param>
8436 <returns>
8437 </returns>
8438 </member> 10170 </member>
8439 <member name="T:OpenMetaverse.GridLayer"> 10171 <member name="F:OpenMetaverse.Animations.BLOW_KISS">
8440 <summary> 10172 <summary>Agent blowing a kiss</summary>
8441 Visual chunk of the grid map
8442 </summary>
8443 </member> 10173 </member>
8444 <member name="T:OpenMetaverse.MapItem"> 10174 <member name="F:OpenMetaverse.Animations.BORED">
8445 <summary> 10175 <summary>Agent with bored expression on face</summary>
8446 Base class for Map Items
8447 </summary>
8448 </member> 10176 </member>
8449 <member name="F:OpenMetaverse.MapItem.GlobalX"> 10177 <member name="F:OpenMetaverse.Animations.BOW">
8450 <summary>The Global X position of the item</summary> 10178 <summary>Agent bowing to audience</summary>
8451 </member> 10179 </member>
8452 <member name="F:OpenMetaverse.MapItem.GlobalY"> 10180 <member name="F:OpenMetaverse.Animations.BRUSH">
8453 <summary>The Global Y position of the item</summary> 10181 <summary>Agent brushing himself/herself off</summary>
8454 </member> 10182 </member>
8455 <member name="P:OpenMetaverse.MapItem.LocalX"> 10183 <member name="F:OpenMetaverse.Animations.BUSY">
8456 <summary>Get the Local X position of the item</summary> 10184 <summary>Agent in busy mode</summary>
8457 </member> 10185 </member>
8458 <member name="P:OpenMetaverse.MapItem.LocalY"> 10186 <member name="F:OpenMetaverse.Animations.CLAP">
8459 <summary>Get the Local Y position of the item</summary> 10187 <summary>Agent clapping hands</summary>
8460 </member> 10188 </member>
8461 <member name="P:OpenMetaverse.MapItem.RegionHandle"> 10189 <member name="F:OpenMetaverse.Animations.COURTBOW">
8462 <summary>Get the Handle of the region</summary> 10190 <summary>Agent doing a curtsey bow</summary>
8463 </member> 10191 </member>
8464 <member name="T:OpenMetaverse.MapAgentLocation"> 10192 <member name="F:OpenMetaverse.Animations.CROUCH">
8465 <summary> 10193 <summary>Agent crouching</summary>
8466 Represents an agent or group of agents location
8467 </summary>
8468 </member> 10194 </member>
8469 <member name="T:OpenMetaverse.MapTelehub"> 10195 <member name="F:OpenMetaverse.Animations.CROUCHWALK">
8470 <summary> 10196 <summary>Agent crouching while walking</summary>
8471 Represents a Telehub location
8472 </summary>
8473 </member> 10197 </member>
8474 <member name="T:OpenMetaverse.MapLandForSale"> 10198 <member name="F:OpenMetaverse.Animations.CRY">
8475 <summary> 10199 <summary>Agent crying</summary>
8476 Represents a non-adult parcel of land for sale
8477 </summary>
8478 </member> 10200 </member>
8479 <member name="T:OpenMetaverse.MapAdultLandForSale"> 10201 <member name="F:OpenMetaverse.Animations.CUSTOMIZE">
8480 <summary> 10202 <summary>Agent unanimated with arms out (e.g. setting appearance)</summary>
8481 Represents an Adult parcel of land for sale
8482 </summary>
8483 </member> 10203 </member>
8484 <member name="T:OpenMetaverse.MapPGEvent"> 10204 <member name="F:OpenMetaverse.Animations.CUSTOMIZE_DONE">
8485 <summary> 10205 <summary>Agent re-animated after set appearance finished</summary>
8486 Represents a PG Event
8487 </summary>
8488 </member> 10206 </member>
8489 <member name="T:OpenMetaverse.MapMatureEvent"> 10207 <member name="F:OpenMetaverse.Animations.DANCE1">
8490 <summary> 10208 <summary>Agent dancing</summary>
8491 Represents a Mature event
8492 </summary>
8493 </member> 10209 </member>
8494 <member name="T:OpenMetaverse.MapAdultEvent"> 10210 <member name="F:OpenMetaverse.Animations.DANCE2">
8495 <summary> 10211 <summary>Agent dancing</summary>
8496 Represents an Adult event
8497 </summary>
8498 </member> 10212 </member>
8499 <member name="T:OpenMetaverse.GridManager"> 10213 <member name="F:OpenMetaverse.Animations.DANCE3">
8500 <summary> 10214 <summary>Agent dancing</summary>
8501 Manages grid-wide tasks such as the world map
8502 </summary>
8503 </member> 10215 </member>
8504 <member name="M:OpenMetaverse.GridManager.#ctor(OpenMetaverse.GridClient)"> 10216 <member name="F:OpenMetaverse.Animations.DANCE4">
8505 <summary> 10217 <summary>Agent dancing</summary>
8506 Constructor
8507 </summary>
8508 <param name="client">Instance of GridClient object to associate with this GridManager instance</param>
8509 </member> 10218 </member>
8510 <member name="F:OpenMetaverse.GridManager.m_CoarseLocationUpdate"> 10219 <member name="F:OpenMetaverse.Animations.DANCE5">
8511 <summary>The event subscribers. null if no subcribers</summary> 10220 <summary>Agent dancing</summary>
8512 </member> 10221 </member>
8513 <member name="F:OpenMetaverse.GridManager.m_CoarseLocationUpdateLock"> 10222 <member name="F:OpenMetaverse.Animations.DANCE6">
8514 <summary>Thread sync lock object</summary> 10223 <summary>Agent dancing</summary>
8515 </member> 10224 </member>
8516 <member name="F:OpenMetaverse.GridManager.m_GridRegion"> 10225 <member name="F:OpenMetaverse.Animations.DANCE7">
8517 <summary>The event subscribers. null if no subcribers</summary> 10226 <summary>Agent dancing</summary>
8518 </member> 10227 </member>
8519 <member name="F:OpenMetaverse.GridManager.m_GridRegionLock"> 10228 <member name="F:OpenMetaverse.Animations.DANCE8">
8520 <summary>Thread sync lock object</summary> 10229 <summary>Agent dancing</summary>
8521 </member> 10230 </member>
8522 <member name="F:OpenMetaverse.GridManager.m_GridLayer"> 10231 <member name="F:OpenMetaverse.Animations.DEAD">
8523 <summary>The event subscribers. null if no subcribers</summary> 10232 <summary>Agent on ground unanimated</summary>
8524 </member> 10233 </member>
8525 <member name="F:OpenMetaverse.GridManager.m_GridLayerLock"> 10234 <member name="F:OpenMetaverse.Animations.DRINK">
8526 <summary>Thread sync lock object</summary> 10235 <summary>Agent boozing it up</summary>
8527 </member> 10236 </member>
8528 <member name="F:OpenMetaverse.GridManager.m_GridItems"> 10237 <member name="F:OpenMetaverse.Animations.EMBARRASSED">
8529 <summary>The event subscribers. null if no subcribers</summary> 10238 <summary>Agent with embarassed expression on face</summary>
8530 </member> 10239 </member>
8531 <member name="F:OpenMetaverse.GridManager.m_GridItemsLock"> 10240 <member name="F:OpenMetaverse.Animations.EXPRESS_AFRAID">
8532 <summary>Thread sync lock object</summary> 10241 <summary>Agent with afraid expression on face</summary>
8533 </member> 10242 </member>
8534 <member name="F:OpenMetaverse.GridManager.m_RegionHandleReply"> 10243 <member name="F:OpenMetaverse.Animations.EXPRESS_ANGER">
8535 <summary>The event subscribers. null if no subcribers</summary> 10244 <summary>Agent with angry expression on face</summary>
8536 </member> 10245 </member>
8537 <member name="F:OpenMetaverse.GridManager.m_RegionHandleReplyLock"> 10246 <member name="F:OpenMetaverse.Animations.EXPRESS_BORED">
8538 <summary>Thread sync lock object</summary> 10247 <summary>Agent with bored expression on face</summary>
8539 </member> 10248 </member>
8540 <member name="F:OpenMetaverse.GridManager.Regions"> 10249 <member name="F:OpenMetaverse.Animations.EXPRESS_CRY">
8541 <summary>A dictionary of all the regions, indexed by region name</summary> 10250 <summary>Agent crying</summary>
8542 </member> 10251 </member>
8543 <member name="F:OpenMetaverse.GridManager.RegionsByHandle"> 10252 <member name="F:OpenMetaverse.Animations.EXPRESS_DISDAIN">
8544 <summary>A dictionary of all the regions, indexed by region handle</summary> 10253 <summary>Agent showing disdain (dislike) for something</summary>
8545 </member> 10254 </member>
8546 <member name="E:OpenMetaverse.GridManager.CoarseLocationUpdate"> 10255 <member name="F:OpenMetaverse.Animations.EXPRESS_EMBARRASSED">
8547 <summary>Raised when the simulator sends a <see cref="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket" /> 10256 <summary>Agent with embarassed expression on face</summary>
8548 containing the location of agents in the simulator</summary>
8549 </member> 10257 </member>
8550 <member name="E:OpenMetaverse.GridManager.GridRegion"> 10258 <member name="F:OpenMetaverse.Animations.EXPRESS_FROWN">
8551 <summary>Raised when the simulator sends a Region Data in response to 10259 <summary>Agent with frowning expression on face</summary>
8552 a Map request</summary>
8553 </member> 10260 </member>
8554 <member name="E:OpenMetaverse.GridManager.GridLayer"> 10261 <member name="F:OpenMetaverse.Animations.EXPRESS_KISS">
8555 <summary>Raised when the simulator sends GridLayer object containing 10262 <summary>Agent with kissy face</summary>
8556 a map tile coordinates and texture information</summary>
8557 </member> 10263 </member>
8558 <member name="E:OpenMetaverse.GridManager.GridItems"> 10264 <member name="F:OpenMetaverse.Animations.EXPRESS_LAUGH">
8559 <summary>Raised when the simulator sends GridItems object containing 10265 <summary>Agent expressing laughgter</summary>
8560 details on events, land sales at a specific location</summary>
8561 </member> 10266 </member>
8562 <member name="E:OpenMetaverse.GridManager.RegionHandleReply"> 10267 <member name="F:OpenMetaverse.Animations.EXPRESS_OPEN_MOUTH">
8563 <summary>Raised in response to a Region lookup</summary> 10268 <summary>Agent with open mouth</summary>
8564 </member> 10269 </member>
8565 <member name="P:OpenMetaverse.GridManager.SunPhase"> 10270 <member name="F:OpenMetaverse.Animations.EXPRESS_REPULSED">
8566 <summary>Unknown</summary> 10271 <summary>Agent with repulsed expression on face</summary>
8567 </member> 10272 </member>
8568 <member name="P:OpenMetaverse.GridManager.SunDirection"> 10273 <member name="F:OpenMetaverse.Animations.EXPRESS_SAD">
8569 <summary>Current direction of the sun</summary> 10274 <summary>Agent expressing sadness</summary>
8570 </member> 10275 </member>
8571 <member name="P:OpenMetaverse.GridManager.SunAngVelocity"> 10276 <member name="F:OpenMetaverse.Animations.EXPRESS_SHRUG">
8572 <summary>Current angular velocity of the sun</summary> 10277 <summary>Agent shrugging shoulders</summary>
8573 </member> 10278 </member>
8574 <member name="P:OpenMetaverse.GridManager.TimeOfDay"> 10279 <member name="F:OpenMetaverse.Animations.EXPRESS_SMILE">
8575 <summary>Microseconds since the start of SL 4-hour day</summary> 10280 <summary>Agent with a smile</summary>
8576 </member> 10281 </member>
8577 <member name="M:OpenMetaverse.GridManager.OnCoarseLocationUpdate(OpenMetaverse.CoarseLocationUpdateEventArgs)"> 10282 <member name="F:OpenMetaverse.Animations.EXPRESS_SURPRISE">
8578 <summary>Raises the CoarseLocationUpdate event</summary> 10283 <summary>Agent expressing surprise</summary>
8579 <param name="e">A CoarseLocationUpdateEventArgs object containing the
8580 data sent by simulator</param>
8581 </member> 10284 </member>
8582 <member name="M:OpenMetaverse.GridManager.OnGridRegion(OpenMetaverse.GridRegionEventArgs)"> 10285 <member name="F:OpenMetaverse.Animations.EXPRESS_TONGUE_OUT">
8583 <summary>Raises the GridRegion event</summary> 10286 <summary>Agent sticking tongue out</summary>
8584 <param name="e">A GridRegionEventArgs object containing the
8585 data sent by simulator</param>
8586 </member> 10287 </member>
8587 <member name="M:OpenMetaverse.GridManager.OnGridLayer(OpenMetaverse.GridLayerEventArgs)"> 10288 <member name="F:OpenMetaverse.Animations.EXPRESS_TOOTHSMILE">
8588 <summary>Raises the GridLayer event</summary> 10289 <summary>Agent with big toothy smile</summary>
8589 <param name="e">A GridLayerEventArgs object containing the
8590 data sent by simulator</param>
8591 </member> 10290 </member>
8592 <member name="M:OpenMetaverse.GridManager.OnGridItems(OpenMetaverse.GridItemsEventArgs)"> 10291 <member name="F:OpenMetaverse.Animations.EXPRESS_WINK">
8593 <summary>Raises the GridItems event</summary> 10292 <summary>Agent winking</summary>
8594 <param name="e">A GridItemEventArgs object containing the
8595 data sent by simulator</param>
8596 </member> 10293 </member>
8597 <member name="M:OpenMetaverse.GridManager.OnRegionHandleReply(OpenMetaverse.RegionHandleReplyEventArgs)"> 10294 <member name="F:OpenMetaverse.Animations.EXPRESS_WORRY">
8598 <summary>Raises the RegionHandleReply event</summary> 10295 <summary>Agent expressing worry</summary>
8599 <param name="e">A RegionHandleReplyEventArgs object containing the
8600 data sent by simulator</param>
8601 </member> 10296 </member>
8602 <member name="M:OpenMetaverse.GridManager.RequestMapLayer(OpenMetaverse.GridLayerType)"> 10297 <member name="F:OpenMetaverse.Animations.FALLDOWN">
8603 <summary> 10298 <summary>Agent falling down</summary>
8604 </summary>
8605 <param name="layer">
8606 </param>
8607 </member> 10299 </member>
8608 <member name="M:OpenMetaverse.GridManager.RequestMapRegion(System.String,OpenMetaverse.GridLayerType)"> 10300 <member name="F:OpenMetaverse.Animations.FEMALE_WALK">
8609 <summary> 10301 <summary>Agent walking (feminine version)</summary>
8610 Request a map layer
8611 </summary>
8612 <param name="regionName">The name of the region</param>
8613 <param name="layer">The type of layer</param>
8614 </member> 10302 </member>
8615 <member name="M:OpenMetaverse.GridManager.RequestMapBlocks(OpenMetaverse.GridLayerType,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.Boolean)"> 10303 <member name="F:OpenMetaverse.Animations.FINGER_WAG">
8616 <summary> 10304 <summary>Agent wagging finger (disapproval)</summary>
8617 </summary>
8618 <param name="layer">
8619 </param>
8620 <param name="minX">
8621 </param>
8622 <param name="minY">
8623 </param>
8624 <param name="maxX">
8625 </param>
8626 <param name="maxY">
8627 </param>
8628 <param name="returnNonExistent">
8629 </param>
8630 </member> 10305 </member>
8631 <member name="M:OpenMetaverse.GridManager.MapItems(System.UInt64,OpenMetaverse.GridItemType,OpenMetaverse.GridLayerType,System.Int32)"> 10306 <member name="F:OpenMetaverse.Animations.FIST_PUMP">
8632 <summary> 10307 <summary>I'm not sure I want to know</summary>
8633 </summary>
8634 <param name="regionHandle">
8635 </param>
8636 <param name="item">
8637 </param>
8638 <param name="layer">
8639 </param>
8640 <param name="timeoutMS">
8641 </param>
8642 <returns>
8643 </returns>
8644 </member> 10308 </member>
8645 <member name="M:OpenMetaverse.GridManager.RequestMapItems(System.UInt64,OpenMetaverse.GridItemType,OpenMetaverse.GridLayerType)"> 10309 <member name="F:OpenMetaverse.Animations.FLY">
8646 <summary> 10310 <summary>Agent in superman position</summary>
8647 </summary>
8648 <param name="regionHandle">
8649 </param>
8650 <param name="item">
8651 </param>
8652 <param name="layer">
8653 </param>
8654 </member> 10311 </member>
8655 <member name="M:OpenMetaverse.GridManager.RequestMainlandSims(OpenMetaverse.GridLayerType)"> 10312 <member name="F:OpenMetaverse.Animations.FLYSLOW">
8656 <summary> 10313 <summary>Agent in superman position</summary>
8657 Request data for all mainland (Linden managed) simulators
8658 </summary>
8659 </member> 10314 </member>
8660 <member name="M:OpenMetaverse.GridManager.RequestRegionHandle(OpenMetaverse.UUID)"> 10315 <member name="F:OpenMetaverse.Animations.HELLO">
8661 <summary> 10316 <summary>Agent greeting another</summary>
8662 Request the region handle for the specified region UUID
8663 </summary>
8664 <param name="regionID">UUID of the region to look up</param>
8665 </member> 10317 </member>
8666 <member name="M:OpenMetaverse.GridManager.GetGridRegion(System.String,OpenMetaverse.GridLayerType,OpenMetaverse.GridRegion@)"> 10318 <member name="F:OpenMetaverse.Animations.HOLD_BAZOOKA_R">
8667 <summary> 10319 <summary>Agent holding bazooka (right handed)</summary>
8668 Get grid region information using the region name, this function
8669 will block until it can find the region or gives up
8670 </summary>
8671 <param name="name">Name of sim you're looking for</param>
8672 <param name="layer">Layer that you are requesting</param>
8673 <param name="region">Will contain a GridRegion for the sim you're
8674 looking for if successful, otherwise an empty structure</param>
8675 <returns>True if the GridRegion was successfully fetched, otherwise
8676 false</returns>
8677 </member> 10320 </member>
8678 <member name="M:OpenMetaverse.GridManager.MapBlockReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10321 <member name="F:OpenMetaverse.Animations.HOLD_BOW_L">
8679 <summary>Process an incoming packet and raise the appropriate events</summary> 10322 <summary>Agent holding a bow (left handed)</summary>
8680 <param name="sender">The sender</param>
8681 <param name="e">The EventArgs object containing the packet data</param>
8682 </member> 10323 </member>
8683 <member name="M:OpenMetaverse.GridManager.MapItemReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10324 <member name="F:OpenMetaverse.Animations.HOLD_HANDGUN_R">
8684 <summary>Process an incoming packet and raise the appropriate events</summary> 10325 <summary>Agent holding a handgun (right handed)</summary>
8685 <param name="sender">The sender</param>
8686 <param name="e">The EventArgs object containing the packet data</param>
8687 </member> 10326 </member>
8688 <member name="M:OpenMetaverse.GridManager.SimulatorViewerTimeMessageHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10327 <member name="F:OpenMetaverse.Animations.HOLD_RIFLE_R">
8689 <summary>Process an incoming packet and raise the appropriate events</summary> 10328 <summary>Agent holding a rifle (right handed)</summary>
8690 <param name="sender">The sender</param>
8691 <param name="e">The EventArgs object containing the packet data</param>
8692 </member> 10329 </member>
8693 <member name="M:OpenMetaverse.GridManager.CoarseLocationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10330 <member name="F:OpenMetaverse.Animations.HOLD_THROW_R">
8694 <summary>Process an incoming packet and raise the appropriate events</summary> 10331 <summary>Agent throwing an object (right handed)</summary>
8695 <param name="sender">The sender</param>
8696 <param name="e">The EventArgs object containing the packet data</param>
8697 </member> 10332 </member>
8698 <member name="M:OpenMetaverse.GridManager.RegionHandleReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10333 <member name="F:OpenMetaverse.Animations.HOVER">
8699 <summary>Process an incoming packet and raise the appropriate events</summary> 10334 <summary>Agent in static hover</summary>
8700 <param name="sender">The sender</param>
8701 <param name="e">The EventArgs object containing the packet data</param>
8702 </member> 10335 </member>
8703 <member name="T:OpenMetaverse.GroupMember"> 10336 <member name="F:OpenMetaverse.Animations.HOVER_DOWN">
8704 <summary> 10337 <summary>Agent hovering downward</summary>
8705 Avatar group management
8706 </summary>
8707 </member> 10338 </member>
8708 <member name="F:OpenMetaverse.GroupMember.ID"> 10339 <member name="F:OpenMetaverse.Animations.HOVER_UP">
8709 <summary>Key of Group Member</summary> 10340 <summary>Agent hovering upward</summary>
8710 </member> 10341 </member>
8711 <member name="F:OpenMetaverse.GroupMember.Contribution"> 10342 <member name="F:OpenMetaverse.Animations.IMPATIENT">
8712 <summary>Total land contribution</summary> 10343 <summary>Agent being impatient</summary>
8713 </member> 10344 </member>
8714 <member name="F:OpenMetaverse.GroupMember.OnlineStatus"> 10345 <member name="F:OpenMetaverse.Animations.JUMP">
8715 <summary>Online status information</summary> 10346 <summary>Agent jumping</summary>
8716 </member> 10347 </member>
8717 <member name="F:OpenMetaverse.GroupMember.Powers"> 10348 <member name="F:OpenMetaverse.Animations.JUMP_FOR_JOY">
8718 <summary>Abilities that the Group Member has</summary> 10349 <summary>Agent jumping with fervor</summary>
8719 </member> 10350 </member>
8720 <member name="F:OpenMetaverse.GroupMember.Title"> 10351 <member name="F:OpenMetaverse.Animations.KISS_MY_BUTT">
8721 <summary>Current group title</summary> 10352 <summary>Agent point to lips then rear end</summary>
8722 </member> 10353 </member>
8723 <member name="F:OpenMetaverse.GroupMember.IsOwner"> 10354 <member name="F:OpenMetaverse.Animations.LAND">
8724 <summary>Is a group owner</summary> 10355 <summary>Agent landing from jump, finished flight, etc</summary>
8725 </member> 10356 </member>
8726 <member name="T:OpenMetaverse.GroupRole"> 10357 <member name="F:OpenMetaverse.Animations.LAUGH_SHORT">
8727 <summary> 10358 <summary>Agent laughing</summary>
8728 Role manager for a group
8729 </summary>
8730 </member> 10359 </member>
8731 <member name="F:OpenMetaverse.GroupRole.GroupID"> 10360 <member name="F:OpenMetaverse.Animations.MEDIUM_LAND">
8732 <summary>Key of the group</summary> 10361 <summary>Agent landing from jump, finished flight, etc</summary>
8733 </member> 10362 </member>
8734 <member name="F:OpenMetaverse.GroupRole.ID"> 10363 <member name="F:OpenMetaverse.Animations.MOTORCYCLE_SIT">
8735 <summary>Key of Role</summary> 10364 <summary>Agent sitting on a motorcycle</summary>
8736 </member> 10365 </member>
8737 <member name="F:OpenMetaverse.GroupRole.Name"> 10366 <member name="F:OpenMetaverse.Animations.MUSCLE_BEACH">
8738 <summary>Name of Role</summary> 10367 <summary></summary>
8739 </member> 10368 </member>
8740 <member name="F:OpenMetaverse.GroupRole.Title"> 10369 <member name="F:OpenMetaverse.Animations.NO">
8741 <summary>Group Title associated with Role</summary> 10370 <summary>Agent moving head side to side</summary>
8742 </member> 10371 </member>
8743 <member name="F:OpenMetaverse.GroupRole.Description"> 10372 <member name="F:OpenMetaverse.Animations.NO_UNHAPPY">
8744 <summary>Description of Role</summary> 10373 <summary>Agent moving head side to side with unhappy expression</summary>
8745 </member> 10374 </member>
8746 <member name="F:OpenMetaverse.GroupRole.Powers"> 10375 <member name="F:OpenMetaverse.Animations.NYAH_NYAH">
8747 <summary>Abilities Associated with Role</summary> 10376 <summary>Agent taunting another</summary>
8748 </member> 10377 </member>
8749 <member name="M:OpenMetaverse.GroupRole.ToString"> 10378 <member name="F:OpenMetaverse.Animations.ONETWO_PUNCH">
8750 <summary>Returns the role's title</summary> 10379 <summary></summary>
8751 <returns>The role's title</returns>
8752 </member> 10380 </member>
8753 <member name="T:OpenMetaverse.GroupTitle"> 10381 <member name="F:OpenMetaverse.Animations.PEACE">
8754 <summary> 10382 <summary>Agent giving peace sign</summary>
8755 Class to represent Group Title
8756 </summary>
8757 </member> 10383 </member>
8758 <member name="F:OpenMetaverse.GroupTitle.GroupID"> 10384 <member name="F:OpenMetaverse.Animations.POINT_ME">
8759 <summary>Key of the group</summary> 10385 <summary>Agent pointing at self</summary>
8760 </member> 10386 </member>
8761 <member name="F:OpenMetaverse.GroupTitle.RoleID"> 10387 <member name="F:OpenMetaverse.Animations.POINT_YOU">
8762 <summary>ID of the role title belongs to</summary> 10388 <summary>Agent pointing at another</summary>
8763 </member> 10389 </member>
8764 <member name="F:OpenMetaverse.GroupTitle.Title"> 10390 <member name="F:OpenMetaverse.Animations.PRE_JUMP">
8765 <summary>Group Title</summary> 10391 <summary>Agent preparing for jump (bending knees)</summary>
8766 </member> 10392 </member>
8767 <member name="F:OpenMetaverse.GroupTitle.Selected"> 10393 <member name="F:OpenMetaverse.Animations.PUNCH_LEFT">
8768 <summary>Whether title is Active</summary> 10394 <summary>Agent punching with left hand</summary>
8769 </member> 10395 </member>
8770 <member name="M:OpenMetaverse.GroupTitle.ToString"> 10396 <member name="F:OpenMetaverse.Animations.PUNCH_RIGHT">
8771 <summary>Returns group title</summary> 10397 <summary>Agent punching with right hand</summary>
8772 </member> 10398 </member>
8773 <member name="T:OpenMetaverse.Group"> 10399 <member name="F:OpenMetaverse.Animations.REPULSED">
8774 <summary> 10400 <summary>Agent acting repulsed</summary>
8775 Represents a group on the grid
8776 </summary>
8777 </member> 10401 </member>
8778 <member name="F:OpenMetaverse.Group.ID"> 10402 <member name="F:OpenMetaverse.Animations.ROUNDHOUSE_KICK">
8779 <summary>Key of Group</summary> 10403 <summary>Agent trying to be Chuck Norris</summary>
8780 </member> 10404 </member>
8781 <member name="F:OpenMetaverse.Group.InsigniaID"> 10405 <member name="F:OpenMetaverse.Animations.RPS_COUNTDOWN">
8782 <summary>Key of Group Insignia</summary> 10406 <summary>Rocks, Paper, Scissors 1, 2, 3</summary>
8783 </member> 10407 </member>
8784 <member name="F:OpenMetaverse.Group.FounderID"> 10408 <member name="F:OpenMetaverse.Animations.RPS_PAPER">
8785 <summary>Key of Group Founder</summary> 10409 <summary>Agent with hand flat over other hand</summary>
8786 </member> 10410 </member>
8787 <member name="F:OpenMetaverse.Group.OwnerRole"> 10411 <member name="F:OpenMetaverse.Animations.RPS_ROCK">
8788 <summary>Key of Group Role for Owners</summary> 10412 <summary>Agent with fist over other hand</summary>
8789 </member> 10413 </member>
8790 <member name="F:OpenMetaverse.Group.Name"> 10414 <member name="F:OpenMetaverse.Animations.RPS_SCISSORS">
8791 <summary>Name of Group</summary> 10415 <summary>Agent with two fingers spread over other hand</summary>
8792 </member> 10416 </member>
8793 <member name="F:OpenMetaverse.Group.Charter"> 10417 <member name="F:OpenMetaverse.Animations.RUN">
8794 <summary>Text of Group Charter</summary> 10418 <summary>Agent running</summary>
8795 </member> 10419 </member>
8796 <member name="F:OpenMetaverse.Group.MemberTitle"> 10420 <member name="F:OpenMetaverse.Animations.SAD">
8797 <summary>Title of "everyone" role</summary> 10421 <summary>Agent appearing sad</summary>
8798 </member> 10422 </member>
8799 <member name="F:OpenMetaverse.Group.OpenEnrollment"> 10423 <member name="F:OpenMetaverse.Animations.SALUTE">
8800 <summary>Is the group open for enrolement to everyone</summary> 10424 <summary>Agent saluting</summary>
8801 </member> 10425 </member>
8802 <member name="F:OpenMetaverse.Group.ShowInList"> 10426 <member name="F:OpenMetaverse.Animations.SHOOT_BOW_L">
8803 <summary>Will group show up in search</summary> 10427 <summary>Agent shooting bow (left handed)</summary>
8804 </member> 10428 </member>
8805 <member name="F:OpenMetaverse.Group.Powers"> 10429 <member name="F:OpenMetaverse.Animations.SHOUT">
8806 <summary> 10430 <summary>Agent cupping mouth as if shouting</summary>
8807 </summary>
8808 </member> 10431 </member>
8809 <member name="F:OpenMetaverse.Group.AcceptNotices"> 10432 <member name="F:OpenMetaverse.Animations.SHRUG">
8810 <summary> 10433 <summary>Agent shrugging shoulders</summary>
8811 </summary>
8812 </member> 10434 </member>
8813 <member name="F:OpenMetaverse.Group.AllowPublish"> 10435 <member name="F:OpenMetaverse.Animations.SIT">
8814 <summary> 10436 <summary>Agent in sit position</summary>
8815 </summary>
8816 </member> 10437 </member>
8817 <member name="F:OpenMetaverse.Group.MaturePublish"> 10438 <member name="F:OpenMetaverse.Animations.SIT_FEMALE">
8818 <summary>Is the group Mature</summary> 10439 <summary>Agent in sit position (feminine)</summary>
8819 </member> 10440 </member>
8820 <member name="F:OpenMetaverse.Group.MembershipFee"> 10441 <member name="F:OpenMetaverse.Animations.SIT_GENERIC">
8821 <summary>Cost of group membership</summary> 10442 <summary>Agent in sit position (generic)</summary>
8822 </member> 10443 </member>
8823 <member name="F:OpenMetaverse.Group.Money"> 10444 <member name="F:OpenMetaverse.Animations.SIT_GROUND">
8824 <summary> 10445 <summary>Agent sitting on ground</summary>
8825 </summary>
8826 </member> 10446 </member>
8827 <member name="F:OpenMetaverse.Group.Contribution"> 10447 <member name="F:OpenMetaverse.Animations.SIT_GROUND_staticRAINED">
8828 <summary> 10448 <summary>Agent sitting on ground</summary>
8829 </summary>
8830 </member> 10449 </member>
8831 <member name="F:OpenMetaverse.Group.GroupMembershipCount"> 10450 <member name="F:OpenMetaverse.Animations.SIT_TO_STAND">
8832 <summary>The total number of current members this group has</summary> 10451 <summary></summary>
8833 </member> 10452 </member>
8834 <member name="F:OpenMetaverse.Group.GroupRolesCount"> 10453 <member name="F:OpenMetaverse.Animations.SLEEP">
8835 <summary>The number of roles this group has configured</summary> 10454 <summary>Agent sleeping on side</summary>
8836 </member> 10455 </member>
8837 <member name="F:OpenMetaverse.Group.ListInProfile"> 10456 <member name="F:OpenMetaverse.Animations.SMOKE_IDLE">
8838 <summary>Show this group in agent's profile</summary> 10457 <summary>Agent smoking</summary>
8839 </member> 10458 </member>
8840 <member name="M:OpenMetaverse.Group.ToString"> 10459 <member name="F:OpenMetaverse.Animations.SMOKE_INHALE">
8841 <summary>Returns the name of the group</summary> 10460 <summary>Agent inhaling smoke</summary>
8842 <returns>A string containing the name of the group</returns>
8843 </member> 10461 </member>
8844 <member name="T:OpenMetaverse.Vote"> 10462 <member name="F:OpenMetaverse.Animations.SMOKE_THROW_DOWN">
8845 <summary> 10463 <summary></summary>
8846 A group Vote
8847 </summary>
8848 </member> 10464 </member>
8849 <member name="F:OpenMetaverse.Vote.Candidate"> 10465 <member name="F:OpenMetaverse.Animations.SNAPSHOT">
8850 <summary>Key of Avatar who created Vote</summary> 10466 <summary>Agent taking a picture</summary>
8851 </member> 10467 </member>
8852 <member name="F:OpenMetaverse.Vote.VoteString"> 10468 <member name="F:OpenMetaverse.Animations.STAND">
8853 <summary>Text of the Vote proposal</summary> 10469 <summary>Agent standing</summary>
8854 </member> 10470 </member>
8855 <member name="F:OpenMetaverse.Vote.NumVotes"> 10471 <member name="F:OpenMetaverse.Animations.STANDUP">
8856 <summary>Total number of votes</summary> 10472 <summary>Agent standing up</summary>
8857 </member> 10473 </member>
8858 <member name="T:OpenMetaverse.GroupProposal"> 10474 <member name="F:OpenMetaverse.Animations.STAND_1">
8859 <summary> 10475 <summary>Agent standing</summary>
8860 A group proposal
8861 </summary>
8862 </member> 10476 </member>
8863 <member name="F:OpenMetaverse.GroupProposal.VoteText"> 10477 <member name="F:OpenMetaverse.Animations.STAND_2">
8864 <summary>The Text of the proposal</summary> 10478 <summary>Agent standing</summary>
8865 </member> 10479 </member>
8866 <member name="F:OpenMetaverse.GroupProposal.Quorum"> 10480 <member name="F:OpenMetaverse.Animations.STAND_3">
8867 <summary>The minimum number of members that must vote before proposal passes or failes</summary> 10481 <summary>Agent standing</summary>
8868 </member> 10482 </member>
8869 <member name="F:OpenMetaverse.GroupProposal.Majority"> 10483 <member name="F:OpenMetaverse.Animations.STAND_4">
8870 <summary>The required ration of yes/no votes required for vote to pass</summary> 10484 <summary>Agent standing</summary>
8871 <remarks>The three options are Simple Majority, 2/3 Majority, and Unanimous</remarks>
8872 TODO: this should be an enum</member>
8873 <member name="F:OpenMetaverse.GroupProposal.Duration">
8874 <summary>The duration in days votes are accepted</summary>
8875 </member> 10485 </member>
8876 <member name="T:OpenMetaverse.GroupAccountSummary"> 10486 <member name="F:OpenMetaverse.Animations.STRETCH">
8877 <summary> 10487 <summary>Agent stretching</summary>
8878 </summary>
8879 </member> 10488 </member>
8880 <member name="F:OpenMetaverse.GroupAccountSummary.IntervalDays"> 10489 <member name="F:OpenMetaverse.Animations.STRIDE">
8881 <summary> 10490 <summary>Agent in stride (fast walk)</summary>
8882 </summary>
8883 </member> 10491 </member>
8884 <member name="F:OpenMetaverse.GroupAccountSummary.CurrentInterval"> 10492 <member name="F:OpenMetaverse.Animations.SURF">
8885 <summary> 10493 <summary>Agent surfing</summary>
8886 </summary>
8887 </member> 10494 </member>
8888 <member name="F:OpenMetaverse.GroupAccountSummary.StartDate"> 10495 <member name="F:OpenMetaverse.Animations.SURPRISE">
8889 <summary> 10496 <summary>Agent acting surprised</summary>
8890 </summary>
8891 </member> 10497 </member>
8892 <member name="F:OpenMetaverse.GroupAccountSummary.Balance"> 10498 <member name="F:OpenMetaverse.Animations.SWORD_STRIKE">
8893 <summary> 10499 <summary>Agent striking with a sword</summary>
8894 </summary>
8895 </member> 10500 </member>
8896 <member name="F:OpenMetaverse.GroupAccountSummary.TotalCredits"> 10501 <member name="F:OpenMetaverse.Animations.TALK">
8897 <summary> 10502 <summary>Agent talking (lips moving)</summary>
8898 </summary>
8899 </member> 10503 </member>
8900 <member name="F:OpenMetaverse.GroupAccountSummary.TotalDebits"> 10504 <member name="F:OpenMetaverse.Animations.TANTRUM">
8901 <summary> 10505 <summary>Agent throwing a tantrum</summary>
8902 </summary>
8903 </member> 10506 </member>
8904 <member name="F:OpenMetaverse.GroupAccountSummary.ObjectTaxCurrent"> 10507 <member name="F:OpenMetaverse.Animations.THROW_R">
8905 <summary> 10508 <summary>Agent throwing an object (right handed)</summary>
8906 </summary>
8907 </member> 10509 </member>
8908 <member name="F:OpenMetaverse.GroupAccountSummary.LightTaxCurrent"> 10510 <member name="F:OpenMetaverse.Animations.TRYON_SHIRT">
8909 <summary> 10511 <summary>Agent trying on a shirt</summary>
8910 </summary>
8911 </member> 10512 </member>
8912 <member name="F:OpenMetaverse.GroupAccountSummary.LandTaxCurrent"> 10513 <member name="F:OpenMetaverse.Animations.TURNLEFT">
8913 <summary> 10514 <summary>Agent turning to the left</summary>
8914 </summary>
8915 </member> 10515 </member>
8916 <member name="F:OpenMetaverse.GroupAccountSummary.GroupTaxCurrent"> 10516 <member name="F:OpenMetaverse.Animations.TURNRIGHT">
8917 <summary> 10517 <summary>Agent turning to the right</summary>
8918 </summary>
8919 </member> 10518 </member>
8920 <member name="F:OpenMetaverse.GroupAccountSummary.ParcelDirFeeCurrent"> 10519 <member name="F:OpenMetaverse.Animations.TYPE">
8921 <summary> 10520 <summary>Agent typing</summary>
8922 </summary>
8923 </member> 10521 </member>
8924 <member name="F:OpenMetaverse.GroupAccountSummary.ObjectTaxEstimate"> 10522 <member name="F:OpenMetaverse.Animations.WALK">
8925 <summary> 10523 <summary>Agent walking</summary>
8926 </summary>
8927 </member> 10524 </member>
8928 <member name="F:OpenMetaverse.GroupAccountSummary.LightTaxEstimate"> 10525 <member name="F:OpenMetaverse.Animations.WHISPER">
8929 <summary> 10526 <summary>Agent whispering</summary>
8930 </summary>
8931 </member> 10527 </member>
8932 <member name="F:OpenMetaverse.GroupAccountSummary.LandTaxEstimate"> 10528 <member name="F:OpenMetaverse.Animations.WHISTLE">
8933 <summary> 10529 <summary>Agent whispering with fingers in mouth</summary>
8934 </summary>
8935 </member> 10530 </member>
8936 <member name="F:OpenMetaverse.GroupAccountSummary.GroupTaxEstimate"> 10531 <member name="F:OpenMetaverse.Animations.WINK">
8937 <summary> 10532 <summary>Agent winking</summary>
8938 </summary>
8939 </member> 10533 </member>
8940 <member name="F:OpenMetaverse.GroupAccountSummary.ParcelDirFeeEstimate"> 10534 <member name="F:OpenMetaverse.Animations.WINK_HOLLYWOOD">
8941 <summary> 10535 <summary>Agent winking</summary>
8942 </summary>
8943 </member> 10536 </member>
8944 <member name="F:OpenMetaverse.GroupAccountSummary.NonExemptMembers"> 10537 <member name="F:OpenMetaverse.Animations.WORRY">
8945 <summary> 10538 <summary>Agent worried</summary>
8946 </summary>
8947 </member> 10539 </member>
8948 <member name="F:OpenMetaverse.GroupAccountSummary.LastTaxDate"> 10540 <member name="F:OpenMetaverse.Animations.YES">
8949 <summary> 10541 <summary>Agent nodding yes</summary>
8950 </summary>
8951 </member> 10542 </member>
8952 <member name="F:OpenMetaverse.GroupAccountSummary.TaxDate"> 10543 <member name="F:OpenMetaverse.Animations.YES_HAPPY">
8953 <summary> 10544 <summary>Agent nodding yes with happy face</summary>
8954 </summary>
8955 </member> 10545 </member>
8956 <member name="T:OpenMetaverse.GroupNotice"> 10546 <member name="F:OpenMetaverse.Animations.YOGA_FLOAT">
8957 <summary> 10547 <summary>Agent floating with legs and arms crossed</summary>
8958 Struct representing a group notice
8959 </summary>
8960 </member> 10548 </member>
8961 <member name="F:OpenMetaverse.GroupNotice.Subject"> 10549 <member name="M:OpenMetaverse.Animations.ToDictionary">
8962 <summary> 10550 <summary>
10551 A dictionary containing all pre-defined animations
8963 </summary> 10552 </summary>
10553 <returns>A dictionary containing the pre-defined animations,
10554 where the key is the animations ID, and the value is a string
10555 containing a name to identify the purpose of the animation</returns>
8964 </member> 10556 </member>
8965 <member name="F:OpenMetaverse.GroupNotice.Message"> 10557 <member name="T:OpenMetaverse.AgentThrottle">
8966 <summary> 10558 <summary>
10559 Throttles the network traffic for various different traffic types.
10560 Access this class through GridClient.Throttle
8967 </summary> 10561 </summary>
8968 </member> 10562 </member>
8969 <member name="F:OpenMetaverse.GroupNotice.AttachmentID"> 10563 <member name="M:OpenMetaverse.AgentThrottle.#ctor(OpenMetaverse.GridClient)">
8970 <summary> 10564 <summary>
10565 Default constructor, uses a default high total of 1500 KBps (1536000)
8971 </summary> 10566 </summary>
8972 </member> 10567 </member>
8973 <member name="F:OpenMetaverse.GroupNotice.OwnerID"> 10568 <member name="M:OpenMetaverse.AgentThrottle.#ctor(System.Byte[],System.Int32)">
8974 <summary> 10569 <summary>
10570 Constructor that decodes an existing AgentThrottle packet in to
10571 individual values
8975 </summary> 10572 </summary>
10573 <param name="data">Reference to the throttle data in an AgentThrottle
10574 packet</param>
10575 <param name="pos">Offset position to start reading at in the
10576 throttle data</param>
10577 <remarks>This is generally not needed in clients as the server will
10578 never send a throttle packet to the client</remarks>
8976 </member> 10579 </member>
8977 <member name="M:OpenMetaverse.GroupNotice.SerializeAttachment"> 10580 <member name="M:OpenMetaverse.AgentThrottle.Set">
8978 <summary> 10581 <summary>
10582 Send an AgentThrottle packet to the current server using the
10583 current values
8979 </summary> 10584 </summary>
8980 <returns>
8981 </returns>
8982 </member> 10585 </member>
8983 <member name="T:OpenMetaverse.GroupNoticesListEntry"> 10586 <member name="M:OpenMetaverse.AgentThrottle.Set(OpenMetaverse.Simulator)">
8984 <summary> 10587 <summary>
8985 Struct representing a group notice list entry 10588 Send an AgentThrottle packet to the specified server using the
10589 current values
8986 </summary> 10590 </summary>
8987 </member> 10591 </member>
8988 <member name="F:OpenMetaverse.GroupNoticesListEntry.NoticeID"> 10592 <member name="M:OpenMetaverse.AgentThrottle.ToBytes">
8989 <summary>Notice ID</summary>
8990 </member>
8991 <member name="F:OpenMetaverse.GroupNoticesListEntry.Timestamp">
8992 <summary>Creation timestamp of notice</summary>
8993 </member>
8994 <member name="F:OpenMetaverse.GroupNoticesListEntry.FromName">
8995 <summary>Agent name who created notice</summary>
8996 </member>
8997 <member name="F:OpenMetaverse.GroupNoticesListEntry.Subject">
8998 <summary>Notice subject</summary>
8999 </member>
9000 <member name="F:OpenMetaverse.GroupNoticesListEntry.HasAttachment">
9001 <summary>Is there an attachment?</summary>
9002 </member>
9003 <member name="F:OpenMetaverse.GroupNoticesListEntry.AssetType">
9004 <summary>Attachment Type</summary>
9005 </member>
9006 <member name="T:OpenMetaverse.ChatSessionMember">
9007 <summary> 10593 <summary>
9008 Struct representing a member of a group chat session and their settings 10594 Convert the current throttle values to a byte array that can be put
10595 in an AgentThrottle packet
9009 </summary> 10596 </summary>
10597 <returns>Byte array containing all the throttle values</returns>
9010 </member> 10598 </member>
9011 <member name="F:OpenMetaverse.ChatSessionMember.AvatarKey"> 10599 <member name="P:OpenMetaverse.AgentThrottle.Resend">
9012 <summary>The <see cref="T:OpenMetaverse.UUID" /> of the Avatar</summary> 10600 <summary>Maximum bits per second for resending unacknowledged packets</summary>
9013 </member> 10601 </member>
9014 <member name="F:OpenMetaverse.ChatSessionMember.CanVoiceChat"> 10602 <member name="P:OpenMetaverse.AgentThrottle.Land">
9015 <summary>True if user has voice chat enabled</summary> 10603 <summary>Maximum bits per second for LayerData terrain</summary>
9016 </member> 10604 </member>
9017 <member name="F:OpenMetaverse.ChatSessionMember.IsModerator"> 10605 <member name="P:OpenMetaverse.AgentThrottle.Wind">
9018 <summary>True of Avatar has moderator abilities</summary> 10606 <summary>Maximum bits per second for LayerData wind data</summary>
9019 </member> 10607 </member>
9020 <member name="F:OpenMetaverse.ChatSessionMember.MuteText"> 10608 <member name="P:OpenMetaverse.AgentThrottle.Cloud">
9021 <summary>True if a moderator has muted this avatars chat</summary> 10609 <summary>Maximum bits per second for LayerData clouds</summary>
9022 </member> 10610 </member>
9023 <member name="F:OpenMetaverse.ChatSessionMember.MuteVoice"> 10611 <member name="P:OpenMetaverse.AgentThrottle.Task">
9024 <summary>True if a moderator has muted this avatars voice</summary> 10612 <summary>Unknown, includes object data</summary>
9025 </member> 10613 </member>
9026 <member name="T:OpenMetaverse.GroupRoleUpdate"> 10614 <member name="P:OpenMetaverse.AgentThrottle.Texture">
9027 <summary> 10615 <summary>Maximum bits per second for textures</summary>
9028 Role update flags
9029 </summary>
9030 </member> 10616 </member>
9031 <member name="F:OpenMetaverse.GroupRoleUpdate.NoUpdate"> 10617 <member name="P:OpenMetaverse.AgentThrottle.Asset">
9032 <summary> 10618 <summary>Maximum bits per second for downloaded assets</summary>
9033 </summary>
9034 </member> 10619 </member>
9035 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdateData"> 10620 <member name="P:OpenMetaverse.AgentThrottle.Total">
9036 <summary> 10621 <summary>Maximum bits per second the entire connection, divided up
9037 </summary> 10622 between invidiual streams using default multipliers</summary>
9038 </member> 10623 </member>
9039 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdatePowers"> 10624 <member name="T:OpenMetaverse.Voice.VoiceSession">
9040 <summary> 10625 <summary>
10626 Represents a single Voice Session to the Vivox service.
9041 </summary> 10627 </summary>
9042 </member> 10628 </member>
9043 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdateAll"> 10629 <member name="M:OpenMetaverse.Voice.VoiceSession.Close">
9044 <summary> 10630 <summary>
10631 Close this session.
9045 </summary> 10632 </summary>
9046 </member> 10633 </member>
9047 <member name="F:OpenMetaverse.GroupRoleUpdate.Create"> 10634 <member name="M:OpenMetaverse.Voice.VoiceSession.FindParticipant(System.String)">
9048 <summary> 10635 <summary>
10636 Look up an existing Participants in this session
9049 </summary> 10637 </summary>
10638 <param name="puri"></param>
10639 <returns></returns>
9050 </member> 10640 </member>
9051 <member name="F:OpenMetaverse.GroupRoleUpdate.Delete"> 10641 <member name="M:OpenMetaverse.Voice.VoiceParticipant.IDFromName(System.String)">
9052 <summary> 10642 <summary>
10643 Extract the avatar UUID encoded in a SIP URI
9053 </summary> 10644 </summary>
10645 <param name="inName"></param>
10646 <returns></returns>
9054 </member> 10647 </member>
9055 <member name="F:OpenMetaverse.GroupPowers.None"> 10648 <member name="T:OpenMetaverse.MediaPermission">
9056 <summary> 10649 <summary>
10650 Permissions for control of object media
9057 </summary> 10651 </summary>
9058 </member> 10652 </member>
9059 <member name="F:OpenMetaverse.GroupPowers.Invite"> 10653 <member name="T:OpenMetaverse.MediaControls">
9060 <summary>Can send invitations to groups default role</summary>
9061 </member>
9062 <member name="F:OpenMetaverse.GroupPowers.Eject">
9063 <summary>Can eject members from group</summary>
9064 </member>
9065 <member name="F:OpenMetaverse.GroupPowers.ChangeOptions">
9066 <summary>Can toggle 'Open Enrollment' and change 'Signup fee'</summary>
9067 </member>
9068 <member name="F:OpenMetaverse.GroupPowers.MemberVisible">
9069 <summary>Member is visible in the public member list</summary>
9070 </member>
9071 <member name="F:OpenMetaverse.GroupPowers.CreateRole">
9072 <summary>Can create new roles</summary>
9073 </member>
9074 <member name="F:OpenMetaverse.GroupPowers.DeleteRole">
9075 <summary>Can delete existing roles</summary>
9076 </member>
9077 <member name="F:OpenMetaverse.GroupPowers.RoleProperties">
9078 <summary>Can change Role names, titles and descriptions</summary>
9079 </member>
9080 <member name="F:OpenMetaverse.GroupPowers.AssignMemberLimited">
9081 <summary>Can assign other members to assigners role</summary>
9082 </member>
9083 <member name="F:OpenMetaverse.GroupPowers.AssignMember">
9084 <summary>Can assign other members to any role</summary>
9085 </member>
9086 <member name="F:OpenMetaverse.GroupPowers.RemoveMember">
9087 <summary>Can remove members from roles</summary>
9088 </member>
9089 <member name="F:OpenMetaverse.GroupPowers.ChangeActions">
9090 <summary>Can assign and remove abilities in roles</summary>
9091 </member>
9092 <member name="F:OpenMetaverse.GroupPowers.ChangeIdentity">
9093 <summary>Can change group Charter, Insignia, 'Publish on the web' and which
9094 members are publicly visible in group member listings</summary>
9095 </member>
9096 <member name="F:OpenMetaverse.GroupPowers.LandDeed">
9097 <summary>Can buy land or deed land to group</summary>
9098 </member>
9099 <member name="F:OpenMetaverse.GroupPowers.LandRelease">
9100 <summary>Can abandon group owned land to Governor Linden on mainland, or Estate owner for
9101 private estates</summary>
9102 </member>
9103 <member name="F:OpenMetaverse.GroupPowers.LandSetSale">
9104 <summary>Can set land for-sale information on group owned parcels</summary>
9105 </member>
9106 <member name="F:OpenMetaverse.GroupPowers.LandDivideJoin">
9107 <summary>Can subdivide and join parcels</summary>
9108 </member>
9109 <member name="F:OpenMetaverse.GroupPowers.JoinChat">
9110 <summary>Can join group chat sessions</summary>
9111 </member>
9112 <member name="F:OpenMetaverse.GroupPowers.AllowVoiceChat">
9113 <summary>Can use voice chat in Group Chat sessions</summary>
9114 </member>
9115 <member name="F:OpenMetaverse.GroupPowers.ModerateChat">
9116 <summary>Can moderate group chat sessions</summary>
9117 </member>
9118 <member name="F:OpenMetaverse.GroupPowers.FindPlaces">
9119 <summary>Can toggle "Show in Find Places" and set search category</summary>
9120 </member>
9121 <member name="F:OpenMetaverse.GroupPowers.LandChangeIdentity">
9122 <summary>Can change parcel name, description, and 'Publish on web' settings</summary>
9123 </member>
9124 <member name="F:OpenMetaverse.GroupPowers.SetLandingPoint">
9125 <summary>Can set the landing point and teleport routing on group land</summary>
9126 </member>
9127 <member name="F:OpenMetaverse.GroupPowers.ChangeMedia">
9128 <summary>Can change music and media settings</summary>
9129 </member>
9130 <member name="F:OpenMetaverse.GroupPowers.LandEdit">
9131 <summary>Can toggle 'Edit Terrain' option in Land settings</summary>
9132 </member>
9133 <member name="F:OpenMetaverse.GroupPowers.LandOptions">
9134 <summary>Can toggle various About Land &gt; Options settings</summary>
9135 </member>
9136 <member name="F:OpenMetaverse.GroupPowers.AllowEditLand">
9137 <summary>Can always terraform land, even if parcel settings have it turned off</summary>
9138 </member>
9139 <member name="F:OpenMetaverse.GroupPowers.AllowFly">
9140 <summary>Can always fly while over group owned land</summary>
9141 </member>
9142 <member name="F:OpenMetaverse.GroupPowers.AllowRez">
9143 <summary>Can always rez objects on group owned land</summary>
9144 </member>
9145 <member name="F:OpenMetaverse.GroupPowers.AllowLandmark">
9146 <summary>Can always create landmarks for group owned parcels</summary>
9147 </member>
9148 <member name="F:OpenMetaverse.GroupPowers.AllowSetHome">
9149 <summary>Can set home location on any group owned parcel</summary>
9150 </member>
9151 <member name="F:OpenMetaverse.GroupPowers.LandManageAllowed">
9152 <summary>Can modify public access settings for group owned parcels</summary>
9153 </member>
9154 <member name="F:OpenMetaverse.GroupPowers.LandManageBanned">
9155 <summary>Can manager parcel ban lists on group owned land</summary>
9156 </member>
9157 <member name="F:OpenMetaverse.GroupPowers.LandManagePasses">
9158 <summary>Can manage pass list sales information</summary>
9159 </member>
9160 <member name="F:OpenMetaverse.GroupPowers.LandEjectAndFreeze">
9161 <summary>Can eject and freeze other avatars on group owned land</summary>
9162 </member>
9163 <member name="F:OpenMetaverse.GroupPowers.ReturnGroupSet">
9164 <summary>Can return objects set to group</summary>
9165 </member>
9166 <member name="F:OpenMetaverse.GroupPowers.ReturnNonGroup">
9167 <summary>Can return non-group owned/set objects</summary>
9168 </member>
9169 <member name="F:OpenMetaverse.GroupPowers.ReturnGroupOwned">
9170 <summary>Can return group owned objects</summary>
9171 </member>
9172 <member name="F:OpenMetaverse.GroupPowers.LandGardening">
9173 <summary>Can landscape using Linden plants</summary>
9174 </member>
9175 <member name="F:OpenMetaverse.GroupPowers.DeedObject">
9176 <summary>Can deed objects to group</summary>
9177 </member>
9178 <member name="F:OpenMetaverse.GroupPowers.ObjectManipulate">
9179 <summary>Can move group owned objects</summary>
9180 </member>
9181 <member name="F:OpenMetaverse.GroupPowers.ObjectSetForSale">
9182 <summary>Can set group owned objects for-sale</summary>
9183 </member>
9184 <member name="F:OpenMetaverse.GroupPowers.Accountable">
9185 <summary>Pay group liabilities and receive group dividends</summary>
9186 </member>
9187 <member name="F:OpenMetaverse.GroupPowers.SendNotices">
9188 <summary>Can send group notices</summary>
9189 </member>
9190 <member name="F:OpenMetaverse.GroupPowers.ReceiveNotices">
9191 <summary>Can receive group notices</summary>
9192 </member>
9193 <member name="F:OpenMetaverse.GroupPowers.StartProposal">
9194 <summary>Can create group proposals</summary>
9195 </member>
9196 <member name="F:OpenMetaverse.GroupPowers.VoteOnProposal">
9197 <summary>Can vote on group proposals</summary>
9198 </member>
9199 <member name="T:OpenMetaverse.GroupManager">
9200 <summary> 10654 <summary>
9201 Handles all network traffic related to reading and writing group 10655 Style of cotrols that shold be displayed to the user
9202 information
9203 </summary> 10656 </summary>
9204 </member> 10657 </member>
9205 <member name="M:OpenMetaverse.GroupManager.#ctor(OpenMetaverse.GridClient)"> 10658 <member name="T:OpenMetaverse.MediaEntry">
9206 <summary> 10659 <summary>
9207 Construct a new instance of the GroupManager class 10660 Class representing media data for a single face
9208 </summary> 10661 </summary>
9209 <param name="client">A reference to the current <seealso cref="T:OpenMetaverse.GridClient" /> instance</param>
9210 </member>
9211 <member name="F:OpenMetaverse.GroupManager.m_CurrentGroups">
9212 <summary>The event subscribers. null if no subcribers</summary>
9213 </member>
9214 <member name="F:OpenMetaverse.GroupManager.m_CurrentGroupsLock">
9215 <summary>Thread sync lock object</summary>
9216 </member>
9217 <member name="F:OpenMetaverse.GroupManager.m_GroupNames">
9218 <summary>The event subscribers. null if no subcribers</summary>
9219 </member>
9220 <member name="F:OpenMetaverse.GroupManager.m_GroupNamesLock">
9221 <summary>Thread sync lock object</summary>
9222 </member>
9223 <member name="F:OpenMetaverse.GroupManager.m_GroupProfile">
9224 <summary>The event subscribers. null if no subcribers</summary>
9225 </member>
9226 <member name="F:OpenMetaverse.GroupManager.m_GroupProfileLock">
9227 <summary>Thread sync lock object</summary>
9228 </member>
9229 <member name="F:OpenMetaverse.GroupManager.m_GroupMembers">
9230 <summary>The event subscribers. null if no subcribers</summary>
9231 </member>
9232 <member name="F:OpenMetaverse.GroupManager.m_GroupMembersLock">
9233 <summary>Thread sync lock object</summary>
9234 </member>
9235 <member name="F:OpenMetaverse.GroupManager.m_GroupRoles">
9236 <summary>The event subscribers. null if no subcribers</summary>
9237 </member>
9238 <member name="F:OpenMetaverse.GroupManager.m_GroupRolesLock">
9239 <summary>Thread sync lock object</summary>
9240 </member>
9241 <member name="F:OpenMetaverse.GroupManager.m_GroupRoleMembers">
9242 <summary>The event subscribers. null if no subcribers</summary>
9243 </member>
9244 <member name="F:OpenMetaverse.GroupManager.m_GroupRolesMembersLock">
9245 <summary>Thread sync lock object</summary>
9246 </member>
9247 <member name="F:OpenMetaverse.GroupManager.m_GroupTitles">
9248 <summary>The event subscribers. null if no subcribers</summary>
9249 </member>
9250 <member name="F:OpenMetaverse.GroupManager.m_GroupTitlesLock">
9251 <summary>Thread sync lock object</summary>
9252 </member>
9253 <member name="F:OpenMetaverse.GroupManager.m_GroupAccountSummary">
9254 <summary>The event subscribers. null if no subcribers</summary>
9255 </member>
9256 <member name="F:OpenMetaverse.GroupManager.m_GroupAccountSummaryLock">
9257 <summary>Thread sync lock object</summary>
9258 </member>
9259 <member name="F:OpenMetaverse.GroupManager.m_GroupCreated">
9260 <summary>The event subscribers. null if no subcribers</summary>
9261 </member>
9262 <member name="F:OpenMetaverse.GroupManager.m_GroupCreatedLock">
9263 <summary>Thread sync lock object</summary>
9264 </member>
9265 <member name="F:OpenMetaverse.GroupManager.m_GroupJoined">
9266 <summary>The event subscribers. null if no subcribers</summary>
9267 </member>
9268 <member name="F:OpenMetaverse.GroupManager.m_GroupJoinedLock">
9269 <summary>Thread sync lock object</summary>
9270 </member>
9271 <member name="F:OpenMetaverse.GroupManager.m_GroupLeft">
9272 <summary>The event subscribers. null if no subcribers</summary>
9273 </member>
9274 <member name="F:OpenMetaverse.GroupManager.m_GroupLeftLock">
9275 <summary>Thread sync lock object</summary>
9276 </member>
9277 <member name="F:OpenMetaverse.GroupManager.m_GroupDropped">
9278 <summary>The event subscribers. null if no subcribers</summary>
9279 </member>
9280 <member name="F:OpenMetaverse.GroupManager.m_GroupDroppedLock">
9281 <summary>Thread sync lock object</summary>
9282 </member>
9283 <member name="F:OpenMetaverse.GroupManager.m_GroupMemberEjected">
9284 <summary>The event subscribers. null if no subcribers</summary>
9285 </member>
9286 <member name="F:OpenMetaverse.GroupManager.m_GroupMemberEjectedLock">
9287 <summary>Thread sync lock object</summary>
9288 </member>
9289 <member name="F:OpenMetaverse.GroupManager.m_GroupNoticesListReply">
9290 <summary>The event subscribers. null if no subcribers</summary>
9291 </member>
9292 <member name="F:OpenMetaverse.GroupManager.m_GroupNoticesListReplyLock">
9293 <summary>Thread sync lock object</summary>
9294 </member>
9295 <member name="F:OpenMetaverse.GroupManager.m_GroupInvitation">
9296 <summary>The event subscribers. null if no subcribers</summary>
9297 </member>
9298 <member name="F:OpenMetaverse.GroupManager.m_GroupInvitationLock">
9299 <summary>Thread sync lock object</summary>
9300 </member>
9301 <member name="F:OpenMetaverse.GroupManager.Client">
9302 <summary>A reference to the current <seealso cref="T:OpenMetaverse.GridClient" /> instance</summary>
9303 </member>
9304 <member name="F:OpenMetaverse.GroupManager.GroupMembersRequests">
9305 <summary>Currently-active group members requests</summary>
9306 </member>
9307 <member name="F:OpenMetaverse.GroupManager.GroupRolesRequests">
9308 <summary>Currently-active group roles requests</summary>
9309 </member>
9310 <member name="F:OpenMetaverse.GroupManager.GroupRolesMembersRequests">
9311 <summary>Currently-active group role-member requests</summary>
9312 </member>
9313 <member name="F:OpenMetaverse.GroupManager.TempGroupMembers">
9314 <summary>Dictionary keeping group members while request is in progress</summary>
9315 </member>
9316 <member name="F:OpenMetaverse.GroupManager.TempGroupRolesMembers">
9317 <summary>Dictionary keeping mebmer/role mapping while request is in progress</summary>
9318 </member>
9319 <member name="F:OpenMetaverse.GroupManager.TempGroupRoles">
9320 <summary>Dictionary keeping GroupRole information while request is in progress</summary>
9321 </member>
9322 <member name="F:OpenMetaverse.GroupManager.GroupName2KeyCache">
9323 <summary>Caches group name lookups</summary>
9324 </member>
9325 <member name="E:OpenMetaverse.GroupManager.CurrentGroups">
9326 <summary>Raised when the simulator sends us data containing
9327 our current group membership</summary>
9328 </member>
9329 <member name="E:OpenMetaverse.GroupManager.GroupNamesReply">
9330 <summary>Raised when the simulator responds to a RequestGroupName
9331 or RequestGroupNames request</summary>
9332 </member>
9333 <member name="E:OpenMetaverse.GroupManager.GroupProfile">
9334 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupProfile(OpenMetaverse.UUID)" /> request</summary>
9335 </member>
9336 <member name="E:OpenMetaverse.GroupManager.GroupMembersReply">
9337 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupMembers(OpenMetaverse.UUID)" /> request</summary>
9338 </member>
9339 <member name="E:OpenMetaverse.GroupManager.GroupRoleDataReply">
9340 <summary>Raised when the simulator responds to a <see cref="!:RequestGroupRoleData" /> request</summary>
9341 </member> 10662 </member>
9342 <member name="E:OpenMetaverse.GroupManager.GroupRoleMembersReply"> 10663 <member name="F:OpenMetaverse.MediaEntry.EnableAlterntiveImage">
9343 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupRolesMembers(OpenMetaverse.UUID)" /> request</summary> 10664 <summary>Is display of the alternative image enabled</summary>
9344 </member>
9345 <member name="E:OpenMetaverse.GroupManager.GroupTitlesReply">
9346 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupTitles(OpenMetaverse.UUID)" /> request</summary>
9347 </member>
9348 <member name="E:OpenMetaverse.GroupManager.GroupAccountSummaryReply">
9349 <summary>Raised when a response to a RequestGroupAccountSummary is returned
9350 by the simulator</summary>
9351 </member>
9352 <member name="E:OpenMetaverse.GroupManager.GroupCreatedReply">
9353 <summary>Raised when a request to create a group is successful</summary>
9354 </member>
9355 <member name="E:OpenMetaverse.GroupManager.GroupJoinedReply">
9356 <summary>Raised when a request to join a group either
9357 fails or succeeds</summary>
9358 </member>
9359 <member name="E:OpenMetaverse.GroupManager.GroupLeaveReply">
9360 <summary>Raised when a request to leave a group either
9361 fails or succeeds</summary>
9362 </member>
9363 <member name="E:OpenMetaverse.GroupManager.GroupDropped">
9364 <summary>Raised when A group is removed from the group server</summary>
9365 </member>
9366 <member name="E:OpenMetaverse.GroupManager.GroupMemberEjected">
9367 <summary>Raised when a request to eject a member from a group either
9368 fails or succeeds</summary>
9369 </member>
9370 <member name="E:OpenMetaverse.GroupManager.GroupNoticesListReply">
9371 <summary>Raised when the simulator sends us group notices</summary>
9372 <seealso cref="M:OpenMetaverse.GroupManager.RequestGroupNoticesList(OpenMetaverse.UUID)" />
9373 </member>
9374 <member name="E:OpenMetaverse.GroupManager.GroupInvitation">
9375 <summary>Raised when another agent invites our avatar to join a group</summary>
9376 </member>
9377 <member name="M:OpenMetaverse.GroupManager.OnCurrentGroups(OpenMetaverse.CurrentGroupsEventArgs)">
9378 <summary>Raises the CurrentGroups event</summary>
9379 <param name="e">A CurrentGroupsEventArgs object containing the
9380 data sent from the simulator</param>
9381 </member>
9382 <member name="M:OpenMetaverse.GroupManager.OnGroupNamesReply(OpenMetaverse.GroupNamesEventArgs)">
9383 <summary>Raises the GroupNamesReply event</summary>
9384 <param name="e">A GroupNamesEventArgs object containing the
9385 data response from the simulator</param>
9386 </member> 10665 </member>
9387 <member name="M:OpenMetaverse.GroupManager.OnGroupProfile(OpenMetaverse.GroupProfileEventArgs)"> 10666 <member name="F:OpenMetaverse.MediaEntry.AutoLoop">
9388 <summary>Raises the GroupProfile event</summary> 10667 <summary>Should media auto loop</summary>
9389 <param name="e">An GroupProfileEventArgs object containing the
9390 data returned from the simulator</param>
9391 </member> 10668 </member>
9392 <member name="M:OpenMetaverse.GroupManager.OnGroupMembersReply(OpenMetaverse.GroupMembersReplyEventArgs)"> 10669 <member name="F:OpenMetaverse.MediaEntry.AutoPlay">
9393 <summary>Raises the GroupMembers event</summary> 10670 <summary>Shoule media be auto played</summary>
9394 <param name="e">A GroupMembersEventArgs object containing the
9395 data returned from the simulator</param>
9396 </member> 10671 </member>
9397 <member name="M:OpenMetaverse.GroupManager.OnGroupRoleDataReply(OpenMetaverse.GroupRolesDataReplyEventArgs)"> 10672 <member name="F:OpenMetaverse.MediaEntry.AutoScale">
9398 <summary>Raises the GroupRolesDataReply event</summary> 10673 <summary>Auto scale media to prim face</summary>
9399 <param name="e">A GroupRolesDataReplyEventArgs object containing the
9400 data returned from the simulator</param>
9401 </member> 10674 </member>
9402 <member name="M:OpenMetaverse.GroupManager.OnGroupRoleMembers(OpenMetaverse.GroupRolesMembersReplyEventArgs)"> 10675 <member name="F:OpenMetaverse.MediaEntry.AutoZoom">
9403 <summary>Raises the GroupRoleMembersReply event</summary> 10676 <summary>Should viewer automatically zoom in on the face when clicked</summary>
9404 <param name="e">A GroupRolesRoleMembersReplyEventArgs object containing the
9405 data returned from the simulator</param>
9406 </member> 10677 </member>
9407 <member name="M:OpenMetaverse.GroupManager.OnGroupTitles(OpenMetaverse.GroupTitlesReplyEventArgs)"> 10678 <member name="F:OpenMetaverse.MediaEntry.InteractOnFirstClick">
9408 <summary>Raises the GroupTitlesReply event</summary> 10679 <summary>Should viewer interpret first click as interaction with the media
9409 <param name="e">A GroupTitlesReplyEventArgs object containing the 10680 or when false should the first click be treated as zoom in commadn</summary>
9410 data returned from the simulator</param>
9411 </member> 10681 </member>
9412 <member name="M:OpenMetaverse.GroupManager.OnGroupAccountSummaryReply(OpenMetaverse.GroupAccountSummaryReplyEventArgs)"> 10682 <member name="F:OpenMetaverse.MediaEntry.Controls">
9413 <summary>Raises the GroupAccountSummary event</summary> 10683 <summary>Style of controls viewer should display when
9414 <param name="e">A GroupAccountSummaryReplyEventArgs object containing the 10684 viewer media on this face</summary>
9415 data returned from the simulator</param>
9416 </member> 10685 </member>
9417 <member name="M:OpenMetaverse.GroupManager.OnGroupCreatedReply(OpenMetaverse.GroupCreatedReplyEventArgs)"> 10686 <member name="F:OpenMetaverse.MediaEntry.HomeURL">
9418 <summary>Raises the GroupCreated event</summary> 10687 <summary>Starting URL for the media</summary>
9419 <param name="e">An GroupCreatedEventArgs object containing the
9420 data returned from the simulator</param>
9421 </member> 10688 </member>
9422 <member name="M:OpenMetaverse.GroupManager.OnGroupJoinedReply(OpenMetaverse.GroupOperationEventArgs)"> 10689 <member name="F:OpenMetaverse.MediaEntry.CurrentURL">
9423 <summary>Raises the GroupJoined event</summary> 10690 <summary>Currently navigated URL</summary>
9424 <param name="e">A GroupOperationEventArgs object containing the
9425 result of the operation returned from the simulator</param>
9426 </member> 10691 </member>
9427 <member name="M:OpenMetaverse.GroupManager.OnGroupLeaveReply(OpenMetaverse.GroupOperationEventArgs)"> 10692 <member name="F:OpenMetaverse.MediaEntry.Height">
9428 <summary>Raises the GroupLeft event</summary> 10693 <summary>Media height in pixes</summary>
9429 <param name="e">A GroupOperationEventArgs object containing the
9430 result of the operation returned from the simulator</param>
9431 </member> 10694 </member>
9432 <member name="M:OpenMetaverse.GroupManager.OnGroupDropped(OpenMetaverse.GroupDroppedEventArgs)"> 10695 <member name="F:OpenMetaverse.MediaEntry.Width">
9433 <summary>Raises the GroupDropped event</summary> 10696 <summary>Media width in pixels</summary>
9434 <param name="e">An GroupDroppedEventArgs object containing the
9435 the group your agent left</param>
9436 </member> 10697 </member>
9437 <member name="M:OpenMetaverse.GroupManager.OnGroupMemberEjected(OpenMetaverse.GroupOperationEventArgs)"> 10698 <member name="F:OpenMetaverse.MediaEntry.ControlPermissions">
9438 <summary>Raises the GroupMemberEjected event</summary> 10699 <summary>Who can controls the media</summary>
9439 <param name="e">An GroupMemberEjectedEventArgs object containing the
9440 data returned from the simulator</param>
9441 </member> 10700 </member>
9442 <member name="M:OpenMetaverse.GroupManager.OnGroupNoticesListReply(OpenMetaverse.GroupNoticesListReplyEventArgs)"> 10701 <member name="F:OpenMetaverse.MediaEntry.InteractPermissions">
9443 <summary>Raises the GroupNoticesListReply event</summary> 10702 <summary>Who can interact with the media</summary>
9444 <param name="e">An GroupNoticesListReplyEventArgs object containing the
9445 data returned from the simulator</param>
9446 </member> 10703 </member>
9447 <member name="M:OpenMetaverse.GroupManager.OnGroupInvitation(OpenMetaverse.GroupInvitationEventArgs)"> 10704 <member name="F:OpenMetaverse.MediaEntry.EnableWhiteList">
9448 <summary>Raises the GroupInvitation event</summary> 10705 <summary>Is URL whitelist enabled</summary>
9449 <param name="e">An GroupInvitationEventArgs object containing the
9450 data returned from the simulator</param>
9451 </member> 10706 </member>
9452 <member name="M:OpenMetaverse.GroupManager.RequestCurrentGroups"> 10707 <member name="F:OpenMetaverse.MediaEntry.WhiteList">
9453 <summary> 10708 <summary>Array of URLs that are whitelisted</summary>
9454 Request a current list of groups the avatar is a member of.
9455 </summary>
9456 <remarks>CAPS Event Queue must be running for this to work since the results
9457 come across CAPS.</remarks>
9458 </member> 10709 </member>
9459 <member name="M:OpenMetaverse.GroupManager.RequestGroupName(OpenMetaverse.UUID)"> 10710 <member name="M:OpenMetaverse.MediaEntry.GetOSD">
9460 <summary> 10711 <summary>
9461 Lookup name of group based on groupID 10712 Serialize to OSD
9462 </summary> 10713 </summary>
9463 <param name="groupID">groupID of group to lookup name for.</param> 10714 <returns>OSDMap with the serialized data</returns>
9464 </member> 10715 </member>
9465 <member name="M:OpenMetaverse.GroupManager.RequestGroupNames(System.Collections.Generic.List{OpenMetaverse.UUID})"> 10716 <member name="M:OpenMetaverse.MediaEntry.FromOSD(OpenMetaverse.StructuredData.OSD)">
9466 <summary> 10717 <summary>
9467 Request lookup of multiple group names 10718 Deserialize from OSD data
9468 </summary> 10719 </summary>
9469 <param name="groupIDs">List of group IDs to request.</param> 10720 <param name="osd">Serialized OSD data</param>
9470 </member> 10721 <returns>Deserialized object</returns>
9471 <member name="M:OpenMetaverse.GroupManager.RequestGroupProfile(OpenMetaverse.UUID)">
9472 <summary>Lookup group profile data such as name, enrollment, founder, logo, etc</summary>
9473 <remarks>Subscribe to <code>OnGroupProfile</code> event to receive the results.</remarks>
9474 <param name="group">group ID (UUID)</param>
9475 </member>
9476 <member name="M:OpenMetaverse.GroupManager.RequestGroupMembers(OpenMetaverse.UUID)">
9477 <summary>Request a list of group members.</summary>
9478 <remarks>Subscribe to <code>OnGroupMembers</code> event to receive the results.</remarks>
9479 <param name="group">group ID (UUID)</param>
9480 <returns>UUID of the request, use to index into cache</returns>
9481 </member>
9482 <member name="M:OpenMetaverse.GroupManager.RequestGroupRoles(OpenMetaverse.UUID)">
9483 <summary>Request group roles</summary>
9484 <remarks>Subscribe to <code>OnGroupRoles</code> event to receive the results.</remarks>
9485 <param name="group">group ID (UUID)</param>
9486 <returns>UUID of the request, use to index into cache</returns>
9487 </member>
9488 <member name="M:OpenMetaverse.GroupManager.RequestGroupRolesMembers(OpenMetaverse.UUID)">
9489 <summary>Request members (members,role) role mapping for a group.</summary>
9490 <remarks>Subscribe to <code>OnGroupRolesMembers</code> event to receive the results.</remarks>
9491 <param name="group">group ID (UUID)</param>
9492 <returns>UUID of the request, use to index into cache</returns>
9493 </member>
9494 <member name="M:OpenMetaverse.GroupManager.RequestGroupTitles(OpenMetaverse.UUID)">
9495 <summary>Request a groups Titles</summary>
9496 <remarks>Subscribe to <code>OnGroupTitles</code> event to receive the results.</remarks>
9497 <param name="group">group ID (UUID)</param>
9498 <returns>UUID of the request, use to index into cache</returns>
9499 </member>
9500 <member name="M:OpenMetaverse.GroupManager.RequestGroupAccountSummary(OpenMetaverse.UUID,System.Int32,System.Int32)">
9501 <summary>Begin to get the group account summary</summary>
9502 <remarks>Subscribe to the <code>OnGroupAccountSummary</code> event to receive the results.</remarks>
9503 <param name="group">group ID (UUID)</param>
9504 <param name="intervalDays">How long of an interval</param>
9505 <param name="currentInterval">Which interval (0 for current, 1 for last)</param>
9506 </member>
9507 <member name="M:OpenMetaverse.GroupManager.Invite(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.UUID)">
9508 <summary>Invites a user to a group</summary>
9509 <param name="group">The group to invite to</param>
9510 <param name="roles">A list of roles to invite a person to</param>
9511 <param name="personkey">Key of person to invite</param>
9512 </member>
9513 <member name="M:OpenMetaverse.GroupManager.ActivateGroup(OpenMetaverse.UUID)">
9514 <summary>Set a group as the current active group</summary>
9515 <param name="id">group ID (UUID)</param>
9516 </member>
9517 <member name="M:OpenMetaverse.GroupManager.ActivateTitle(OpenMetaverse.UUID,OpenMetaverse.UUID)">
9518 <summary>Change the role that determines your active title</summary>
9519 <param name="group">Group ID to use</param>
9520 <param name="role">Role ID to change to</param>
9521 </member>
9522 <member name="M:OpenMetaverse.GroupManager.SetGroupContribution(OpenMetaverse.UUID,System.Int32)">
9523 <summary>Set this avatar's tier contribution</summary>
9524 <param name="group">Group ID to change tier in</param>
9525 <param name="contribution">amount of tier to donate</param>
9526 </member> 10722 </member>
9527 <member name="M:OpenMetaverse.GroupManager.SetGroupAcceptNotices(OpenMetaverse.UUID,System.Boolean,System.Boolean)"> 10723 <member name="T:OpenMetaverse.Primitive">
9528 <summary> 10724 <summary>
9529 Save wheather agent wants to accept group notices and list this group in their profile 10725 Particle system specific enumerators, flags and methods.
9530 </summary> 10726 </summary>
9531 <param name="groupID">Group <see cref="T:OpenMetaverse.UUID" /></param>
9532 <param name="acceptNotices">Accept notices from this group</param>
9533 <param name="listInProfile">List this group in the profile</param>
9534 </member> 10727 </member>
9535 <member name="M:OpenMetaverse.GroupManager.RequestJoinGroup(OpenMetaverse.UUID)"> 10728 <member name="F:OpenMetaverse.Primitive.MediaVersion">
9536 <summary>Request to join a group</summary>
9537 <remarks>Subscribe to <code>OnGroupJoined</code> event for confirmation.</remarks>
9538 <param name="id">group ID (UUID) to join.</param>
9539 </member>
9540 <member name="M:OpenMetaverse.GroupManager.RequestCreateGroup(OpenMetaverse.Group)">
9541 <summary> 10729 <summary>
9542 Request to create a new group. If the group is successfully 10730 Current version of the media data for the prim
9543 created, L$100 will automatically be deducted
9544 </summary> 10731 </summary>
9545 <remarks>Subscribe to <code>OnGroupCreated</code> event to receive confirmation.</remarks>
9546 <param name="group">Group struct containing the new group info</param>
9547 </member>
9548 <member name="M:OpenMetaverse.GroupManager.UpdateGroup(OpenMetaverse.UUID,OpenMetaverse.Group)">
9549 <summary>Update a group's profile and other information</summary>
9550 <param name="id">Groups ID (UUID) to update.</param>
9551 <param name="group">Group struct to update.</param>
9552 </member>
9553 <member name="M:OpenMetaverse.GroupManager.EjectUser(OpenMetaverse.UUID,OpenMetaverse.UUID)">
9554 <summary>Eject a user from a group</summary>
9555 <param name="group">Group ID to eject the user from</param>
9556 <param name="member">Avatar's key to eject</param>
9557 </member>
9558 <member name="M:OpenMetaverse.GroupManager.UpdateRole(OpenMetaverse.GroupRole)">
9559 <summary>Update role information</summary>
9560 <param name="role">Modified role to be updated</param>
9561 </member>
9562 <member name="M:OpenMetaverse.GroupManager.CreateRole(OpenMetaverse.UUID,OpenMetaverse.GroupRole)">
9563 <summary>Create a new group role</summary>
9564 <param name="group">Group ID to update</param>
9565 <param name="role">Role to create</param>
9566 </member>
9567 <member name="M:OpenMetaverse.GroupManager.DeleteRole(OpenMetaverse.UUID,OpenMetaverse.UUID)">
9568 <summary>Delete a group role</summary>
9569 <param name="group">Group ID to update</param>
9570 <param name="roleID">Role to delete</param>
9571 </member>
9572 <member name="M:OpenMetaverse.GroupManager.RemoveFromRole(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
9573 <summary>Remove an avatar from a role</summary>
9574 <param name="group">Group ID to update</param>
9575 <param name="role">Role ID to be removed from</param>
9576 <param name="member">Avatar's Key to remove</param>
9577 </member>
9578 <member name="M:OpenMetaverse.GroupManager.AddToRole(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
9579 <summary>Assign an avatar to a role</summary>
9580 <param name="group">Group ID to update</param>
9581 <param name="role">Role ID to assign to</param>
9582 <param name="member">Avatar's ID to assign to role</param>
9583 </member>
9584 <member name="M:OpenMetaverse.GroupManager.RequestGroupNoticesList(OpenMetaverse.UUID)">
9585 <summary>Request the group notices list</summary>
9586 <param name="group">Group ID to fetch notices for</param>
9587 </member>
9588 <member name="M:OpenMetaverse.GroupManager.RequestGroupNotice(OpenMetaverse.UUID)">
9589 <summary>Request a group notice by key</summary>
9590 <param name="noticeID">ID of group notice</param>
9591 </member>
9592 <member name="M:OpenMetaverse.GroupManager.SendGroupNotice(OpenMetaverse.UUID,OpenMetaverse.GroupNotice)">
9593 <summary>Send out a group notice</summary>
9594 <param name="group">Group ID to update</param>
9595 <param name="notice">
9596 <code>GroupNotice</code> structure containing notice data</param>
9597 </member>
9598 <member name="M:OpenMetaverse.GroupManager.StartProposal(OpenMetaverse.UUID,OpenMetaverse.GroupProposal)">
9599 <summary>Start a group proposal (vote)</summary>
9600 <param name="group">The Group ID to send proposal to</param>
9601 <param name="prop">
9602 <code>GroupProposal</code> structure containing the proposal</param>
9603 </member>
9604 <member name="M:OpenMetaverse.GroupManager.LeaveGroup(OpenMetaverse.UUID)">
9605 <summary>Request to leave a group</summary>
9606 <remarks>Subscribe to <code>OnGroupLeft</code> event to receive confirmation</remarks>
9607 <param name="groupID">The group to leave</param>
9608 </member>
9609 <member name="M:OpenMetaverse.GroupManager.AgentDropGroupHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9610 <summary>Process an incoming packet and raise the appropriate events</summary>
9611 <param name="sender">The sender</param>
9612 <param name="e">The EventArgs object containing the packet data</param>
9613 </member>
9614 <member name="M:OpenMetaverse.GroupManager.GroupProfileReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9615 <summary>Process an incoming packet and raise the appropriate events</summary>
9616 <param name="sender">The sender</param>
9617 <param name="e">The EventArgs object containing the packet data</param>
9618 </member>
9619 <member name="M:OpenMetaverse.GroupManager.GroupNoticesListReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9620 <summary>Process an incoming packet and raise the appropriate events</summary>
9621 <param name="sender">The sender</param>
9622 <param name="e">The EventArgs object containing the packet data</param>
9623 </member>
9624 <member name="M:OpenMetaverse.GroupManager.GroupTitlesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9625 <summary>Process an incoming packet and raise the appropriate events</summary>
9626 <param name="sender">The sender</param>
9627 <param name="e">The EventArgs object containing the packet data</param>
9628 </member> 10732 </member>
9629 <member name="M:OpenMetaverse.GroupManager.GroupMembersHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 10733 <member name="F:OpenMetaverse.Primitive.FaceMedia">
9630 <summary>Process an incoming packet and raise the appropriate events</summary>
9631 <param name="sender">The sender</param>
9632 <param name="e">The EventArgs object containing the packet data</param>
9633 </member>
9634 <member name="M:OpenMetaverse.GroupManager.GroupRoleDataReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9635 <summary>Process an incoming packet and raise the appropriate events</summary>
9636 <param name="sender">The sender</param>
9637 <param name="e">The EventArgs object containing the packet data</param>
9638 </member>
9639 <member name="M:OpenMetaverse.GroupManager.GroupRoleMembersReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9640 <summary>Process an incoming packet and raise the appropriate events</summary>
9641 <param name="sender">The sender</param>
9642 <param name="e">The EventArgs object containing the packet data</param>
9643 </member>
9644 <member name="M:OpenMetaverse.GroupManager.GroupActiveProposalItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9645 <summary>Process an incoming packet and raise the appropriate events</summary>
9646 <param name="sender">The sender</param>
9647 <param name="e">The EventArgs object containing the packet data</param>
9648 </member>
9649 <member name="M:OpenMetaverse.GroupManager.GroupVoteHistoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9650 <summary>Process an incoming packet and raise the appropriate events</summary>
9651 <param name="sender">The sender</param>
9652 <param name="e">The EventArgs object containing the packet data</param>
9653 </member>
9654 <member name="M:OpenMetaverse.GroupManager.GroupAccountSummaryReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9655 <summary>Process an incoming packet and raise the appropriate events</summary>
9656 <param name="sender">The sender</param>
9657 <param name="e">The EventArgs object containing the packet data</param>
9658 </member>
9659 <member name="M:OpenMetaverse.GroupManager.CreateGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9660 <summary>Process an incoming packet and raise the appropriate events</summary>
9661 <param name="sender">The sender</param>
9662 <param name="e">The EventArgs object containing the packet data</param>
9663 </member>
9664 <member name="M:OpenMetaverse.GroupManager.JoinGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9665 <summary>Process an incoming packet and raise the appropriate events</summary>
9666 <param name="sender">The sender</param>
9667 <param name="e">The EventArgs object containing the packet data</param>
9668 </member>
9669 <member name="M:OpenMetaverse.GroupManager.LeaveGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9670 <summary>Process an incoming packet and raise the appropriate events</summary>
9671 <param name="sender">The sender</param>
9672 <param name="e">The EventArgs object containing the packet data</param>
9673 </member>
9674 <member name="M:OpenMetaverse.GroupManager.UUIDGroupNameReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9675 <summary>Process an incoming packet and raise the appropriate events</summary>
9676 <param name="sender">The sender</param>
9677 <param name="e">The EventArgs object containing the packet data</param>
9678 </member>
9679 <member name="M:OpenMetaverse.GroupManager.EjectGroupMemberReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
9680 <summary>Process an incoming packet and raise the appropriate events</summary>
9681 <param name="sender">The sender</param>
9682 <param name="e">The EventArgs object containing the packet data</param>
9683 </member>
9684 <member name="T:OpenMetaverse.CurrentGroupsEventArgs">
9685 <summary>Contains the current groups your agent is a member of</summary>
9686 </member>
9687 <member name="M:OpenMetaverse.CurrentGroupsEventArgs.#ctor(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.Group})">
9688 <summary>Construct a new instance of the CurrentGroupsEventArgs class</summary>
9689 <param name="groups">The current groups your agent is a member of</param>
9690 </member>
9691 <member name="P:OpenMetaverse.CurrentGroupsEventArgs.Groups">
9692 <summary>Get the current groups your agent is a member of</summary>
9693 </member>
9694 <member name="T:OpenMetaverse.GroupNamesEventArgs">
9695 <summary>A Dictionary of group names, where the Key is the groups ID and the value is the groups name</summary>
9696 </member>
9697 <member name="M:OpenMetaverse.GroupNamesEventArgs.#ctor(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,System.String})">
9698 <summary>Construct a new instance of the GroupNamesEventArgs class</summary>
9699 <param name="groupNames">The Group names dictionary</param>
9700 </member>
9701 <member name="P:OpenMetaverse.GroupNamesEventArgs.GroupNames">
9702 <summary>Get the Group Names dictionary</summary>
9703 </member>
9704 <member name="T:OpenMetaverse.GroupMembersReplyEventArgs">
9705 <summary>Represents the members of a group</summary>
9706 </member>
9707 <member name="M:OpenMetaverse.GroupMembersReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupMember})">
9708 <summary> 10734 <summary>
9709 Construct a new instance of the GroupMembersReplyEventArgs class 10735 Array of media entries indexed by face number
9710 </summary> 10736 </summary>
9711 <param name="requestID">The ID of the request</param>
9712 <param name="groupID">The ID of the group</param>
9713 <param name="members">The membership list of the group</param>
9714 </member>
9715 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.RequestID">
9716 <summary>Get the ID as returned by the request to correlate
9717 this result set and the request</summary>
9718 </member>
9719 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.GroupID">
9720 <summary>Get the ID of the group</summary>
9721 </member>
9722 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.Members">
9723 <summary>Get the dictionary of members</summary>
9724 </member>
9725 <member name="T:OpenMetaverse.GroupRolesDataReplyEventArgs">
9726 <summary>Represents the roles associated with a group</summary>
9727 </member>
9728 <member name="M:OpenMetaverse.GroupRolesDataReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupRole})">
9729 <summary>Construct a new instance of the GroupRolesDataReplyEventArgs class</summary>
9730 <param name="requestID">The ID as returned by the request to correlate
9731 this result set and the request</param>
9732 <param name="groupID">The ID of the group</param>
9733 <param name="roles">The dictionary containing the roles</param>
9734 </member>
9735 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.RequestID">
9736 <summary>Get the ID as returned by the request to correlate
9737 this result set and the request</summary>
9738 </member>
9739 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.GroupID">
9740 <summary>Get the ID of the group</summary>
9741 </member>
9742 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.Roles">
9743 <summary>Get the dictionary containing the roles</summary>
9744 </member>
9745 <member name="T:OpenMetaverse.GroupRolesMembersReplyEventArgs">
9746 <summary>Represents the Role to Member mappings for a group</summary>
9747 </member>
9748 <member name="M:OpenMetaverse.GroupRolesMembersReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.List{System.Collections.Generic.KeyValuePair{OpenMetaverse.UUID,OpenMetaverse.UUID}})">
9749 <summary>Construct a new instance of the GroupRolesMembersReplyEventArgs class</summary>
9750 <param name="requestID">The ID as returned by the request to correlate
9751 this result set and the request</param>
9752 <param name="groupID">The ID of the group</param>
9753 <param name="rolesMembers">The member to roles map</param>
9754 </member>
9755 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.RequestID">
9756 <summary>Get the ID as returned by the request to correlate
9757 this result set and the request</summary>
9758 </member>
9759 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.GroupID">
9760 <summary>Get the ID of the group</summary>
9761 </member>
9762 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.RolesMembers">
9763 <summary>Get the member to roles map</summary>
9764 </member>
9765 <member name="T:OpenMetaverse.GroupTitlesReplyEventArgs">
9766 <summary>Represents the titles for a group</summary>
9767 </member>
9768 <member name="M:OpenMetaverse.GroupTitlesReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupTitle})">
9769 <summary>Construct a new instance of the GroupTitlesReplyEventArgs class</summary>
9770 <param name="requestID">The ID as returned by the request to correlate
9771 this result set and the request</param>
9772 <param name="groupID">The ID of the group</param>
9773 <param name="titles">The titles</param>
9774 </member>
9775 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.RequestID">
9776 <summary>Get the ID as returned by the request to correlate
9777 this result set and the request</summary>
9778 </member>
9779 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.GroupID">
9780 <summary>Get the ID of the group</summary>
9781 </member>
9782 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.Titles">
9783 <summary>Get the titles</summary>
9784 </member>
9785 <member name="T:OpenMetaverse.GroupAccountSummaryReplyEventArgs">
9786 <summary>Represents the summary data for a group</summary>
9787 </member>
9788 <member name="M:OpenMetaverse.GroupAccountSummaryReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.GroupAccountSummary)">
9789 <summary>Construct a new instance of the GroupAccountSummaryReplyEventArgs class</summary>
9790 <param name="groupID">The ID of the group</param>
9791 <param name="summary">The summary data</param>
9792 </member>
9793 <member name="P:OpenMetaverse.GroupAccountSummaryReplyEventArgs.GroupID">
9794 <summary>Get the ID of the group</summary>
9795 </member>
9796 <member name="P:OpenMetaverse.GroupAccountSummaryReplyEventArgs.Summary">
9797 <summary>Get the summary data</summary>
9798 </member>
9799 <member name="T:OpenMetaverse.GroupCreatedReplyEventArgs">
9800 <summary>A response to a group create request</summary>
9801 </member>
9802 <member name="M:OpenMetaverse.GroupCreatedReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,System.String)">
9803 <summary>Construct a new instance of the GroupCreatedReplyEventArgs class</summary>
9804 <param name="groupID">The ID of the group</param>
9805 <param name="success">the success or faulure of the request</param>
9806 <param name="messsage">A string containing additional information</param>
9807 </member>
9808 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.GroupID">
9809 <summary>Get the ID of the group</summary>
9810 </member>
9811 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.Success">
9812 <summary>true of the group was created successfully</summary>
9813 </member>
9814 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.Message">
9815 <summary>A string containing the message</summary>
9816 </member>
9817 <member name="T:OpenMetaverse.GroupOperationEventArgs">
9818 <summary>Represents a response to a request</summary>
9819 </member>
9820 <member name="M:OpenMetaverse.GroupOperationEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean)">
9821 <summary>Construct a new instance of the GroupOperationEventArgs class</summary>
9822 <param name="groupID">The ID of the group</param>
9823 <param name="success">true of the request was successful</param>
9824 </member> 10737 </member>
9825 <member name="P:OpenMetaverse.GroupOperationEventArgs.GroupID"> 10738 <member name="F:OpenMetaverse.Primitive.Textures">
9826 <summary>Get the ID of the group</summary> 10739 <summary></summary>
9827 </member>
9828 <member name="P:OpenMetaverse.GroupOperationEventArgs.Success">
9829 <summary>true of the request was successful</summary>
9830 </member>
9831 <member name="T:OpenMetaverse.GroupDroppedEventArgs">
9832 <summary>Represents your agent leaving a group</summary>
9833 </member>
9834 <member name="M:OpenMetaverse.GroupDroppedEventArgs.#ctor(OpenMetaverse.UUID)">
9835 <summary>Construct a new instance of the GroupDroppedEventArgs class</summary>
9836 <param name="groupID">The ID of the group</param>
9837 </member>
9838 <member name="P:OpenMetaverse.GroupDroppedEventArgs.GroupID">
9839 <summary>Get the ID of the group</summary>
9840 </member>
9841 <member name="T:OpenMetaverse.GroupNoticesListReplyEventArgs">
9842 <summary>Represents a list of active group notices</summary>
9843 </member> 10740 </member>
9844 <member name="M:OpenMetaverse.GroupNoticesListReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.GroupNoticesListEntry})"> 10741 <member name="F:OpenMetaverse.Primitive.TextureAnim">
9845 <summary>Construct a new instance of the GroupNoticesListReplyEventArgs class</summary> 10742 <summary></summary>
9846 <param name="groupID">The ID of the group</param>
9847 <param name="notices">The list containing active notices</param>
9848 </member> 10743 </member>
9849 <member name="P:OpenMetaverse.GroupNoticesListReplyEventArgs.GroupID"> 10744 <member name="F:OpenMetaverse.Primitive.ID">
9850 <summary>Get the ID of the group</summary> 10745 <summary></summary>
9851 </member> 10746 </member>
9852 <member name="P:OpenMetaverse.GroupNoticesListReplyEventArgs.Notices"> 10747 <member name="F:OpenMetaverse.Primitive.GroupID">
9853 <summary>Get the notices list</summary> 10748 <summary></summary>
9854 </member> 10749 </member>
9855 <member name="T:OpenMetaverse.GroupProfileEventArgs"> 10750 <member name="F:OpenMetaverse.Primitive.LocalID">
9856 <summary>Represents the profile of a group</summary> 10751 <summary></summary>
9857 </member> 10752 </member>
9858 <member name="M:OpenMetaverse.GroupProfileEventArgs.#ctor(OpenMetaverse.Group)"> 10753 <member name="F:OpenMetaverse.Primitive.ParentID">
9859 <summary>Construct a new instance of the GroupProfileEventArgs class</summary> 10754 <summary></summary>
9860 <param name="group">The group profile</param>
9861 </member> 10755 </member>
9862 <member name="P:OpenMetaverse.GroupProfileEventArgs.Group"> 10756 <member name="F:OpenMetaverse.Primitive.RegionHandle">
9863 <summary>Get the group profile</summary> 10757 <summary></summary>
9864 </member> 10758 </member>
9865 <member name="T:OpenMetaverse.GroupInvitationEventArgs"> 10759 <member name="F:OpenMetaverse.Primitive.Flags">
9866 <summary> 10760 <summary></summary>
9867 Provides notification of a group invitation request sent by another Avatar
9868 </summary>
9869 <remarks>The <see cref="!:GroupInvitation" /> invitation is raised when another avatar makes an offer for our avatar
9870 to join a group.</remarks>
9871 </member> 10761 </member>
9872 <member name="P:OpenMetaverse.GroupInvitationEventArgs.AgentID"> 10762 <member name="F:OpenMetaverse.Primitive.TreeSpecies">
9873 <summary>The ID of the Avatar sending the group invitation</summary> 10763 <summary>Foliage type for this primitive. Only applicable if this
10764 primitive is foliage</summary>
9874 </member> 10765 </member>
9875 <member name="P:OpenMetaverse.GroupInvitationEventArgs.FromName"> 10766 <member name="F:OpenMetaverse.Primitive.ScratchPad">
9876 <summary>The name of the Avatar sending the group invitation</summary> 10767 <summary>Unknown</summary>
9877 </member> 10768 </member>
9878 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Message"> 10769 <member name="F:OpenMetaverse.Primitive.Position">
9879 <summary>A message containing the request information which includes 10770 <summary></summary>
9880 the name of the group, the groups charter and the fee to join details</summary>
9881 </member> 10771 </member>
9882 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Simulator"> 10772 <member name="F:OpenMetaverse.Primitive.Scale">
9883 <summary>The Simulator</summary> 10773 <summary></summary>
9884 </member> 10774 </member>
9885 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Accept"> 10775 <member name="F:OpenMetaverse.Primitive.Rotation">
9886 <summary>Set to true to accept invitation, false to decline</summary> 10776 <summary></summary>
9887 </member> 10777 </member>
9888 <member name="T:OpenMetaverse.Helpers"> 10778 <member name="F:OpenMetaverse.Primitive.Velocity">
9889 <summary> 10779 <summary></summary>
9890 Static helper functions and global variables
9891 </summary>
9892 </member> 10780 </member>
9893 <member name="T:OpenMetaverse.Helpers.LogLevel"> 10781 <member name="F:OpenMetaverse.Primitive.AngularVelocity">
9894 <summary> 10782 <summary></summary>
9895 Passed to Logger.Log() to identify the severity of a log entry
9896 </summary>
9897 </member> 10783 </member>
9898 <member name="F:OpenMetaverse.Helpers.LogLevel.None"> 10784 <member name="F:OpenMetaverse.Primitive.Acceleration">
9899 <summary>No logging information will be output</summary> 10785 <summary></summary>
9900 </member> 10786 </member>
9901 <member name="F:OpenMetaverse.Helpers.LogLevel.Info"> 10787 <member name="F:OpenMetaverse.Primitive.CollisionPlane">
9902 <summary>Non-noisy useful information, may be helpful in 10788 <summary></summary>
9903 debugging a problem</summary>
9904 </member> 10789 </member>
9905 <member name="F:OpenMetaverse.Helpers.LogLevel.Warning"> 10790 <member name="F:OpenMetaverse.Primitive.Flexible">
9906 <summary>A non-critical error occurred. A warning will not 10791 <summary></summary>
9907 prevent the rest of the library from operating as usual,
9908 although it may be indicative of an underlying issue</summary>
9909 </member> 10792 </member>
9910 <member name="F:OpenMetaverse.Helpers.LogLevel.Error"> 10793 <member name="F:OpenMetaverse.Primitive.Light">
9911 <summary>A critical error has occurred. Generally this will 10794 <summary></summary>
9912 be followed by the network layer shutting down, although the
9913 stability of the library after an error is uncertain</summary>
9914 </member> 10795 </member>
9915 <member name="F:OpenMetaverse.Helpers.LogLevel.Debug"> 10796 <member name="F:OpenMetaverse.Primitive.LightMap">
9916 <summary>Used for internal testing, this logging level can 10797 <summary></summary>
9917 generate very noisy (long and/or repetitive) messages. Don't
9918 pass this to the Log() function, use DebugLog() instead.
9919 </summary>
9920 </member> 10798 </member>
9921 <member name="F:OpenMetaverse.Helpers.MSG_APPENDED_ACKS"> 10799 <member name="F:OpenMetaverse.Primitive.Sculpt">
9922 <summary>This header flag signals that ACKs are appended to the packet</summary> 10800 <summary></summary>
9923 </member> 10801 </member>
9924 <member name="F:OpenMetaverse.Helpers.MSG_RESENT"> 10802 <member name="F:OpenMetaverse.Primitive.ClickAction">
9925 <summary>This header flag signals that this packet has been sent before</summary> 10803 <summary></summary>
9926 </member> 10804 </member>
9927 <member name="F:OpenMetaverse.Helpers.MSG_RELIABLE"> 10805 <member name="F:OpenMetaverse.Primitive.Sound">
9928 <summary>This header flags signals that an ACK is expected for this packet</summary> 10806 <summary></summary>
9929 </member> 10807 </member>
9930 <member name="F:OpenMetaverse.Helpers.MSG_ZEROCODED"> 10808 <member name="F:OpenMetaverse.Primitive.OwnerID">
9931 <summary>This header flag signals that the message is compressed using zerocoding</summary> 10809 <summary>Identifies the owner if audio or a particle system is
10810 active</summary>
9932 </member> 10811 </member>
9933 <member name="M:OpenMetaverse.Helpers.TEOffsetShort(System.Single)"> 10812 <member name="F:OpenMetaverse.Primitive.SoundFlags">
9934 <summary> 10813 <summary></summary>
9935 </summary>
9936 <param name="offset">
9937 </param>
9938 <returns>
9939 </returns>
9940 </member> 10814 </member>
9941 <member name="M:OpenMetaverse.Helpers.TEOffsetFloat(System.Byte[],System.Int32)"> 10815 <member name="F:OpenMetaverse.Primitive.SoundGain">
9942 <summary> 10816 <summary></summary>
9943 </summary>
9944 <param name="bytes">
9945 </param>
9946 <param name="pos">
9947 </param>
9948 <returns>
9949 </returns>
9950 </member> 10817 </member>
9951 <member name="M:OpenMetaverse.Helpers.TERotationShort(System.Single)"> 10818 <member name="F:OpenMetaverse.Primitive.SoundRadius">
9952 <summary> 10819 <summary></summary>
9953 </summary>
9954 <param name="rotation">
9955 </param>
9956 <returns>
9957 </returns>
9958 </member> 10820 </member>
9959 <member name="M:OpenMetaverse.Helpers.TERotationFloat(System.Byte[],System.Int32)"> 10821 <member name="F:OpenMetaverse.Primitive.Text">
9960 <summary> 10822 <summary></summary>
9961 </summary>
9962 <param name="bytes">
9963 </param>
9964 <param name="pos">
9965 </param>
9966 <returns>
9967 </returns>
9968 </member> 10823 </member>
9969 <member name="M:OpenMetaverse.Helpers.GlobalPosToRegionHandle(System.Single,System.Single,System.Single@,System.Single@)"> 10824 <member name="F:OpenMetaverse.Primitive.TextColor">
9970 <summary> 10825 <summary></summary>
9971 Given an X/Y location in absolute (grid-relative) terms, a region
9972 handle is returned along with the local X/Y location in that region
9973 </summary>
9974 <param name="globalX">The absolute X location, a number such as
9975 255360.35</param>
9976 <param name="globalY">The absolute Y location, a number such as
9977 255360.35</param>
9978 <param name="localX">The sim-local X position of the global X
9979 position, a value from 0.0 to 256.0</param>
9980 <param name="localY">The sim-local Y position of the global Y
9981 position, a value from 0.0 to 256.0</param>
9982 <returns>A 64-bit region handle that can be used to teleport to</returns>
9983 </member> 10826 </member>
9984 <member name="M:OpenMetaverse.Helpers.FloatToTerseString(System.Single)"> 10827 <member name="F:OpenMetaverse.Primitive.MediaURL">
9985 <summary> 10828 <summary></summary>
9986 Converts a floating point number to a terse string format used for
9987 transmitting numbers in wearable asset files
9988 </summary>
9989 <param name="val">Floating point number to convert to a string</param>
9990 <returns>A terse string representation of the input number</returns>
9991 </member> 10829 </member>
9992 <member name="M:OpenMetaverse.Helpers.FieldToString(System.Text.StringBuilder,System.Byte[],System.String)"> 10830 <member name="F:OpenMetaverse.Primitive.Joint">
9993 <summary> 10831 <summary></summary>
9994 Convert a variable length field (byte array) to a string, with a
9995 field name prepended to each line of the output
9996 </summary>
9997 <remarks>If the byte array has unprintable characters in it, a
9998 hex dump will be written instead</remarks>
9999 <param name="output">The StringBuilder object to write to</param>
10000 <param name="bytes">The byte array to convert to a string</param>
10001 <param name="fieldName">A field name to prepend to each line of output</param>
10002 </member> 10832 </member>
10003 <member name="M:OpenMetaverse.Helpers.ZeroDecode(System.Byte[],System.Int32,System.Byte[])"> 10833 <member name="F:OpenMetaverse.Primitive.JointPivot">
10004 <summary> 10834 <summary></summary>
10005 Decode a zerocoded byte array, used to decompress packets marked
10006 with the zerocoded flag
10007 </summary>
10008 <remarks>Any time a zero is encountered, the next byte is a count
10009 of how many zeroes to expand. One zero is encoded with 0x00 0x01,
10010 two zeroes is 0x00 0x02, three zeroes is 0x00 0x03, etc. The
10011 first four bytes are copied directly to the output buffer.
10012 </remarks>
10013 <param name="src">The byte array to decode</param>
10014 <param name="srclen">The length of the byte array to decode. This
10015 would be the length of the packet up to (but not including) any
10016 appended ACKs</param>
10017 <param name="dest">The output byte array to decode to</param>
10018 <returns>The length of the output buffer</returns>
10019 </member> 10835 </member>
10020 <member name="M:OpenMetaverse.Helpers.ZeroEncode(System.Byte[],System.Int32,System.Byte[])"> 10836 <member name="F:OpenMetaverse.Primitive.JointAxisOrAnchor">
10021 <summary> 10837 <summary></summary>
10022 Encode a byte array with zerocoding. Used to compress packets marked
10023 with the zerocoded flag. Any zeroes in the array are compressed down
10024 to a single zero byte followed by a count of how many zeroes to expand
10025 out. A single zero becomes 0x00 0x01, two zeroes becomes 0x00 0x02,
10026 three zeroes becomes 0x00 0x03, etc. The first four bytes are copied
10027 directly to the output buffer.
10028 </summary>
10029 <param name="src">The byte array to encode</param>
10030 <param name="srclen">The length of the byte array to encode</param>
10031 <param name="dest">The output byte array to encode to</param>
10032 <returns>The length of the output buffer</returns>
10033 </member> 10838 </member>
10034 <member name="M:OpenMetaverse.Helpers.InventoryCRC(System.Int32,System.Byte,System.SByte,System.SByte,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Int32,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32)"> 10839 <member name="F:OpenMetaverse.Primitive.NameValues">
10035 <summary> 10840 <summary></summary>
10036 Calculates the CRC (cyclic redundancy check) needed to upload inventory.
10037 </summary>
10038 <param name="creationDate">Creation date</param>
10039 <param name="saleType">Sale type</param>
10040 <param name="invType">Inventory type</param>
10041 <param name="type">Type</param>
10042 <param name="assetID">Asset ID</param>
10043 <param name="groupID">Group ID</param>
10044 <param name="salePrice">Sale price</param>
10045 <param name="ownerID">Owner ID</param>
10046 <param name="creatorID">Creator ID</param>
10047 <param name="itemID">Item ID</param>
10048 <param name="folderID">Folder ID</param>
10049 <param name="everyoneMask">Everyone mask (permissions)</param>
10050 <param name="flags">Flags</param>
10051 <param name="nextOwnerMask">Next owner mask (permissions)</param>
10052 <param name="groupMask">Group mask (permissions)</param>
10053 <param name="ownerMask">Owner mask (permissions)</param>
10054 <returns>The calculated CRC</returns>
10055 </member> 10841 </member>
10056 <member name="M:OpenMetaverse.Helpers.GetResourceStream(System.String)"> 10842 <member name="F:OpenMetaverse.Primitive.PrimData">
10057 <summary> 10843 <summary></summary>
10058 Attempts to load a file embedded in the assembly
10059 </summary>
10060 <param name="resourceName">The filename of the resource to load</param>
10061 <returns>A Stream for the requested file, or null if the resource
10062 was not successfully loaded</returns>
10063 </member> 10844 </member>
10064 <member name="M:OpenMetaverse.Helpers.GetResourceStream(System.String,System.String)"> 10845 <member name="F:OpenMetaverse.Primitive.Properties">
10065 <summary> 10846 <summary></summary>
10066 Attempts to load a file either embedded in the assembly or found in
10067 a given search path
10068 </summary>
10069 <param name="resourceName">The filename of the resource to load</param>
10070 <param name="searchPath">An optional path that will be searched if
10071 the asset is not found embedded in the assembly</param>
10072 <returns>A Stream for the requested file, or null if the resource
10073 was not successfully loaded</returns>
10074 </member> 10847 </member>
10075 <member name="M:OpenMetaverse.Helpers.PrimListToOSD(System.Collections.Generic.List{OpenMetaverse.Primitive})"> 10848 <member name="F:OpenMetaverse.Primitive.PhysicsProps">
10076 <summary> 10849 <summary>Objects physics engine propertis</summary>
10077 Converts a list of primitives to an object that can be serialized
10078 with the LLSD system
10079 </summary>
10080 <param name="prims">Primitives to convert to a serializable object</param>
10081 <returns>An object that can be serialized with LLSD</returns>
10082 </member> 10850 </member>
10083 <member name="M:OpenMetaverse.Helpers.OSDToPrimList(OpenMetaverse.StructuredData.OSD)"> 10851 <member name="F:OpenMetaverse.Primitive.Tag">
10084 <summary> 10852 <summary>Extra data about primitive</summary>
10085 Deserializes OSD in to a list of primitives
10086 </summary>
10087 <param name="osd">Structure holding the serialized primitive list,
10088 must be of the SDMap type</param>
10089 <returns>A list of deserialized primitives</returns>
10090 </member> 10853 </member>
10091 <member name="M:OpenMetaverse.Helpers.StructToString(System.Object)"> 10854 <member name="F:OpenMetaverse.Primitive.IsAttachment">
10092 <summary> 10855 <summary>Indicates if prim is attached to an avatar</summary>
10093 Converts a struct or class object containing fields only into a key value separated string
10094 </summary>
10095 <param name="t">The struct object</param>
10096 <returns>A string containing the struct fields as the keys, and the field value as the value separated</returns>
10097 <example>
10098 <code>
10099 // Add the following code to any struct or class containing only fields to override the ToString()
10100 // method to display the values of the passed object
10101 /// <summary>Print the struct data as a string</summary>
10102 ///<returns>A string containing the field name, and field value</returns>
10103 public override string ToString()
10104 {
10105 return Helpers.StructToString(this);
10106 }
10107 </code>
10108 </example>
10109 </member> 10856 </member>
10110 <member name="T:OpenMetaverse.InternalDictionary`2"> 10857 <member name="F:OpenMetaverse.Primitive.ActiveClients">
10111 <summary> 10858 <summary>Number of clients referencing this prim</summary>
10112 The InternalDictionary class is used through the library for storing key/value pairs.
10113 It is intended to be a replacement for the generic Dictionary class and should
10114 be used in its place. It contains several methods for allowing access to the data from
10115 outside the library that are read only and thread safe.
10116 </summary>
10117 <typeparam name="TKey">Key <see langword="Tkey" /></typeparam>
10118 <typeparam name="TValue">Value <see langword="TValue" /></typeparam>
10119 </member> 10859 </member>
10120 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor"> 10860 <member name="M:OpenMetaverse.Primitive.#ctor">
10121 <summary> 10861 <summary>
10122 Initializes a new instance of the <seealso cref="T:InternalDictionary" /> Class 10862 Default constructor
10123 with the specified key/value, has the default initial capacity.
10124 </summary> 10863 </summary>
10125 <example>
10126 <code>
10127 // initialize a new InternalDictionary named testDict with a string as the key and an int as the value.
10128 public InternalDictionary&lt;string, int&gt; testDict = new InternalDictionary&lt;string, int&gt;();
10129 </code>
10130 </example>
10131 </member>
10132 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
10133 <summary>
10134 Initializes a new instance of the <seealso cref="T:InternalDictionary" /> Class
10135 with the specified key/value, has its initial valies copied from the specified
10136 <seealso cref="T:System.Collections.Generic.Dictionary" /></summary>
10137 <param name="dictionary">
10138 <seealso cref="T:System.Collections.Generic.Dictionary" />
10139 to copy initial values from</param>
10140 <example>
10141 <code>
10142 // initialize a new InternalDictionary named testAvName with a UUID as the key and an string as the value.
10143 // populates with copied values from example KeyNameCache Dictionary.
10144 // create source dictionary
10145 Dictionary&lt;UUID, string&gt; KeyNameCache = new Dictionary&lt;UUID, string&gt;();
10146 KeyNameCache.Add("8300f94a-7970-7810-cf2c-fc9aa6cdda24", "Jack Avatar");
10147 KeyNameCache.Add("27ba1e40-13f7-0708-3e98-5819d780bd62", "Jill Avatar");
10148 // Initialize new dictionary.
10149 public InternalDictionary&lt;UUID, string&gt; testAvName = new InternalDictionary&lt;UUID, string&gt;(KeyNameCache);
10150 </code>
10151 </example>
10152 </member> 10864 </member>
10153 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor(System.Int32)"> 10865 <member name="M:OpenMetaverse.Primitive.PackPathTwist(System.Single)">
10154 <summary> 10866 <summary>
10155 Initializes a new instance of the <seealso cref="T:OpenMetaverse.InternalDictionary" /> Class 10867 Packs PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew
10156 with the specified key/value, With its initial capacity specified. 10868 parameters in to signed eight bit values
10157 </summary> 10869 </summary>
10158 <param name="capacity">Initial size of dictionary</param> 10870 <param name="pathTwist">Floating point parameter to pack</param>
10159 <example> 10871 <returns>Signed eight bit value containing the packed parameter</returns>
10160 <code>
10161 // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
10162 // initially allocated room for 10 entries.
10163 public InternalDictionary&lt;string, int&gt; testDict = new InternalDictionary&lt;string, int&gt;(10);
10164 </code>
10165 </example>
10166 </member>
10167 <member name="F:OpenMetaverse.InternalDictionary`2.Dictionary">
10168 <summary>Internal dictionary that this class wraps around. Do not
10169 modify or enumerate the contents of this dictionary without locking
10170 on this member</summary>
10171 </member> 10872 </member>
10172 <member name="P:OpenMetaverse.InternalDictionary`2.Item(`0)"> 10873 <member name="M:OpenMetaverse.Primitive.UnpackPathTwist(System.SByte)">
10173 <summary> 10874 <summary>
10174 Indexer for the dictionary 10875 Unpacks PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew
10876 parameters from signed eight bit integers to floating point values
10175 </summary> 10877 </summary>
10176 <param name="key">The key</param> 10878 <param name="pathTwist">Signed eight bit value to unpack</param>
10177 <returns>The value</returns> 10879 <returns>Unpacked floating point value</returns>
10178 </member> 10880 </member>
10179 <member name="P:OpenMetaverse.InternalDictionary`2.Count"> 10881 <member name="F:OpenMetaverse.Primitive.ParticleSys">
10180 <summary> 10882 <summary></summary>
10181 Gets the number of Key/Value pairs contained in the <seealso cref="T:InternalDictionary" /></summary>
10182 </member> 10883 </member>
10183 <member name="M:OpenMetaverse.InternalDictionary`2.TryGetValue(`0,`1@)"> 10884 <member name="P:OpenMetaverse.Primitive.Type">
10184 <summary> 10885 <summary>Uses basic heuristics to estimate the primitive shape</summary>
10185 Try to get entry from <seealso cref="T:OpenMetaverse.InternalDictionary" /> with specified key
10186 </summary>
10187 <param name="key">Key to use for lookup</param>
10188 <param name="value">Value returned</param>
10189 <returns>
10190 <see langword="true" /> if specified key exists, <see langword="false" /> if not found</returns>
10191 <example>
10192 <code>
10193 // find your avatar using the Simulator.ObjectsAvatars InternalDictionary:
10194 Avatar av;
10195 if (Client.Network.CurrentSim.ObjectsAvatars.TryGetValue(Client.Self.AgentID, out av))
10196 Console.WriteLine("Found Avatar {0}", av.Name);
10197 </code>
10198 <seealso cref="F:OpenMetaverse.Simulator.ObjectsAvatars" />
10199 </example>
10200 </member> 10886 </member>
10201 <member name="M:OpenMetaverse.InternalDictionary`2.Find(System.Predicate{`1})"> 10887 <member name="T:OpenMetaverse.Primitive.TextureAnimMode">
10202 <summary> 10888 <summary>
10203 Finds the specified match. 10889 Texture animation mode
10204 </summary> 10890 </summary>
10205 <param name="match">The match.</param>
10206 <returns>Matched value</returns>
10207 <example>
10208 <code>
10209 // use a delegate to find a prim in the ObjectsPrimitives InternalDictionary
10210 // with the ID 95683496
10211 uint findID = 95683496;
10212 Primitive findPrim = sim.ObjectsPrimitives.Find(
10213 delegate(Primitive prim) { return prim.ID == findID; });
10214 </code>
10215 </example>
10216 </member> 10891 </member>
10217 <member name="M:OpenMetaverse.InternalDictionary`2.FindAll(System.Predicate{`1})"> 10892 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ANIM_OFF">
10218 <summary>Find All items in an <seealso cref="T:InternalDictionary" /></summary> 10893 <summary>Disable texture animation</summary>
10219 <param name="match">return matching items.</param>
10220 <returns>a <seealso cref="T:System.Collections.Generic.List" /> containing found items.</returns>
10221 <example>
10222 Find All prims within 20 meters and store them in a List
10223 <code>
10224 int radius = 20;
10225 List&lt;Primitive&gt; prims = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
10226 delegate(Primitive prim) {
10227 Vector3 pos = prim.Position;
10228 return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
10229 }
10230 );
10231 </code></example>
10232 </member> 10894 </member>
10233 <member name="M:OpenMetaverse.InternalDictionary`2.FindAll(System.Predicate{`0})"> 10895 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ANIM_ON">
10234 <summary>Find All items in an <seealso cref="T:InternalDictionary" /></summary> 10896 <summary>Enable texture animation</summary>
10235 <param name="match">return matching keys.</param>
10236 <returns>a <seealso cref="T:System.Collections.Generic.List" /> containing found keys.</returns>
10237 <example>
10238 Find All keys which also exist in another dictionary
10239 <code>
10240 List&lt;UUID&gt; matches = myDict.FindAll(
10241 delegate(UUID id) {
10242 return myOtherDict.ContainsKey(id);
10243 }
10244 );
10245 </code></example>
10246 </member> 10897 </member>
10247 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{`1})"> 10898 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.LOOP">
10248 <summary>Perform an <seealso cref="T:System.Action" /> on each entry in an <seealso cref="T:OpenMetaverse.InternalDictionary" /></summary> 10899 <summary>Loop when animating textures</summary>
10249 <param name="action">
10250 <seealso cref="T:System.Action" /> to perform</param>
10251 <example>
10252 <code>
10253 // Iterates over the ObjectsPrimitives InternalDictionary and prints out some information.
10254 Client.Network.CurrentSim.ObjectsPrimitives.ForEach(
10255 delegate(Primitive prim)
10256 {
10257 if (prim.Text != null)
10258 {
10259 Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
10260 prim.PropertiesFamily.Name, prim.ID, prim.Text);
10261 }
10262 });
10263 </code>
10264 </example>
10265 </member> 10900 </member>
10266 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{`0})"> 10901 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.REVERSE">
10267 <summary>Perform an <seealso cref="T:System.Action" /> on each key of an <seealso cref="T:OpenMetaverse.InternalDictionary" /></summary> 10902 <summary>Animate in reverse direction</summary>
10268 <param name="action">
10269 <seealso cref="T:System.Action" /> to perform</param>
10270 </member> 10903 </member>
10271 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{System.Collections.Generic.KeyValuePair{`0,`1}})"> 10904 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.PING_PONG">
10272 <summary> 10905 <summary>Animate forward then reverse</summary>
10273 Perform an <seealso cref="T:System.Action" /> on each KeyValuePair of an <seealso cref="T:OpenMetaverse.InternalDictionary" /></summary>
10274 <param name="action">
10275 <seealso cref="T:System.Action" /> to perform</param>
10276 </member> 10906 </member>
10277 <member name="M:OpenMetaverse.InternalDictionary`2.ContainsKey(`0)"> 10907 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.SMOOTH">
10278 <summary>Check if Key exists in Dictionary</summary> 10908 <summary>Slide texture smoothly instead of frame-stepping</summary>
10279 <param name="key">Key to check for</param>
10280 <returns>
10281 <see langword="true" /> if found, <see langword="false" /> otherwise</returns>
10282 </member> 10909 </member>
10283 <member name="M:OpenMetaverse.InternalDictionary`2.ContainsValue(`1)"> 10910 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ROTATE">
10284 <summary>Check if Value exists in Dictionary</summary> 10911 <summary>Rotate texture instead of using frames</summary>
10285 <param name="value">Value to check for</param>
10286 <returns>
10287 <see langword="true" /> if found, <see langword="false" /> otherwise</returns>
10288 </member> 10912 </member>
10289 <member name="M:OpenMetaverse.InternalDictionary`2.Add(`0,`1)"> 10913 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.SCALE">
10290 <summary> 10914 <summary>Scale texture instead of using frames</summary>
10291 Adds the specified key to the dictionary, dictionary locking is not performed,
10292 <see cref="!:SafeAdd" /></summary>
10293 <param name="key">The key</param>
10294 <param name="value">The value</param>
10295 </member> 10915 </member>
10296 <member name="M:OpenMetaverse.InternalDictionary`2.Remove(`0)"> 10916 <member name="T:OpenMetaverse.Primitive.TextureEntryFace">
10297 <summary> 10917 <summary>
10298 Removes the specified key, dictionary locking is not performed 10918 A single textured face. Don't instantiate this class yourself, use the
10919 methods in TextureEntry
10299 </summary> 10920 </summary>
10300 <param name="key">The key.</param>
10301 <returns>
10302 <see langword="true" /> if successful, <see langword="false" /> otherwise</returns>
10303 </member> 10921 </member>
10304 <member name="T:OpenMetaverse.InventoryException"> 10922 <member name="M:OpenMetaverse.Primitive.TextureEntryFace.#ctor(OpenMetaverse.Primitive.TextureEntryFace)">
10305 <summary> 10923 <summary>
10306 Exception class to identify inventory exceptions 10924 Contains the definition for individual faces
10307 </summary> 10925 </summary>
10926 <param name="defaultTexture"></param>
10308 </member> 10927 </member>
10309 <member name="T:OpenMetaverse.Inventory"> 10928 <member name="M:OpenMetaverse.Primitive.TextureEntryFace.ToString">
10310 <summary> 10929 <summary>
10311 Responsible for maintaining inventory structure. Inventory constructs nodes 10930
10312 and manages node children as is necessary to maintain a coherant hirarchy.
10313 Other classes should not manipulate or create InventoryNodes explicitly. When
10314 A node's parent changes (when a folder is moved, for example) simply pass
10315 Inventory the updated InventoryFolder and it will make the appropriate changes
10316 to its internal representation.
10317 </summary> 10931 </summary>
10932 <returns></returns>
10318 </member> 10933 </member>
10319 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectUpdated"> 10934 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.material">
10320 <summary>The event subscribers, null of no subscribers</summary> 10935 <summary></summary>
10321 </member>
10322 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectUpdatedLock">
10323 <summary>Thread sync lock object</summary>
10324 </member>
10325 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectRemoved">
10326 <summary>The event subscribers, null of no subscribers</summary>
10327 </member>
10328 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectRemovedLock">
10329 <summary>Thread sync lock object</summary>
10330 </member>
10331 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectAdded">
10332 <summary>The event subscribers, null of no subscribers</summary>
10333 </member> 10936 </member>
10334 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectAddedLock"> 10937 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.media">
10335 <summary>Thread sync lock object</summary> 10938 <summary></summary>
10336 </member> 10939 </member>
10337 <member name="E:OpenMetaverse.Inventory.InventoryObjectUpdated"> 10940 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RGBA">
10338 <summary>Raised when the simulator sends us data containing 10941 <summary></summary>
10339 ...</summary>
10340 </member> 10942 </member>
10341 <member name="E:OpenMetaverse.Inventory.InventoryObjectRemoved"> 10943 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RepeatU">
10342 <summary>Raised when the simulator sends us data containing 10944 <summary></summary>
10343 ...</summary>
10344 </member> 10945 </member>
10345 <member name="E:OpenMetaverse.Inventory.InventoryObjectAdded"> 10946 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RepeatV">
10346 <summary>Raised when the simulator sends us data containing 10947 <summary></summary>
10347 ...</summary>
10348 </member> 10948 </member>
10349 <member name="P:OpenMetaverse.Inventory.Item(OpenMetaverse.UUID)"> 10949 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.OffsetU">
10350 <summary> 10950 <summary></summary>
10351 By using the bracket operator on this class, the program can get the
10352 InventoryObject designated by the specified uuid. If the value for the corresponding
10353 UUID is null, the call is equivelant to a call to <code>RemoveNodeFor(this[uuid])</code>.
10354 If the value is non-null, it is equivelant to a call to <code>UpdateNodeFor(value)</code>,
10355 the uuid parameter is ignored.
10356 </summary>
10357 <param name="uuid">The UUID of the InventoryObject to get or set, ignored if set to non-null value.</param>
10358 <returns>The InventoryObject corresponding to <code>uuid</code>.</returns>
10359 </member> 10951 </member>
10360 <member name="P:OpenMetaverse.Inventory.RootFolder"> 10952 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.OffsetV">
10361 <summary> 10953 <summary></summary>
10362 The root folder of this avatars inventory
10363 </summary>
10364 </member> 10954 </member>
10365 <member name="P:OpenMetaverse.Inventory.LibraryFolder"> 10955 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Rotation">
10366 <summary> 10956 <summary></summary>
10367 The default shared library folder
10368 </summary>
10369 </member> 10957 </member>
10370 <member name="P:OpenMetaverse.Inventory.RootNode"> 10958 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Glow">
10371 <summary> 10959 <summary></summary>
10372 The root node of the avatars inventory
10373 </summary>
10374 </member> 10960 </member>
10375 <member name="P:OpenMetaverse.Inventory.LibraryRootNode"> 10961 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Bump">
10376 <summary> 10962 <summary></summary>
10377 The root node of the default shared library
10378 </summary>
10379 </member> 10963 </member>
10380 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectUpdated(OpenMetaverse.InventoryObjectUpdatedEventArgs)"> 10964 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.MediaFlags">
10381 <summary>Raises the InventoryObjectUpdated Event</summary> 10965 <summary>In the future this will specify whether a webpage is
10382 <param name="e">A InventoryObjectUpdatedEventArgs object containing 10966 attached to this face</summary>
10383 the data sent from the simulator</param>
10384 </member> 10967 </member>
10385 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectRemoved(OpenMetaverse.InventoryObjectRemovedEventArgs)"> 10968 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.TextureID">
10386 <summary>Raises the InventoryObjectRemoved Event</summary> 10969 <summary></summary>
10387 <param name="e">A InventoryObjectRemovedEventArgs object containing
10388 the data sent from the simulator</param>
10389 </member> 10970 </member>
10390 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectAdded(OpenMetaverse.InventoryObjectAddedEventArgs)"> 10971 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.MaterialID">
10391 <summary>Raises the InventoryObjectAdded Event</summary> 10972 <summary></summary>
10392 <param name="e">A InventoryObjectAddedEventArgs object containing
10393 the data sent from the simulator</param>
10394 </member> 10973 </member>
10395 <member name="M:OpenMetaverse.Inventory.GetContents(OpenMetaverse.UUID)"> 10974 <member name="T:OpenMetaverse.Primitive.TextureEntry">
10396 <summary> 10975 <summary>
10397 Returns the contents of the specified folder 10976 Represents all of the texturable faces for an object
10398 </summary> 10977 </summary>
10399 <param name="folder">A folder's UUID</param> 10978 <remarks>Grid objects have infinite faces, with each face
10400 <returns>The contents of the folder corresponding to <code>folder</code></returns> 10979 using the properties of the default face unless set otherwise. So if
10401 <exception cref="T:OpenMetaverse.InventoryException">When <code>folder</code> does not exist in the inventory</exception> 10980 you have a TextureEntry with a default texture uuid of X, and face 18
10981 has a texture UUID of Y, every face would be textured with X except for
10982 face 18 that uses Y. In practice however, primitives utilize a maximum
10983 of nine faces</remarks>
10402 </member> 10984 </member>
10403 <member name="M:OpenMetaverse.Inventory.UpdateNodeFor(OpenMetaverse.InventoryBase)"> 10985 <member name="F:OpenMetaverse.Primitive.TextureEntry.DefaultTexture">
10404 <summary> 10986 <summary></summary>
10405 Updates the state of the InventoryNode and inventory data structure that
10406 is responsible for the InventoryObject. If the item was previously not added to inventory,
10407 it adds the item, and updates structure accordingly. If it was, it updates the
10408 InventoryNode, changing the parent node if <code>item.parentUUID</code> does
10409 not match <code>node.Parent.Data.UUID</code>.
10410 You can not set the inventory root folder using this method
10411 </summary>
10412 <param name="item">The InventoryObject to store</param>
10413 </member> 10987 </member>
10414 <member name="M:OpenMetaverse.Inventory.RemoveNodeFor(OpenMetaverse.InventoryBase)"> 10988 <member name="F:OpenMetaverse.Primitive.TextureEntry.FaceTextures">
10415 <summary> 10989 <summary></summary>
10416 Removes the InventoryObject and all related node data from Inventory.
10417 </summary>
10418 <param name="item">The InventoryObject to remove.</param>
10419 </member> 10990 </member>
10420 <member name="M:OpenMetaverse.Inventory.Contains(OpenMetaverse.UUID)"> 10991 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(OpenMetaverse.UUID)">
10421 <summary> 10992 <summary>
10422 Used to find out if Inventory contains the InventoryObject 10993 Constructor that takes a default texture UUID
10423 specified by <code>uuid</code>.
10424 </summary> 10994 </summary>
10425 <param name="uuid">The UUID to check.</param> 10995 <param name="defaultTextureID">Texture UUID to use as the default texture</param>
10426 <returns>true if inventory contains uuid, false otherwise</returns>
10427 </member> 10996 </member>
10428 <member name="M:OpenMetaverse.Inventory.SaveToDisk(System.String)"> 10997 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(OpenMetaverse.Primitive.TextureEntryFace)">
10429 <summary> 10998 <summary>
10430 Saves the current inventory structure to a cache file 10999 Constructor that takes a <code>TextureEntryFace</code> for the
11000 default face
10431 </summary> 11001 </summary>
10432 <param name="filename">Name of the cache file to save to</param> 11002 <param name="defaultFace">Face to use as the default face</param>
10433 </member> 11003 </member>
10434 <member name="M:OpenMetaverse.Inventory.RestoreFromDisk(System.String)"> 11004 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(System.Byte[],System.Int32,System.Int32)">
10435 <summary> 11005 <summary>
10436 Loads in inventory cache file into the inventory structure. Note only valid to call after login has been successful. 11006 Constructor that creates the TextureEntry class from a byte array
10437 </summary> 11007 </summary>
10438 <param name="filename">Name of the cache file to load</param> 11008 <param name="data">Byte array containing the TextureEntry field</param>
10439 <returns>The number of inventory items sucessfully reconstructed into the inventory node tree</returns> 11009 <param name="pos">Starting position of the TextureEntry field in
10440 </member> 11010 the byte array</param>
10441 <member name="F:OpenMetaverse.InventorySortOrder.ByName"> 11011 <param name="length">Length of the TextureEntry field, in bytes</param>
10442 <summary>Sort by name</summary>
10443 </member>
10444 <member name="F:OpenMetaverse.InventorySortOrder.ByDate">
10445 <summary>Sort by date</summary>
10446 </member>
10447 <member name="F:OpenMetaverse.InventorySortOrder.FoldersByName">
10448 <summary>Sort folders by name, regardless of whether items are
10449 sorted by name or date</summary>
10450 </member>
10451 <member name="F:OpenMetaverse.InventorySortOrder.SystemFoldersToTop">
10452 <summary>Place system folders at the top</summary>
10453 </member> 11012 </member>
10454 <member name="T:OpenMetaverse.DeRezDestination"> 11013 <member name="M:OpenMetaverse.Primitive.TextureEntry.CreateFace(System.UInt32)">
10455 <summary> 11014 <summary>
10456 Possible destinations for DeRezObject request 11015 This will either create a new face if a custom face for the given
11016 index is not defined, or return the custom face for that index if
11017 it already exists
10457 </summary> 11018 </summary>
11019 <param name="index">The index number of the face to create or
11020 retrieve</param>
11021 <returns>A TextureEntryFace containing all the properties for that
11022 face</returns>
10458 </member> 11023 </member>
10459 <member name="F:OpenMetaverse.DeRezDestination.AgentInventorySave"> 11024 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetFace(System.UInt32)">
10460 <summary> 11025 <summary>
11026
10461 </summary> 11027 </summary>
11028 <param name="index"></param>
11029 <returns></returns>
10462 </member> 11030 </member>
10463 <member name="F:OpenMetaverse.DeRezDestination.AgentInventoryCopy"> 11031 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetOSD">
10464 <summary>Copy from in-world to agent inventory</summary>
10465 </member>
10466 <member name="F:OpenMetaverse.DeRezDestination.TaskInventory">
10467 <summary>Derez to TaskInventory</summary>
10468 </member>
10469 <member name="F:OpenMetaverse.DeRezDestination.Attachment">
10470 <summary> 11032 <summary>
11033
10471 </summary> 11034 </summary>
11035 <returns></returns>
10472 </member> 11036 </member>
10473 <member name="F:OpenMetaverse.DeRezDestination.AgentInventoryTake"> 11037 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetBytes">
10474 <summary>Take Object</summary>
10475 </member>
10476 <member name="F:OpenMetaverse.DeRezDestination.ForceToGodInventory">
10477 <summary> 11038 <summary>
11039
10478 </summary> 11040 </summary>
11041 <returns></returns>
10479 </member> 11042 </member>
10480 <member name="F:OpenMetaverse.DeRezDestination.TrashFolder"> 11043 <member name="M:OpenMetaverse.Primitive.TextureEntry.ToString">
10481 <summary>Delete Object</summary>
10482 </member>
10483 <member name="F:OpenMetaverse.DeRezDestination.AttachmentToInventory">
10484 <summary>Put an avatar attachment into agent inventory</summary>
10485 </member>
10486 <member name="F:OpenMetaverse.DeRezDestination.AttachmentExists">
10487 <summary> 11044 <summary>
11045
10488 </summary> 11046 </summary>
11047 <returns></returns>
10489 </member> 11048 </member>
10490 <member name="F:OpenMetaverse.DeRezDestination.ReturnToOwner"> 11049 <member name="T:OpenMetaverse.Primitive.TextureAnimation">
10491 <summary>Return an object back to the owner's inventory</summary>
10492 </member>
10493 <member name="F:OpenMetaverse.DeRezDestination.ReturnToLastOwner">
10494 <summary>Return a deeded object back to the last owner's inventory</summary>
10495 </member>
10496 <member name="T:OpenMetaverse.InventoryItemFlags">
10497 <summary> 11050 <summary>
10498 Upper half of the Flags field for inventory items 11051 Controls the texture animation of a particular prim
10499 </summary> 11052 </summary>
10500 </member> 11053 </member>
10501 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectSlamPerm"> 11054 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Flags">
10502 <summary>Indicates that the NextOwner permission will be set to the 11055 <summary></summary>
10503 most restrictive set of permissions found in the object set
10504 (including linkset items and object inventory items) on next rez</summary>
10505 </member>
10506 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectSlamSale">
10507 <summary>Indicates that the object sale information has been
10508 changed</summary>
10509 </member>
10510 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteBase">
10511 <summary>If set, and a slam bit is set, indicates BaseMask will be overwritten on Rez</summary>
10512 </member>
10513 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteOwner">
10514 <summary>If set, and a slam bit is set, indicates OwnerMask will be overwritten on Rez</summary>
10515 </member> 11056 </member>
10516 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteGroup"> 11057 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Face">
10517 <summary>If set, and a slam bit is set, indicates GroupMask will be overwritten on Rez</summary> 11058 <summary></summary>
10518 </member> 11059 </member>
10519 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteEveryone"> 11060 <member name="F:OpenMetaverse.Primitive.TextureAnimation.SizeX">
10520 <summary>If set, and a slam bit is set, indicates EveryoneMask will be overwritten on Rez</summary> 11061 <summary></summary>
10521 </member> 11062 </member>
10522 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteNextOwner"> 11063 <member name="F:OpenMetaverse.Primitive.TextureAnimation.SizeY">
10523 <summary>If set, and a slam bit is set, indicates NextOwnerMask will be overwritten on Rez</summary> 11064 <summary></summary>
10524 </member> 11065 </member>
10525 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectHasMultipleItems"> 11066 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Start">
10526 <summary>Indicates whether this object is composed of multiple 11067 <summary></summary>
10527 items or not</summary>
10528 </member> 11068 </member>
10529 <member name="F:OpenMetaverse.InventoryItemFlags.SharedSingleReference"> 11069 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Length">
10530 <summary>Indicates that the asset is only referenced by this 11070 <summary></summary>
10531 inventory item. If this item is deleted or updated to reference a
10532 new assetID, the asset can be deleted</summary>
10533 </member> 11071 </member>
10534 <member name="T:OpenMetaverse.InventoryBase"> 11072 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Rate">
10535 <summary> 11073 <summary></summary>
10536 Base Class for Inventory Items
10537 </summary>
10538 </member> 11074 </member>
10539 <member name="M:OpenMetaverse.InventoryBase.#ctor(OpenMetaverse.UUID)"> 11075 <member name="M:OpenMetaverse.Primitive.TextureAnimation.#ctor(System.Byte[],System.Int32)">
10540 <summary> 11076 <summary>
10541 Constructor, takes an itemID as a parameter 11077
10542 </summary> 11078 </summary>
10543 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the item</param> 11079 <param name="data"></param>
11080 <param name="pos"></param>
10544 </member> 11081 </member>
10545 <member name="M:OpenMetaverse.InventoryBase.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11082 <member name="M:OpenMetaverse.Primitive.TextureAnimation.GetBytes">
10546 <summary> 11083 <summary>
11084
10547 </summary> 11085 </summary>
10548 <returns> 11086 <returns></returns>
10549 </returns>
10550 </member> 11087 </member>
10551 <member name="F:OpenMetaverse.InventoryBase.UUID"> 11088 <member name="T:OpenMetaverse.Primitive.ConstructionData">
10552 <summary>
10553 <seealso cref="T:OpenMetaverse.UUID" /> of item/folder</summary>
10554 </member>
10555 <member name="F:OpenMetaverse.InventoryBase.ParentUUID">
10556 <summary>
10557 <seealso cref="T:OpenMetaverse.UUID" /> of parent folder</summary>
10558 </member>
10559 <member name="F:OpenMetaverse.InventoryBase.Name">
10560 <summary>Name of item/folder</summary>
10561 </member>
10562 <member name="F:OpenMetaverse.InventoryBase.OwnerID">
10563 <summary>Item/Folder Owners <seealso cref="T:OpenMetaverse.UUID" /></summary>
10564 </member>
10565 <member name="M:OpenMetaverse.InventoryBase.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
10566 <summary> 11089 <summary>
11090 Parameters used to construct a visual representation of a primitive
10567 </summary> 11091 </summary>
10568 <returns>
10569 </returns>
10570 </member> 11092 </member>
10571 <member name="M:OpenMetaverse.InventoryBase.GetHashCode"> 11093 <member name="F:OpenMetaverse.Primitive.ConstructionData.profileCurve">
10572 <summary> 11094 <summary></summary>
10573 Generates a number corresponding to the value of the object to support the use of a hash table,
10574 suitable for use in hashing algorithms and data structures such as a hash table
10575 </summary>
10576 <returns>A Hashcode of all the combined InventoryBase fields</returns>
10577 </member> 11095 </member>
10578 <member name="M:OpenMetaverse.InventoryBase.Equals(System.Object)"> 11096 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathCurve">
10579 <summary> 11097 <summary></summary>
10580 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase" /> object is equal to the current object
10581 </summary>
10582 <param name="o">InventoryBase object to compare against</param>
10583 <returns>true if objects are the same</returns>
10584 </member> 11098 </member>
10585 <member name="M:OpenMetaverse.InventoryBase.Equals(OpenMetaverse.InventoryBase)"> 11099 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathEnd">
10586 <summary> 11100 <summary></summary>
10587 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase" /> object is equal to the current object
10588 </summary>
10589 <param name="o">InventoryBase object to compare against</param>
10590 <returns>true if objects are the same</returns>
10591 </member> 11101 </member>
10592 <member name="T:OpenMetaverse.InventoryItem"> 11102 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathRadiusOffset">
10593 <summary> 11103 <summary></summary>
10594 An Item in Inventory
10595 </summary>
10596 </member> 11104 </member>
10597 <member name="M:OpenMetaverse.InventoryItem.#ctor(OpenMetaverse.UUID)"> 11105 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathSkew">
10598 <summary> 11106 <summary></summary>
10599 Construct a new InventoryItem object
10600 </summary>
10601 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the item</param>
10602 </member> 11107 </member>
10603 <member name="M:OpenMetaverse.InventoryItem.#ctor(OpenMetaverse.InventoryType,OpenMetaverse.UUID)"> 11108 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathScaleX">
10604 <summary> 11109 <summary></summary>
10605 Construct a new InventoryItem object of a specific Type
10606 </summary>
10607 <param name="type">The type of item from <seealso cref="T:OpenMetaverse.InventoryType" /></param>
10608 <param name="itemID">
10609 <seealso cref="T:OpenMetaverse.UUID" /> of the item</param>
10610 </member> 11110 </member>
10611 <member name="M:OpenMetaverse.InventoryItem.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11111 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathScaleY">
10612 <summary> 11112 <summary></summary>
10613 </summary>
10614 <returns>
10615 </returns>
10616 </member> 11113 </member>
10617 <member name="F:OpenMetaverse.InventoryItem.AssetUUID"> 11114 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathShearX">
10618 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of this item</summary> 11115 <summary></summary>
10619 </member> 11116 </member>
10620 <member name="F:OpenMetaverse.InventoryItem.Permissions"> 11117 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathShearY">
10621 <summary>The combined <seealso cref="T:OpenMetaverse.Permissions" /> of this item</summary> 11118 <summary></summary>
10622 </member> 11119 </member>
10623 <member name="F:OpenMetaverse.InventoryItem.AssetType"> 11120 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTaperX">
10624 <summary>The type of item from <seealso cref="T:OpenMetaverse.AssetType" /></summary> 11121 <summary></summary>
10625 </member> 11122 </member>
10626 <member name="F:OpenMetaverse.InventoryItem.InventoryType"> 11123 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTaperY">
10627 <summary>The type of item from the <seealso cref="T:OpenMetaverse.InventoryType" /> enum</summary> 11124 <summary></summary>
10628 </member> 11125 </member>
10629 <member name="F:OpenMetaverse.InventoryItem.CreatorID"> 11126 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathBegin">
10630 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the creator of this item</summary> 11127 <summary></summary>
10631 </member> 11128 </member>
10632 <member name="F:OpenMetaverse.InventoryItem.Description"> 11129 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTwist">
10633 <summary>A Description of this item</summary> 11130 <summary></summary>
10634 </member> 11131 </member>
10635 <member name="F:OpenMetaverse.InventoryItem.GroupID"> 11132 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTwistBegin">
10636 <summary>The <seealso cref="T:OpenMetaverse.Group" />s <seealso cref="T:OpenMetaverse.UUID" /> this item is set to or owned by</summary> 11133 <summary></summary>
10637 </member> 11134 </member>
10638 <member name="F:OpenMetaverse.InventoryItem.GroupOwned"> 11135 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathRevolutions">
10639 <summary>If true, item is owned by a group</summary> 11136 <summary></summary>
10640 </member> 11137 </member>
10641 <member name="F:OpenMetaverse.InventoryItem.SalePrice"> 11138 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileBegin">
10642 <summary>The price this item can be purchased for</summary> 11139 <summary></summary>
10643 </member> 11140 </member>
10644 <member name="F:OpenMetaverse.InventoryItem.SaleType"> 11141 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileEnd">
10645 <summary>The type of sale from the <seealso cref="T:OpenMetaverse.SaleType" /> enum</summary> 11142 <summary></summary>
10646 </member> 11143 </member>
10647 <member name="F:OpenMetaverse.InventoryItem.Flags"> 11144 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileHollow">
10648 <summary>Combined flags from <seealso cref="T:OpenMetaverse.InventoryItemFlags" /></summary> 11145 <summary></summary>
10649 </member> 11146 </member>
10650 <member name="F:OpenMetaverse.InventoryItem.CreationDate"> 11147 <member name="F:OpenMetaverse.Primitive.ConstructionData.Material">
10651 <summary>Time and date this inventory item was created, stored as 11148 <summary></summary>
10652 UTC (Coordinated Universal Time)</summary>
10653 </member> 11149 </member>
10654 <member name="F:OpenMetaverse.InventoryItem.TransactionID"> 11150 <member name="F:OpenMetaverse.Primitive.ConstructionData.State">
10655 <summary>Used to update the AssetID in requests sent to the server</summary> 11151 <summary></summary>
10656 </member> 11152 </member>
10657 <member name="F:OpenMetaverse.InventoryItem.LastOwnerID"> 11153 <member name="F:OpenMetaverse.Primitive.ConstructionData.PCode">
10658 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the previous owner of the item</summary> 11154 <summary></summary>
10659 </member> 11155 </member>
10660 <member name="M:OpenMetaverse.InventoryItem.IsLink"> 11156 <member name="M:OpenMetaverse.Primitive.ConstructionData.GetHashCode">
10661 <summary> 11157 <summary>
10662 Indicates inventory item is a link 11158 Calculdates hash code for prim construction data
10663 </summary> 11159 </summary>
10664 <returns>True if inventory item is a link to another inventory item</returns> 11160 <returns>The has</returns>
10665 </member> 11161 </member>
10666 <member name="M:OpenMetaverse.InventoryItem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11162 <member name="P:OpenMetaverse.Primitive.ConstructionData.AttachmentPoint">
10667 <summary> 11163 <summary>Attachment point to an avatar</summary>
10668 </summary>
10669 <returns>
10670 </returns>
10671 </member> 11164 </member>
10672 <member name="M:OpenMetaverse.InventoryItem.GetHashCode"> 11165 <member name="P:OpenMetaverse.Primitive.ConstructionData.ProfileCurve">
10673 <summary> 11166 <summary></summary>
10674 Generates a number corresponding to the value of the object to support the use of a hash table.
10675 Suitable for use in hashing algorithms and data structures such as a hash table
10676 </summary>
10677 <returns>A Hashcode of all the combined InventoryItem fields</returns>
10678 </member> 11167 </member>
10679 <member name="M:OpenMetaverse.InventoryItem.Equals(System.Object)"> 11168 <member name="P:OpenMetaverse.Primitive.ConstructionData.ProfileHole">
10680 <summary> 11169 <summary></summary>
10681 Compares an object
10682 </summary>
10683 <param name="o">The object to compare</param>
10684 <returns>true if comparison object matches</returns>
10685 </member> 11170 </member>
10686 <member name="M:OpenMetaverse.InventoryItem.Equals(OpenMetaverse.InventoryBase)"> 11171 <member name="P:OpenMetaverse.Primitive.ConstructionData.PathBeginScale">
10687 <summary> 11172 <summary></summary>
10688 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase" /> object is equal to the current object
10689 </summary>
10690 <param name="o">The <seealso cref="T:OpenMetaverse.InventoryBase" /> object to compare against</param>
10691 <returns>true if objects are the same</returns>
10692 </member> 11173 </member>
10693 <member name="M:OpenMetaverse.InventoryItem.Equals(OpenMetaverse.InventoryItem)"> 11174 <member name="P:OpenMetaverse.Primitive.ConstructionData.PathEndScale">
10694 <summary> 11175 <summary></summary>
10695 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryItem" /> object is equal to the current object
10696 </summary>
10697 <param name="o">The <seealso cref="T:OpenMetaverse.InventoryItem" /> object to compare against</param>
10698 <returns>true if objects are the same</returns>
10699 </member> 11176 </member>
10700 <member name="T:OpenMetaverse.InventoryTexture"> 11177 <member name="T:OpenMetaverse.Primitive.FlexibleData">
10701 <summary> 11178 <summary>
10702 InventoryTexture Class representing a graphical image 11179 Information on the flexible properties of a primitive
10703 </summary> 11180 </summary>
10704 <seealso cref="!:ManagedImage" />
10705 </member> 11181 </member>
10706 <member name="M:OpenMetaverse.InventoryTexture.#ctor(OpenMetaverse.UUID)"> 11182 <member name="F:OpenMetaverse.Primitive.FlexibleData.Softness">
10707 <summary> 11183 <summary></summary>
10708 Construct an InventoryTexture object
10709 </summary>
10710 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10711 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10712 </member> 11184 </member>
10713 <member name="M:OpenMetaverse.InventoryTexture.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11185 <member name="F:OpenMetaverse.Primitive.FlexibleData.Gravity">
10714 <summary> 11186 <summary></summary>
10715 Construct an InventoryTexture object from a serialization stream
10716 </summary>
10717 </member> 11187 </member>
10718 <member name="T:OpenMetaverse.InventorySound"> 11188 <member name="F:OpenMetaverse.Primitive.FlexibleData.Drag">
10719 <summary> 11189 <summary></summary>
10720 InventorySound Class representing a playable sound
10721 </summary>
10722 </member> 11190 </member>
10723 <member name="M:OpenMetaverse.InventorySound.#ctor(OpenMetaverse.UUID)"> 11191 <member name="F:OpenMetaverse.Primitive.FlexibleData.Wind">
10724 <summary> 11192 <summary></summary>
10725 Construct an InventorySound object
10726 </summary>
10727 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10728 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10729 </member> 11193 </member>
10730 <member name="M:OpenMetaverse.InventorySound.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11194 <member name="F:OpenMetaverse.Primitive.FlexibleData.Tension">
10731 <summary> 11195 <summary></summary>
10732 Construct an InventorySound object from a serialization stream
10733 </summary>
10734 </member> 11196 </member>
10735 <member name="T:OpenMetaverse.InventoryCallingCard"> 11197 <member name="F:OpenMetaverse.Primitive.FlexibleData.Force">
10736 <summary> 11198 <summary></summary>
10737 InventoryCallingCard Class, contains information on another avatar
10738 </summary>
10739 </member> 11199 </member>
10740 <member name="M:OpenMetaverse.InventoryCallingCard.#ctor(OpenMetaverse.UUID)"> 11200 <member name="M:OpenMetaverse.Primitive.FlexibleData.#ctor">
10741 <summary> 11201 <summary>
10742 Construct an InventoryCallingCard object 11202 Default constructor
10743 </summary> 11203 </summary>
10744 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10745 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10746 </member> 11204 </member>
10747 <member name="M:OpenMetaverse.InventoryCallingCard.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11205 <member name="M:OpenMetaverse.Primitive.FlexibleData.#ctor(System.Byte[],System.Int32)">
10748 <summary> 11206 <summary>
10749 Construct an InventoryCallingCard object from a serialization stream 11207
10750 </summary> 11208 </summary>
11209 <param name="data"></param>
11210 <param name="pos"></param>
10751 </member> 11211 </member>
10752 <member name="T:OpenMetaverse.InventoryLandmark"> 11212 <member name="M:OpenMetaverse.Primitive.FlexibleData.GetBytes">
10753 <summary> 11213 <summary>
10754 InventoryLandmark Class, contains details on a specific location 11214
10755 </summary> 11215 </summary>
11216 <returns></returns>
10756 </member> 11217 </member>
10757 <member name="M:OpenMetaverse.InventoryLandmark.#ctor(OpenMetaverse.UUID)"> 11218 <member name="M:OpenMetaverse.Primitive.FlexibleData.GetOSD">
10758 <summary> 11219 <summary>
10759 Construct an InventoryLandmark object 11220
10760 </summary> 11221 </summary>
10761 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the 11222 <returns></returns>
10762 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10763 </member> 11223 </member>
10764 <member name="M:OpenMetaverse.InventoryLandmark.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11224 <member name="T:OpenMetaverse.Primitive.LightData">
10765 <summary> 11225 <summary>
10766 Construct an InventoryLandmark object from a serialization stream 11226 Information on the light properties of a primitive
10767 </summary> 11227 </summary>
10768 </member> 11228 </member>
10769 <member name="P:OpenMetaverse.InventoryLandmark.LandmarkVisited"> 11229 <member name="F:OpenMetaverse.Primitive.LightData.Color">
10770 <summary> 11230 <summary></summary>
10771 Landmarks use the InventoryItemFlags struct and will have a flag of 1 set if they have been visited
10772 </summary>
10773 </member> 11231 </member>
10774 <member name="T:OpenMetaverse.InventoryObject"> 11232 <member name="F:OpenMetaverse.Primitive.LightData.Intensity">
10775 <summary> 11233 <summary></summary>
10776 InventoryObject Class contains details on a primitive or coalesced set of primitives
10777 </summary>
10778 </member> 11234 </member>
10779 <member name="M:OpenMetaverse.InventoryObject.#ctor(OpenMetaverse.UUID)"> 11235 <member name="F:OpenMetaverse.Primitive.LightData.Radius">
10780 <summary> 11236 <summary></summary>
10781 Construct an InventoryObject object
10782 </summary>
10783 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10784 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10785 </member> 11237 </member>
10786 <member name="M:OpenMetaverse.InventoryObject.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11238 <member name="F:OpenMetaverse.Primitive.LightData.Cutoff">
10787 <summary> 11239 <summary></summary>
10788 Construct an InventoryObject object from a serialization stream
10789 </summary>
10790 </member> 11240 </member>
10791 <member name="P:OpenMetaverse.InventoryObject.ItemFlags"> 11241 <member name="F:OpenMetaverse.Primitive.LightData.Falloff">
10792 <summary> 11242 <summary></summary>
10793 Gets or sets the upper byte of the Flags value
10794 </summary>
10795 </member> 11243 </member>
10796 <member name="P:OpenMetaverse.InventoryObject.AttachPoint"> 11244 <member name="M:OpenMetaverse.Primitive.LightData.#ctor">
10797 <summary> 11245 <summary>
10798 Gets or sets the object attachment point, the lower byte of the Flags value 11246 Default constructor
10799 </summary> 11247 </summary>
10800 </member> 11248 </member>
10801 <member name="T:OpenMetaverse.InventoryNotecard"> 11249 <member name="M:OpenMetaverse.Primitive.LightData.#ctor(System.Byte[],System.Int32)">
10802 <summary> 11250 <summary>
10803 InventoryNotecard Class, contains details on an encoded text document 11251
10804 </summary> 11252 </summary>
11253 <param name="data"></param>
11254 <param name="pos"></param>
10805 </member> 11255 </member>
10806 <member name="M:OpenMetaverse.InventoryNotecard.#ctor(OpenMetaverse.UUID)"> 11256 <member name="M:OpenMetaverse.Primitive.LightData.GetBytes">
10807 <summary> 11257 <summary>
10808 Construct an InventoryNotecard object 11258
10809 </summary> 11259 </summary>
10810 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the 11260 <returns></returns>
10811 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10812 </member> 11261 </member>
10813 <member name="M:OpenMetaverse.InventoryNotecard.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11262 <member name="M:OpenMetaverse.Primitive.LightData.ToString">
10814 <summary> 11263 <summary>
10815 Construct an InventoryNotecard object from a serialization stream 11264
10816 </summary> 11265 </summary>
11266 <returns></returns>
10817 </member> 11267 </member>
10818 <member name="T:OpenMetaverse.InventoryCategory"> 11268 <member name="T:OpenMetaverse.Primitive.LightImage">
10819 <summary> 11269 <summary>
10820 InventoryCategory Class 11270 Information on the light properties of a primitive as texture map
10821 </summary> 11271 </summary>
10822 <remarks>TODO: Is this even used for anything?</remarks>
10823 </member> 11272 </member>
10824 <member name="M:OpenMetaverse.InventoryCategory.#ctor(OpenMetaverse.UUID)"> 11273 <member name="F:OpenMetaverse.Primitive.LightImage.LightTexture">
10825 <summary> 11274 <summary></summary>
10826 Construct an InventoryCategory object
10827 </summary>
10828 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10829 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10830 </member> 11275 </member>
10831 <member name="M:OpenMetaverse.InventoryCategory.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11276 <member name="F:OpenMetaverse.Primitive.LightImage.Params">
10832 <summary> 11277 <summary></summary>
10833 Construct an InventoryCategory object from a serialization stream
10834 </summary>
10835 </member> 11278 </member>
10836 <member name="T:OpenMetaverse.InventoryLSL"> 11279 <member name="M:OpenMetaverse.Primitive.LightImage.#ctor">
10837 <summary> 11280 <summary>
10838 InventoryLSL Class, represents a Linden Scripting Language object 11281 Default constructor
10839 </summary> 11282 </summary>
10840 </member> 11283 </member>
10841 <member name="M:OpenMetaverse.InventoryLSL.#ctor(OpenMetaverse.UUID)"> 11284 <member name="M:OpenMetaverse.Primitive.LightImage.#ctor(System.Byte[],System.Int32)">
10842 <summary> 11285 <summary>
10843 Construct an InventoryLSL object 11286
10844 </summary> 11287 </summary>
10845 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the 11288 <param name="data"></param>
10846 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param> 11289 <param name="pos"></param>
10847 </member> 11290 </member>
10848 <member name="M:OpenMetaverse.InventoryLSL.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11291 <member name="M:OpenMetaverse.Primitive.LightImage.GetBytes">
10849 <summary> 11292 <summary>
10850 Construct an InventoryLSL object from a serialization stream 11293
10851 </summary> 11294 </summary>
11295 <returns></returns>
10852 </member> 11296 </member>
10853 <member name="T:OpenMetaverse.InventorySnapshot"> 11297 <member name="M:OpenMetaverse.Primitive.LightImage.ToString">
10854 <summary> 11298 <summary>
10855 InventorySnapshot Class, an image taken with the viewer 11299
10856 </summary> 11300 </summary>
11301 <returns></returns>
10857 </member> 11302 </member>
10858 <member name="M:OpenMetaverse.InventorySnapshot.#ctor(OpenMetaverse.UUID)"> 11303 <member name="T:OpenMetaverse.Primitive.SculptData">
10859 <summary> 11304 <summary>
10860 Construct an InventorySnapshot object 11305 Information on the sculpt properties of a sculpted primitive
10861 </summary> 11306 </summary>
10862 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10863 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10864 </member> 11307 </member>
10865 <member name="M:OpenMetaverse.InventorySnapshot.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11308 <member name="M:OpenMetaverse.Primitive.SculptData.#ctor">
10866 <summary> 11309 <summary>
10867 Construct an InventorySnapshot object from a serialization stream 11310 Default constructor
10868 </summary> 11311 </summary>
10869 </member> 11312 </member>
10870 <member name="T:OpenMetaverse.InventoryAttachment"> 11313 <member name="M:OpenMetaverse.Primitive.SculptData.#ctor(System.Byte[],System.Int32)">
10871 <summary> 11314 <summary>
10872 InventoryAttachment Class, contains details on an attachable object 11315
10873 </summary> 11316 </summary>
11317 <param name="data"></param>
11318 <param name="pos"></param>
10874 </member> 11319 </member>
10875 <member name="M:OpenMetaverse.InventoryAttachment.#ctor(OpenMetaverse.UUID)"> 11320 <member name="P:OpenMetaverse.Primitive.SculptData.Invert">
10876 <summary> 11321 <summary>
10877 Construct an InventoryAttachment object 11322 Render inside out (inverts the normals).
10878 </summary> 11323 </summary>
10879 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10880 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10881 </member> 11324 </member>
10882 <member name="M:OpenMetaverse.InventoryAttachment.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11325 <member name="P:OpenMetaverse.Primitive.SculptData.Mirror">
10883 <summary> 11326 <summary>
10884 Construct an InventoryAttachment object from a serialization stream 11327 Render an X axis mirror of the sculpty.
10885 </summary> 11328 </summary>
10886 </member> 11329 </member>
10887 <member name="P:OpenMetaverse.InventoryAttachment.AttachmentPoint"> 11330 <member name="T:OpenMetaverse.Primitive.ObjectProperties">
10888 <summary> 11331 <summary>
10889 Get the last AttachmentPoint this object was attached to 11332 Extended properties to describe an object
10890 </summary> 11333 </summary>
10891 </member> 11334 </member>
10892 <member name="T:OpenMetaverse.InventoryWearable"> 11335 <member name="F:OpenMetaverse.Primitive.ObjectProperties.ObjectID">
10893 <summary> 11336 <summary></summary>
10894 InventoryWearable Class, details on a clothing item or body part
10895 </summary>
10896 </member> 11337 </member>
10897 <member name="M:OpenMetaverse.InventoryWearable.#ctor(OpenMetaverse.UUID)"> 11338 <member name="F:OpenMetaverse.Primitive.ObjectProperties.CreatorID">
10898 <summary> 11339 <summary></summary>
10899 Construct an InventoryWearable object
10900 </summary>
10901 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10902 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10903 </member> 11340 </member>
10904 <member name="M:OpenMetaverse.InventoryWearable.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11341 <member name="F:OpenMetaverse.Primitive.ObjectProperties.OwnerID">
10905 <summary> 11342 <summary></summary>
10906 Construct an InventoryWearable object from a serialization stream
10907 </summary>
10908 </member> 11343 </member>
10909 <member name="P:OpenMetaverse.InventoryWearable.WearableType"> 11344 <member name="F:OpenMetaverse.Primitive.ObjectProperties.GroupID">
10910 <summary> 11345 <summary></summary>
10911 The <seealso cref="T:OpenMetaverse.WearableType" />, Skin, Shape, Skirt, Etc
10912 </summary>
10913 </member> 11346 </member>
10914 <member name="T:OpenMetaverse.InventoryAnimation"> 11347 <member name="F:OpenMetaverse.Primitive.ObjectProperties.CreationDate">
10915 <summary> 11348 <summary></summary>
10916 InventoryAnimation Class, A bvh encoded object which animates an avatar
10917 </summary>
10918 </member> 11349 </member>
10919 <member name="M:OpenMetaverse.InventoryAnimation.#ctor(OpenMetaverse.UUID)"> 11350 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Permissions">
10920 <summary> 11351 <summary></summary>
10921 Construct an InventoryAnimation object
10922 </summary>
10923 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10924 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10925 </member> 11352 </member>
10926 <member name="M:OpenMetaverse.InventoryAnimation.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11353 <member name="F:OpenMetaverse.Primitive.ObjectProperties.OwnershipCost">
10927 <summary> 11354 <summary></summary>
10928 Construct an InventoryAnimation object from a serialization stream
10929 </summary>
10930 </member> 11355 </member>
10931 <member name="T:OpenMetaverse.InventoryGesture"> 11356 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SaleType">
10932 <summary> 11357 <summary></summary>
10933 InventoryGesture Class, details on a series of animations, sounds, and actions
10934 </summary>
10935 </member> 11358 </member>
10936 <member name="M:OpenMetaverse.InventoryGesture.#ctor(OpenMetaverse.UUID)"> 11359 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SalePrice">
10937 <summary> 11360 <summary></summary>
10938 Construct an InventoryGesture object
10939 </summary>
10940 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID" /> which becomes the
10941 <seealso cref="T:OpenMetaverse.InventoryItem" /> objects AssetUUID</param>
10942 </member> 11361 </member>
10943 <member name="M:OpenMetaverse.InventoryGesture.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11362 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePerms">
10944 <summary> 11363 <summary></summary>
10945 Construct an InventoryGesture object from a serialization stream
10946 </summary>
10947 </member> 11364 </member>
10948 <member name="T:OpenMetaverse.InventoryFolder"> 11365 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePermTextures">
10949 <summary> 11366 <summary></summary>
10950 A folder contains <seealso cref="T:OpenMetaverse.InventoryItem" />s and has certain attributes specific
10951 to itself
10952 </summary>
10953 </member> 11367 </member>
10954 <member name="M:OpenMetaverse.InventoryFolder.#ctor(OpenMetaverse.UUID)"> 11368 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePermTexturesOwner">
10955 <summary> 11369 <summary></summary>
10956 Constructor
10957 </summary>
10958 <param name="itemID">UUID of the folder</param>
10959 </member> 11370 </member>
10960 <member name="M:OpenMetaverse.InventoryFolder.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11371 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Category">
10961 <summary> 11372 <summary></summary>
10962 Construct an InventoryFolder object from a serialization stream
10963 </summary>
10964 </member> 11373 </member>
10965 <member name="F:OpenMetaverse.InventoryFolder.PreferredType"> 11374 <member name="F:OpenMetaverse.Primitive.ObjectProperties.InventorySerial">
10966 <summary>The Preferred <seealso cref="T:OpenMetaverse.AssetType" /> for a folder.</summary> 11375 <summary></summary>
10967 </member> 11376 </member>
10968 <member name="F:OpenMetaverse.InventoryFolder.Version"> 11377 <member name="F:OpenMetaverse.Primitive.ObjectProperties.ItemID">
10969 <summary>The Version of this folder</summary> 11378 <summary></summary>
10970 </member> 11379 </member>
10971 <member name="F:OpenMetaverse.InventoryFolder.DescendentCount"> 11380 <member name="F:OpenMetaverse.Primitive.ObjectProperties.FolderID">
10972 <summary>Number of child items this folder contains.</summary> 11381 <summary></summary>
10973 </member> 11382 </member>
10974 <member name="M:OpenMetaverse.InventoryFolder.ToString"> 11383 <member name="F:OpenMetaverse.Primitive.ObjectProperties.FromTaskID">
10975 <summary> 11384 <summary></summary>
10976 </summary>
10977 <returns>
10978 </returns>
10979 </member> 11385 </member>
10980 <member name="M:OpenMetaverse.InventoryFolder.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11386 <member name="F:OpenMetaverse.Primitive.ObjectProperties.LastOwnerID">
10981 <summary> 11387 <summary></summary>
10982 Get Serilization data for this InventoryFolder object
10983 </summary>
10984 </member> 11388 </member>
10985 <member name="M:OpenMetaverse.InventoryFolder.GetHashCode"> 11389 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Name">
10986 <summary> 11390 <summary></summary>
10987 </summary>
10988 <returns>
10989 </returns>
10990 </member> 11391 </member>
10991 <member name="M:OpenMetaverse.InventoryFolder.Equals(System.Object)"> 11392 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Description">
10992 <summary> 11393 <summary></summary>
10993 </summary>
10994 <param name="o">
10995 </param>
10996 <returns>
10997 </returns>
10998 </member> 11394 </member>
10999 <member name="M:OpenMetaverse.InventoryFolder.Equals(OpenMetaverse.InventoryBase)"> 11395 <member name="F:OpenMetaverse.Primitive.ObjectProperties.TouchName">
11000 <summary> 11396 <summary></summary>
11001 </summary>
11002 <param name="o">
11003 </param>
11004 <returns>
11005 </returns>
11006 </member> 11397 </member>
11007 <member name="M:OpenMetaverse.InventoryFolder.Equals(OpenMetaverse.InventoryFolder)"> 11398 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SitName">
11008 <summary> 11399 <summary></summary>
11009 </summary>
11010 <param name="o">
11011 </param>
11012 <returns>
11013 </returns>
11014 </member> 11400 </member>
11015 <member name="T:OpenMetaverse.InventoryManager"> 11401 <member name="F:OpenMetaverse.Primitive.ObjectProperties.TextureIDs">
11016 <summary> 11402 <summary></summary>
11017 Tools for dealing with agents inventory
11018 </summary>
11019 </member> 11403 </member>
11020 <member name="M:OpenMetaverse.InventoryManager.#ctor(OpenMetaverse.GridClient)"> 11404 <member name="M:OpenMetaverse.Primitive.ObjectProperties.#ctor">
11021 <summary> 11405 <summary>
11022 Default constructor 11406 Default constructor
11023 </summary> 11407 </summary>
11024 <param name="client">Reference to the GridClient object</param>
11025 </member>
11026 <member name="T:OpenMetaverse.InventoryManager.ItemCreatedCallback">
11027 <summary>
11028 Callback for inventory item creation finishing
11029 </summary>
11030 <param name="success">Whether the request to create an inventory
11031 item succeeded or not</param>
11032 <param name="item">Inventory item being created. If success is
11033 false this will be null</param>
11034 </member>
11035 <member name="T:OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback">
11036 <summary>
11037 Callback for an inventory item being create from an uploaded asset
11038 </summary>
11039 <param name="success">true if inventory item creation was successful</param>
11040 <param name="status">
11041 </param>
11042 <param name="itemID">
11043 </param>
11044 <param name="assetID">
11045 </param>
11046 </member>
11047 <member name="T:OpenMetaverse.InventoryManager.ItemCopiedCallback">
11048 <summary>
11049 </summary>
11050 <param name="item">
11051 </param>
11052 </member>
11053 <member name="T:OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback">
11054 <summary>
11055 Reply received when uploading an inventory asset
11056 </summary>
11057 <param name="success">Has upload been successful</param>
11058 <param name="status">Error message if upload failed</param>
11059 <param name="itemID">Inventory asset UUID</param>
11060 <param name="assetID">New asset UUID</param>
11061 </member> 11408 </member>
11062 <member name="T:OpenMetaverse.InventoryManager.ScriptUpdatedCallback"> 11409 <member name="M:OpenMetaverse.Primitive.ObjectProperties.SetFamilyProperties(OpenMetaverse.Primitive.ObjectProperties)">
11063 <summary> 11410 <summary>
11064 Delegate that is invoked when script upload is completed 11411 Set the properties that are set in an ObjectPropertiesFamily packet
11065 </summary> 11412 </summary>
11066 <param name="uploadSuccess">Has upload succeded (note, there still might be compile errors)</param> 11413 <param name="props"><seealso cref="T:OpenMetaverse.Primitive.ObjectProperties"/> that has
11067 <param name="uploadStatus">Upload status message</param> 11414 been partially filled by an ObjectPropertiesFamily packet</param>
11068 <param name="compileSuccess">Is compilation successful</param>
11069 <param name="compileMessages">If compilation failed, list of error messages, null on compilation success</param>
11070 <param name="itemID">Script inventory UUID</param>
11071 <param name="assetID">Script's new asset UUID</param>
11072 </member>
11073 <member name="F:OpenMetaverse.InventoryManager.MAGIC_ID">
11074 <summary>Used for converting shadow_id to asset_id</summary>
11075 </member>
11076 <member name="F:OpenMetaverse.InventoryManager.m_ItemReceived">
11077 <summary>The event subscribers, null of no subscribers</summary>
11078 </member>
11079 <member name="F:OpenMetaverse.InventoryManager.m_ItemReceivedLock">
11080 <summary>Thread sync lock object</summary>
11081 </member>
11082 <member name="F:OpenMetaverse.InventoryManager.m_FolderUpdated">
11083 <summary>The event subscribers, null of no subscribers</summary>
11084 </member>
11085 <member name="F:OpenMetaverse.InventoryManager.m_FolderUpdatedLock">
11086 <summary>Thread sync lock object</summary>
11087 </member>
11088 <member name="F:OpenMetaverse.InventoryManager.m_InventoryObjectOffered">
11089 <summary>The event subscribers, null of no subscribers</summary>
11090 </member>
11091 <member name="F:OpenMetaverse.InventoryManager.m_InventoryObjectOfferedLock">
11092 <summary>Thread sync lock object</summary>
11093 </member>
11094 <member name="F:OpenMetaverse.InventoryManager.m_TaskItemReceived">
11095 <summary>The event subscribers, null of no subscribers</summary>
11096 </member>
11097 <member name="F:OpenMetaverse.InventoryManager.m_TaskItemReceivedLock">
11098 <summary>Thread sync lock object</summary>
11099 </member>
11100 <member name="F:OpenMetaverse.InventoryManager.m_FindObjectByPathReply">
11101 <summary>The event subscribers, null of no subscribers</summary>
11102 </member>
11103 <member name="F:OpenMetaverse.InventoryManager.m_FindObjectByPathReplyLock">
11104 <summary>Thread sync lock object</summary>
11105 </member>
11106 <member name="F:OpenMetaverse.InventoryManager.m_TaskInventoryReply">
11107 <summary>The event subscribers, null of no subscribers</summary>
11108 </member>
11109 <member name="F:OpenMetaverse.InventoryManager.m_TaskInventoryReplyLock">
11110 <summary>Thread sync lock object</summary>
11111 </member>
11112 <member name="F:OpenMetaverse.InventoryManager.m_SaveAssetToInventory">
11113 <summary>The event subscribers, null of no subscribers</summary>
11114 </member>
11115 <member name="F:OpenMetaverse.InventoryManager.m_SaveAssetToInventoryLock">
11116 <summary>Thread sync lock object</summary>
11117 </member>
11118 <member name="F:OpenMetaverse.InventoryManager.m_ScriptRunningReply">
11119 <summary>The event subscribers, null of no subscribers</summary>
11120 </member>
11121 <member name="F:OpenMetaverse.InventoryManager.m_ScriptRunningReplyLock">
11122 <summary>Thread sync lock object</summary>
11123 </member>
11124 <member name="F:OpenMetaverse.InventoryManager._NewFolderNames">
11125 <summary>Partial mapping of AssetTypes to folder names</summary>
11126 </member>
11127 <member name="E:OpenMetaverse.InventoryManager.ItemReceived">
11128 <summary>Raised when the simulator sends us data containing
11129 ...</summary>
11130 </member>
11131 <member name="E:OpenMetaverse.InventoryManager.FolderUpdated">
11132 <summary>Raised when the simulator sends us data containing
11133 ...</summary>
11134 </member>
11135 <member name="E:OpenMetaverse.InventoryManager.InventoryObjectOffered">
11136 <summary>Raised when the simulator sends us data containing
11137 an inventory object sent by another avatar or primitive</summary>
11138 </member>
11139 <member name="E:OpenMetaverse.InventoryManager.TaskItemReceived">
11140 <summary>Raised when the simulator sends us data containing
11141 ...</summary>
11142 </member>
11143 <member name="E:OpenMetaverse.InventoryManager.FindObjectByPathReply">
11144 <summary>Raised when the simulator sends us data containing
11145 ...</summary>
11146 </member>
11147 <member name="E:OpenMetaverse.InventoryManager.TaskInventoryReply">
11148 <summary>Raised when the simulator sends us data containing
11149 ...</summary>
11150 </member>
11151 <member name="E:OpenMetaverse.InventoryManager.SaveAssetToInventory">
11152 <summary>Raised when the simulator sends us data containing
11153 ...</summary>
11154 </member>
11155 <member name="E:OpenMetaverse.InventoryManager.ScriptRunningReply">
11156 <summary>Raised when the simulator sends us data containing
11157 ...</summary>
11158 </member> 11415 </member>
11159 <member name="P:OpenMetaverse.InventoryManager.Store"> 11416 <member name="T:OpenMetaverse.Primitive.PhysicsProperties">
11160 <summary> 11417 <summary>
11161 Get this agents Inventory data 11418 Describes physics attributes of the prim
11162 </summary> 11419 </summary>
11163 </member> 11420 </member>
11164 <member name="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)"> 11421 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.LocalID">
11165 <summary>Raises the ItemReceived Event</summary> 11422 <summary>Primitive's local ID</summary>
11166 <param name="e">A ItemReceivedEventArgs object containing
11167 the data sent from the simulator</param>
11168 </member>
11169 <member name="M:OpenMetaverse.InventoryManager.OnFolderUpdated(OpenMetaverse.FolderUpdatedEventArgs)">
11170 <summary>Raises the FolderUpdated Event</summary>
11171 <param name="e">A FolderUpdatedEventArgs object containing
11172 the data sent from the simulator</param>
11173 </member>
11174 <member name="M:OpenMetaverse.InventoryManager.OnInventoryObjectOffered(OpenMetaverse.InventoryObjectOfferedEventArgs)">
11175 <summary>Raises the InventoryObjectOffered Event</summary>
11176 <param name="e">A InventoryObjectOfferedEventArgs object containing
11177 the data sent from the simulator</param>
11178 </member>
11179 <member name="M:OpenMetaverse.InventoryManager.OnTaskItemReceived(OpenMetaverse.TaskItemReceivedEventArgs)">
11180 <summary>Raises the TaskItemReceived Event</summary>
11181 <param name="e">A TaskItemReceivedEventArgs object containing
11182 the data sent from the simulator</param>
11183 </member> 11423 </member>
11184 <member name="M:OpenMetaverse.InventoryManager.OnFindObjectByPathReply(OpenMetaverse.FindObjectByPathReplyEventArgs)"> 11424 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Density">
11185 <summary>Raises the FindObjectByPath Event</summary> 11425 <summary>Density (1000 for normal density)</summary>
11186 <param name="e">A FindObjectByPathEventArgs object containing
11187 the data sent from the simulator</param>
11188 </member> 11426 </member>
11189 <member name="M:OpenMetaverse.InventoryManager.OnTaskInventoryReply(OpenMetaverse.TaskInventoryReplyEventArgs)"> 11427 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Friction">
11190 <summary>Raises the TaskInventoryReply Event</summary> 11428 <summary>Friction</summary>
11191 <param name="e">A TaskInventoryReplyEventArgs object containing
11192 the data sent from the simulator</param>
11193 </member> 11429 </member>
11194 <member name="M:OpenMetaverse.InventoryManager.OnSaveAssetToInventory(OpenMetaverse.SaveAssetToInventoryEventArgs)"> 11430 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.GravityMultiplier">
11195 <summary>Raises the SaveAssetToInventory Event</summary> 11431 <summary>Gravity multiplier (1 for normal gravity) </summary>
11196 <param name="e">A SaveAssetToInventoryEventArgs object containing
11197 the data sent from the simulator</param>
11198 </member> 11432 </member>
11199 <member name="M:OpenMetaverse.InventoryManager.OnScriptRunningReply(OpenMetaverse.ScriptRunningReplyEventArgs)"> 11433 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.PhysicsShapeType">
11200 <summary>Raises the ScriptRunningReply Event</summary> 11434 <summary>Type of physics representation of this primitive in the simulator</summary>
11201 <param name="e">A ScriptRunningReplyEventArgs object containing
11202 the data sent from the simulator</param>
11203 </member> 11435 </member>
11204 <member name="M:OpenMetaverse.InventoryManager.FetchItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Int32)"> 11436 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Restitution">
11205 <summary> 11437 <summary>Restitution</summary>
11206 Fetch an inventory item from the dataserver
11207 </summary>
11208 <param name="itemID">The items <seealso cref="T:OpenMetaverse.UUID" /></param>
11209 <param name="ownerID">The item Owners <seealso cref="T:OpenMetaverse.UUID" /></param>
11210 <param name="timeoutMS">a integer representing the number of milliseconds to wait for results</param>
11211 <returns>An <seealso cref="T:OpenMetaverse.InventoryItem" /> object on success, or null if no item was found</returns>
11212 <remarks>Items will also be sent to the <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)" /> event</remarks>
11213 </member> 11438 </member>
11214 <member name="M:OpenMetaverse.InventoryManager.RequestFetchInventory(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 11439 <member name="M:OpenMetaverse.Primitive.PhysicsProperties.FromOSD(OpenMetaverse.StructuredData.OSD)">
11215 <summary> 11440 <summary>
11216 Request A single inventory item 11441 Creates PhysicsProperties from OSD
11217 </summary> 11442 </summary>
11218 <param name="itemID">The items <seealso cref="T:OpenMetaverse.UUID" /></param> 11443 <param name="osd">OSDMap with incoming data</param>
11219 <param name="ownerID">The item Owners <seealso cref="T:OpenMetaverse.UUID" /></param> 11444 <returns>Deserialized PhysicsProperties object</returns>
11220 <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)" />
11221 </member> 11445 </member>
11222 <member name="M:OpenMetaverse.InventoryManager.RequestFetchInventory(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID})"> 11446 <member name="M:OpenMetaverse.Primitive.PhysicsProperties.GetOSD">
11223 <summary> 11447 <summary>
11224 Request inventory items 11448 Serializes PhysicsProperties to OSD
11225 </summary> 11449 </summary>
11226 <param name="itemIDs">Inventory items to request</param> 11450 <returns>OSDMap with serialized PhysicsProperties data</returns>
11227 <param name="ownerIDs">Owners of the inventory items</param>
11228 <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)" />
11229 </member> 11451 </member>
11230 <member name="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)"> 11452 <member name="T:OpenMetaverse.Primitive.ParticleSystem">
11231 <summary> 11453 <summary>
11232 Get contents of a folder 11454 Complete structure for the particle system
11233 </summary> 11455 </summary>
11234 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID" /> of the folder to search</param>
11235 <param name="owner">The <seealso cref="T:OpenMetaverse.UUID" /> of the folders owner</param>
11236 <param name="folders">true to retrieve folders</param>
11237 <param name="items">true to retrieve items</param>
11238 <param name="order">sort order to return results in</param>
11239 <param name="timeoutMS">a integer representing the number of milliseconds to wait for results</param>
11240 <returns>A list of inventory items matching search criteria within folder</returns>
11241 <seealso cref="M:OpenMetaverse.InventoryManager.RequestFolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)" />
11242 <remarks>InventoryFolder.DescendentCount will only be accurate if both folders and items are
11243 requested</remarks>
11244 </member> 11456 </member>
11245 <member name="M:OpenMetaverse.InventoryManager.RequestFolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)"> 11457 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartFlags">
11246 <summary> 11458 <summary>Particle Flags</summary>
11247 Request the contents of an inventory folder 11459 <remarks>There appears to be more data packed in to this area
11248 </summary> 11460 for many particle systems. It doesn't appear to be flag values
11249 <param name="folder">The folder to search</param> 11461 and serialization breaks unless there is a flag for every
11250 <param name="owner">The folder owners <seealso cref="T:OpenMetaverse.UUID" /></param> 11462 possible bit so it is left as an unsigned integer</remarks>
11251 <param name="folders">true to return <seealso cref="!:InventoryManager.InventoryFolder" />s contained in folder</param>
11252 <param name="items">true to return <seealso cref="!:InventoryManager.InventoryItem" />s containd in folder</param>
11253 <param name="order">the sort order to return items in</param>
11254 <seealso cref="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)" />
11255 </member> 11463 </member>
11256 <member name="M:OpenMetaverse.InventoryManager.RequestFolderContentsCap(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)"> 11464 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Pattern">
11257 <summary> 11465 <summary><seealso cref="T:SourcePattern"/> pattern of particles</summary>
11258 Request the contents of an inventory folder using HTTP capabilities
11259 </summary>
11260 <param name="folderID">The folder to search</param>
11261 <param name="ownerID">The folder owners <seealso cref="T:OpenMetaverse.UUID" /></param>
11262 <param name="fetchFolders">true to return <seealso cref="!:InventoryManager.InventoryFolder" />s contained in folder</param>
11263 <param name="fetchItems">true to return <seealso cref="!:InventoryManager.InventoryItem" />s containd in folder</param>
11264 <param name="order">the sort order to return items in</param>
11265 <seealso cref="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)" />
11266 </member> 11466 </member>
11267 <member name="M:OpenMetaverse.InventoryManager.FindFolderForType(OpenMetaverse.AssetType)"> 11467 <member name="F:OpenMetaverse.Primitive.ParticleSystem.MaxAge">
11268 <summary> 11468 <summary>A <see langword="float"/> representing the maximimum age (in seconds) particle will be displayed</summary>
11269 Returns the UUID of the folder (category) that defaults to 11469 <remarks>Maximum value is 30 seconds</remarks>
11270 containing 'type'. The folder is not necessarily only for that
11271 type
11272 </summary>
11273 <remarks>This will return the root folder if one does not exist</remarks>
11274 <param name="type">
11275 </param>
11276 <returns>The UUID of the desired folder if found, the UUID of the RootFolder
11277 if not found, or UUID.Zero on failure</returns>
11278 </member> 11470 </member>
11279 <member name="M:OpenMetaverse.InventoryManager.FindObjectByPath(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.Int32)"> 11471 <member name="F:OpenMetaverse.Primitive.ParticleSystem.StartAge">
11280 <summary> 11472 <summary>A <see langword="float"/> representing the number of seconds,
11281 Find an object in inventory using a specific path to search 11473 from when the particle source comes into view,
11282 </summary> 11474 or the particle system's creation, that the object will emits particles;
11283 <param name="baseFolder">The folder to begin the search in</param> 11475 after this time period no more particles are emitted</summary>
11284 <param name="inventoryOwner">The object owners <seealso cref="T:OpenMetaverse.UUID" /></param>
11285 <param name="path">A string path to search</param>
11286 <param name="timeoutMS">milliseconds to wait for a reply</param>
11287 <returns>Found items <seealso cref="T:OpenMetaverse.UUID" /> or <seealso cref="F:OpenMetaverse.UUID.Zero" /> if
11288 timeout occurs or item is not found</returns>
11289 </member> 11476 </member>
11290 <member name="M:OpenMetaverse.InventoryManager.RequestFindObjectByPath(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)"> 11477 <member name="F:OpenMetaverse.Primitive.ParticleSystem.InnerAngle">
11291 <summary> 11478 <summary>A <see langword="float"/> in radians that specifies where particles will not be created</summary>
11292 Find inventory items by path
11293 </summary>
11294 <param name="baseFolder">The folder to begin the search in</param>
11295 <param name="inventoryOwner">The object owners <seealso cref="T:OpenMetaverse.UUID" /></param>
11296 <param name="path">A string path to search, folders/objects separated by a '/'</param>
11297 <remarks>Results are sent to the <seealso cref="!:InventoryManager.OnFindObjectByPath" /> event</remarks>
11298 </member> 11479 </member>
11299 <member name="M:OpenMetaverse.InventoryManager.LocalFind(OpenMetaverse.UUID,System.String[],System.Int32,System.Boolean)"> 11480 <member name="F:OpenMetaverse.Primitive.ParticleSystem.OuterAngle">
11300 <summary> 11481 <summary>A <see langword="float"/> in radians that specifies where particles will be created</summary>
11301 Search inventory Store object for an item or folder
11302 </summary>
11303 <param name="baseFolder">The folder to begin the search in</param>
11304 <param name="path">An array which creates a path to search</param>
11305 <param name="level">Number of levels below baseFolder to conduct searches</param>
11306 <param name="firstOnly">if True, will stop searching after first match is found</param>
11307 <returns>A list of inventory items found</returns>
11308 </member> 11482 </member>
11309 <member name="M:OpenMetaverse.InventoryManager.Move(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryFolder)"> 11483 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstRate">
11310 <summary> 11484 <summary>A <see langword="float"/> representing the number of seconds between burts.</summary>
11311 Move an inventory item or folder to a new location
11312 </summary>
11313 <param name="item">The <seealso cref="T:InventoryBase" /> item or folder to move</param>
11314 <param name="newParent">The <seealso cref="T:InventoryFolder" /> to move item or folder to</param>
11315 </member> 11485 </member>
11316 <member name="M:OpenMetaverse.InventoryManager.Move(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryFolder,System.String)"> 11486 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstRadius">
11317 <summary> 11487 <summary>A <see langword="float"/> representing the number of meters
11318 Move an inventory item or folder to a new location and change its name 11488 around the center of the source where particles will be created.</summary>
11319 </summary>
11320 <param name="item">The <seealso cref="T:InventoryBase" /> item or folder to move</param>
11321 <param name="newParent">The <seealso cref="T:InventoryFolder" /> to move item or folder to</param>
11322 <param name="newName">The name to change the item or folder to</param>
11323 </member> 11489 </member>
11324 <member name="M:OpenMetaverse.InventoryManager.MoveFolder(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)"> 11490 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstSpeedMin">
11325 <summary> 11491 <summary>A <see langword="float"/> representing in seconds, the minimum speed between bursts of new particles
11326 Move and rename a folder 11492 being emitted</summary>
11327 </summary>
11328 <param name="folderID">The source folders <seealso cref="T:OpenMetaverse.UUID" /></param>
11329 <param name="newparentID">The destination folders <seealso cref="T:OpenMetaverse.UUID" /></param>
11330 <param name="newName">The name to change the folder to</param>
11331 </member> 11493 </member>
11332 <member name="M:OpenMetaverse.InventoryManager.UpdateFolderProperties(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType)"> 11494 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstSpeedMax">
11333 <summary> 11495 <summary>A <see langword="float"/> representing in seconds the maximum speed of new particles being emitted.</summary>
11334 Update folder properties
11335 </summary>
11336 <param name="folderID">
11337 <seealso cref="T:OpenMetaverse.UUID" /> of the folder to update</param>
11338 <param name="parentID">Sets folder's parent to <seealso cref="T:OpenMetaverse.UUID" /></param>
11339 <param name="name">Folder name</param>
11340 <param name="type">Folder type</param>
11341 </member> 11496 </member>
11342 <member name="M:OpenMetaverse.InventoryManager.MoveFolder(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 11497 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstPartCount">
11343 <summary> 11498 <summary>A <see langword="byte"/> representing the maximum number of particles emitted per burst</summary>
11344 Move a folder
11345 </summary>
11346 <param name="folderID">The source folders <seealso cref="T:OpenMetaverse.UUID" /></param>
11347 <param name="newParentID">The destination folders <seealso cref="T:OpenMetaverse.UUID" /></param>
11348 </member> 11499 </member>
11349 <member name="M:OpenMetaverse.InventoryManager.MoveFolders(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.UUID})"> 11500 <member name="F:OpenMetaverse.Primitive.ParticleSystem.AngularVelocity">
11350 <summary> 11501 <summary>A <see cref="T:Vector3"/> which represents the velocity (speed) from the source which particles are emitted</summary>
11351 Move multiple folders, the keys in the Dictionary parameter,
11352 to a new parents, the value of that folder's key.
11353 </summary>
11354 <param name="foldersNewParents">A Dictionary containing the
11355 <seealso cref="T:OpenMetaverse.UUID" /> of the source as the key, and the
11356 <seealso cref="T:OpenMetaverse.UUID" /> of the destination as the value</param>
11357 </member> 11502 </member>
11358 <member name="M:OpenMetaverse.InventoryManager.MoveItem(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 11503 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartAcceleration">
11359 <summary> 11504 <summary>A <see cref="T:Vector3"/> which represents the Acceleration from the source which particles are emitted</summary>
11360 Move an inventory item to a new folder
11361 </summary>
11362 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the source item to move</param>
11363 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID" /> of the destination folder</param>
11364 </member> 11505 </member>
11365 <member name="M:OpenMetaverse.InventoryManager.MoveItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)"> 11506 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Texture">
11366 <summary> 11507 <summary>The <see cref="T:UUID"/> Key of the texture displayed on the particle</summary>
11367 Move and rename an inventory item
11368 </summary>
11369 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the source item to move</param>
11370 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID" /> of the destination folder</param>
11371 <param name="newName">The name to change the folder to</param>
11372 </member> 11508 </member>
11373 <member name="M:OpenMetaverse.InventoryManager.MoveItems(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.UUID})"> 11509 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Target">
11374 <summary> 11510 <summary>The <see cref="T:UUID"/> Key of the specified target object or avatar particles will follow</summary>
11375 Move multiple inventory items to new locations
11376 </summary>
11377 <param name="itemsNewParents">A Dictionary containing the
11378 <seealso cref="T:OpenMetaverse.UUID" /> of the source item as the key, and the
11379 <seealso cref="T:OpenMetaverse.UUID" /> of the destination folder as the value</param>
11380 </member> 11511 </member>
11381 <member name="M:OpenMetaverse.InventoryManager.RemoveDescendants(OpenMetaverse.UUID)"> 11512 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartDataFlags">
11382 <summary> 11513 <summary>Flags of particle from <seealso cref="T:ParticleDataFlags"/></summary>
11383 Remove descendants of a folder
11384 </summary>
11385 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID" /> of the folder</param>
11386 </member> 11514 </member>
11387 <member name="M:OpenMetaverse.InventoryManager.RemoveItem(OpenMetaverse.UUID)"> 11515 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartMaxAge">
11388 <summary> 11516 <summary>Max Age particle system will emit particles for</summary>
11389 Remove a single item from inventory
11390 </summary>
11391 <param name="item">The <seealso cref="T:OpenMetaverse.UUID" /> of the inventory item to remove</param>
11392 </member> 11517 </member>
11393 <member name="M:OpenMetaverse.InventoryManager.RemoveFolder(OpenMetaverse.UUID)"> 11518 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartColor">
11394 <summary> 11519 <summary>The <see cref="T:Color4"/> the particle has at the beginning of its lifecycle</summary>
11395 Remove a folder from inventory
11396 </summary>
11397 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID" /> of the folder to remove</param>
11398 </member> 11520 </member>
11399 <member name="M:OpenMetaverse.InventoryManager.Remove(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID})"> 11521 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndColor">
11400 <summary> 11522 <summary>The <see cref="T:Color4"/> the particle has at the ending of its lifecycle</summary>
11401 Remove multiple items or folders from inventory
11402 </summary>
11403 <param name="items">A List containing the <seealso cref="T:OpenMetaverse.UUID" />s of items to remove</param>
11404 <param name="folders">A List containing the <seealso cref="T:OpenMetaverse.UUID" />s of the folders to remove</param>
11405 </member> 11523 </member>
11406 <member name="M:OpenMetaverse.InventoryManager.EmptyLostAndFound"> 11524 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartScaleX">
11407 <summary> 11525 <summary>A <see langword="float"/> that represents the starting X size of the particle</summary>
11408 Empty the Lost and Found folder 11526 <remarks>Minimum value is 0, maximum value is 4</remarks>
11409 </summary>
11410 </member> 11527 </member>
11411 <member name="M:OpenMetaverse.InventoryManager.EmptyTrash"> 11528 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartScaleY">
11412 <summary> 11529 <summary>A <see langword="float"/> that represents the starting Y size of the particle</summary>
11413 Empty the Trash folder 11530 <remarks>Minimum value is 0, maximum value is 4</remarks>
11414 </summary>
11415 </member> 11531 </member>
11416 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItem(OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,OpenMetaverse.InventoryType,OpenMetaverse.PermissionMask,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11532 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndScaleX">
11417 <summary> 11533 <summary>A <see langword="float"/> that represents the ending X size of the particle</summary>
11418 </summary> 11534 <remarks>Minimum value is 0, maximum value is 4</remarks>
11419 <param name="parentFolder">
11420 </param>
11421 <param name="name">
11422 </param>
11423 <param name="description">
11424 </param>
11425 <param name="type">
11426 </param>
11427 <param name="assetTransactionID">Proper use is to upload the inventory's asset first, then provide the Asset's TransactionID here.</param>
11428 <param name="invType">
11429 </param>
11430 <param name="nextOwnerMask">
11431 </param>
11432 <param name="callback">
11433 </param>
11434 </member> 11535 </member>
11435 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItem(OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,OpenMetaverse.InventoryType,OpenMetaverse.WearableType,OpenMetaverse.PermissionMask,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11536 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndScaleY">
11436 <summary> 11537 <summary>A <see langword="float"/> that represents the ending Y size of the particle</summary>
11437 </summary> 11538 <remarks>Minimum value is 0, maximum value is 4</remarks>
11438 <param name="parentFolder">
11439 </param>
11440 <param name="name">
11441 </param>
11442 <param name="description">
11443 </param>
11444 <param name="type">
11445 </param>
11446 <param name="assetTransactionID">Proper use is to upload the inventory's asset first, then provide the Asset's TransactionID here.</param>
11447 <param name="invType">
11448 </param>
11449 <param name="wearableType">
11450 </param>
11451 <param name="nextOwnerMask">
11452 </param>
11453 <param name="callback">
11454 </param>
11455 </member> 11539 </member>
11456 <member name="M:OpenMetaverse.InventoryManager.CreateFolder(OpenMetaverse.UUID,System.String)"> 11540 <member name="M:OpenMetaverse.Primitive.ParticleSystem.#ctor(System.Byte[],System.Int32)">
11457 <summary> 11541 <summary>
11458 Creates a new inventory folder 11542 Decodes a byte[] array into a ParticleSystem Object
11459 </summary> 11543 </summary>
11460 <param name="parentID">ID of the folder to put this folder in</param> 11544 <param name="data">ParticleSystem object</param>
11461 <param name="name">Name of the folder to create</param> 11545 <param name="pos">Start position for BitPacker</param>
11462 <returns>The UUID of the newly created folder</returns>
11463 </member> 11546 </member>
11464 <member name="M:OpenMetaverse.InventoryManager.CreateFolder(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType)"> 11547 <member name="M:OpenMetaverse.Primitive.ParticleSystem.GetBytes">
11465 <summary> 11548 <summary>
11466 Creates a new inventory folder 11549 Generate byte[] array from particle data
11467 </summary> 11550 </summary>
11468 <param name="parentID">ID of the folder to put this folder in</param> 11551 <returns>Byte array</returns>
11469 <param name="name">Name of the folder to create</param>
11470 <param name="preferredType">Sets this folder as the default folder
11471 for new assets of the specified type. Use <code>AssetType.Unknown</code>
11472 to create a normal folder, otherwise it will likely create a
11473 duplicate of an existing folder type</param>
11474 <returns>The UUID of the newly created folder</returns>
11475 <remarks>If you specify a preferred type of <code>AsseType.Folder</code>
11476 it will create a new root folder which may likely cause all sorts
11477 of strange problems</remarks>
11478 </member> 11552 </member>
11479 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItemFromAsset(System.Byte[],System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback)"> 11553 <member name="T:OpenMetaverse.Primitive.ParticleSystem.SourcePattern">
11480 <summary> 11554 <summary>
11481 Create an inventory item and upload asset data 11555 Particle source pattern
11482 </summary> 11556 </summary>
11483 <param name="data">Asset data</param>
11484 <param name="name">Inventory item name</param>
11485 <param name="description">Inventory item description</param>
11486 <param name="assetType">Asset type</param>
11487 <param name="invType">Inventory type</param>
11488 <param name="folderID">Put newly created inventory in this folder</param>
11489 <param name="callback">Delegate that will receive feedback on success or failure</param>
11490 </member> 11557 </member>
11491 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItemFromAsset(System.Byte[],System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.Permissions,OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback)"> 11558 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.None">
11492 <summary> 11559 <summary>None</summary>
11493 Create an inventory item and upload asset data
11494 </summary>
11495 <param name="data">Asset data</param>
11496 <param name="name">Inventory item name</param>
11497 <param name="description">Inventory item description</param>
11498 <param name="assetType">Asset type</param>
11499 <param name="invType">Inventory type</param>
11500 <param name="folderID">Put newly created inventory in this folder</param>
11501 <param name="permissions">Permission of the newly created item
11502 (EveryoneMask, GroupMask, and NextOwnerMask of Permissions struct are supported)</param>
11503 <param name="callback">Delegate that will receive feedback on success or failure</param>
11504 </member> 11560 </member>
11505 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryBase,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11561 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Drop">
11506 <summary> 11562 <summary>Drop particles from source position with no force</summary>
11507 Creates inventory link to another inventory item or folder
11508 </summary>
11509 <param name="folderID">Put newly created link in folder with this UUID</param>
11510 <param name="bse">Inventory item or folder</param>
11511 <param name="callback">Method to call upon creation of the link</param>
11512 </member> 11563 </member>
11513 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryItem,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11564 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Explode">
11514 <summary> 11565 <summary>"Explode" particles in all directions</summary>
11515 Creates inventory link to another inventory item
11516 </summary>
11517 <param name="folderID">Put newly created link in folder with this UUID</param>
11518 <param name="item">Original inventory item</param>
11519 <param name="callback">Method to call upon creation of the link</param>
11520 </member> 11566 </member>
11521 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryFolder,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11567 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Angle">
11522 <summary> 11568 <summary>Particles shoot across a 2D area</summary>
11523 Creates inventory link to another inventory folder
11524 </summary>
11525 <param name="folderID">Put newly created link in folder with this UUID</param>
11526 <param name="folder">Original inventory folder</param>
11527 <param name="callback">Method to call upon creation of the link</param>
11528 </member> 11569 </member>
11529 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCreatedCallback)"> 11570 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.AngleCone">
11530 <summary> 11571 <summary>Particles shoot across a 3D Cone</summary>
11531 Creates inventory link to another inventory item or folder
11532 </summary>
11533 <param name="folderID">Put newly created link in folder with this UUID</param>
11534 <param name="itemID">Original item's UUID</param>
11535 <param name="name">Name</param>
11536 <param name="description">Description</param>
11537 <param name="assetType">Asset Type</param>
11538 <param name="invType">Inventory Type</param>
11539 <param name="transactionID">Transaction UUID</param>
11540 <param name="callback">Method to call upon creation of the link</param>
11541 </member> 11572 </member>
11542 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.InventoryManager.ItemCopiedCallback)"> 11573 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.AngleConeEmpty">
11543 <summary> 11574 <summary>Inverse of AngleCone (shoot particles everywhere except the 3D cone defined</summary>
11544 </summary>
11545 <param name="item">
11546 </param>
11547 <param name="newParent">
11548 </param>
11549 <param name="newName">
11550 </param>
11551 <param name="callback">
11552 </param>
11553 </member> 11575 </member>
11554 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)"> 11576 <member name="T:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags">
11555 <summary> 11577 <summary>
11578 Particle Data Flags
11556 </summary> 11579 </summary>
11557 <param name="item">
11558 </param>
11559 <param name="newParent">
11560 </param>
11561 <param name="newName">
11562 </param>
11563 <param name="oldOwnerID">
11564 </param>
11565 <param name="callback">
11566 </param>
11567 </member> 11580 </member>
11568 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItems(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{System.String},OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)"> 11581 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.None">
11569 <summary> 11582 <summary>None</summary>
11570 </summary>
11571 <param name="items">
11572 </param>
11573 <param name="targetFolders">
11574 </param>
11575 <param name="newNames">
11576 </param>
11577 <param name="oldOwnerID">
11578 </param>
11579 <param name="callback">
11580 </param>
11581 </member> 11583 </member>
11582 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItemFromNotecard(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)"> 11584 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.InterpColor">
11583 <summary> 11585 <summary>Interpolate color and alpha from start to end</summary>
11584 Request a copy of an asset embedded within a notecard
11585 </summary>
11586 <param name="objectID">Usually UUID.Zero for copying an asset from a notecard</param>
11587 <param name="notecardID">UUID of the notecard to request an asset from</param>
11588 <param name="folderID">Target folder for asset to go to in your inventory</param>
11589 <param name="itemID">UUID of the embedded asset</param>
11590 <param name="callback">callback to run when item is copied to inventory</param>
11591 </member> 11586 </member>
11592 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItem(OpenMetaverse.InventoryItem)"> 11587 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.InterpScale">
11593 <summary> 11588 <summary>Interpolate scale from start to end</summary>
11594 </summary>
11595 <param name="item">
11596 </param>
11597 </member> 11589 </member>
11598 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{OpenMetaverse.InventoryItem})"> 11590 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Bounce">
11599 <summary> 11591 <summary>Bounce particles off particle sources Z height</summary>
11600 </summary>
11601 <param name="items">
11602 </param>
11603 </member> 11592 </member>
11604 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{OpenMetaverse.InventoryItem},OpenMetaverse.UUID)"> 11593 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Wind">
11605 <summary> 11594 <summary>velocity of particles is dampened toward the simulators wind</summary>
11606 </summary>
11607 <param name="items">
11608 </param>
11609 <param name="transactionID">
11610 </param>
11611 </member> 11595 </member>
11612 <member name="M:OpenMetaverse.InventoryManager.RequestUploadNotecardAsset(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)"> 11596 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.FollowSrc">
11613 <summary> 11597 <summary>Particles follow the source</summary>
11614 </summary>
11615 <param name="data">
11616 </param>
11617 <param name="notecardID">
11618 </param>
11619 <param name="callback">
11620 </param>
11621 </member> 11598 </member>
11622 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateNotecardTask(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)"> 11599 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.FollowVelocity">
11623 <summary> 11600 <summary>Particles point towards the direction of source's velocity</summary>
11624 Save changes to notecard embedded in object contents
11625 </summary>
11626 <param name="data">Encoded notecard asset data</param>
11627 <param name="notecardID">Notecard UUID</param>
11628 <param name="taskID">Object's UUID</param>
11629 <param name="callback">Called upon finish of the upload with status information</param>
11630 </member> 11601 </member>
11631 <member name="M:OpenMetaverse.InventoryManager.RequestUploadGestureAsset(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)"> 11602 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.TargetPos">
11632 <summary> 11603 <summary>Target of the particles</summary>
11633 Upload new gesture asset for an inventory gesture item
11634 </summary>
11635 <param name="data">Encoded gesture asset</param>
11636 <param name="gestureID">Gesture inventory UUID</param>
11637 <param name="callback">Callback whick will be called when upload is complete</param>
11638 </member> 11604 </member>
11639 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateScriptAgentInventory(System.Byte[],OpenMetaverse.UUID,System.Boolean,OpenMetaverse.InventoryManager.ScriptUpdatedCallback)"> 11605 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.TargetLinear">
11640 <summary> 11606 <summary>Particles are sent in a straight line</summary>
11641 Update an existing script in an agents Inventory
11642 </summary>
11643 <param name="data">A byte[] array containing the encoded scripts contents</param>
11644 <param name="itemID">the itemID of the script</param>
11645 <param name="mono">if true, sets the script content to run on the mono interpreter</param>
11646 <param name="callback">
11647 </param>
11648 </member> 11607 </member>
11649 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateScriptTask(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventoryManager.ScriptUpdatedCallback)"> 11608 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Emissive">
11650 <summary> 11609 <summary>Particles emit a glow</summary>
11651 Update an existing script in an task Inventory
11652 </summary>
11653 <param name="data">A byte[] array containing the encoded scripts contents</param>
11654 <param name="itemID">the itemID of the script</param>
11655 <param name="taskID">UUID of the prim containting the script</param>
11656 <param name="mono">if true, sets the script content to run on the mono interpreter</param>
11657 <param name="running">if true, sets the script to running</param>
11658 <param name="callback">
11659 </param>
11660 </member> 11610 </member>
11661 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem)"> 11611 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Beam">
11662 <summary> 11612 <summary>used for point/grab/touch</summary>
11663 Rez an object from inventory
11664 </summary>
11665 <param name="simulator">Simulator to place object in</param>
11666 <param name="rotation">Rotation of the object when rezzed</param>
11667 <param name="position">Vector of where to place object</param>
11668 <param name="item">InventoryItem object containing item details</param>
11669 </member> 11613 </member>
11670 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem,OpenMetaverse.UUID)"> 11614 <member name="T:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags">
11671 <summary> 11615 <summary>
11672 Rez an object from inventory 11616 Particle Flags Enum
11673 </summary> 11617 </summary>
11674 <param name="simulator">Simulator to place object in</param>
11675 <param name="rotation">Rotation of the object when rezzed</param>
11676 <param name="position">Vector of where to place object</param>
11677 <param name="item">InventoryItem object containing item details</param>
11678 <param name="groupOwner">UUID of group to own the object</param>
11679 </member> 11618 </member>
11680 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)"> 11619 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.None">
11681 <summary> 11620 <summary>None</summary>
11682 Rez an object from inventory
11683 </summary>
11684 <param name="simulator">Simulator to place object in</param>
11685 <param name="rotation">Rotation of the object when rezzed</param>
11686 <param name="position">Vector of where to place object</param>
11687 <param name="item">InventoryItem object containing item details</param>
11688 <param name="groupOwner">UUID of group to own the object</param>
11689 <param name="queryID">User defined queryID to correlate replies</param>
11690 <param name="rezSelected">If set to true, the CreateSelected flag
11691 will be set on the rezzed object</param>
11692 </member> 11621 </member>
11693 <member name="M:OpenMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32)"> 11622 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.ObjectRelative">
11694 <summary> 11623 <summary>Acceleration and velocity for particles are
11695 DeRez an object from the simulator to the agents Objects folder in the agents Inventory 11624 relative to the object rotation</summary>
11696 </summary>
11697 <param name="objectLocalID">The simulator Local ID of the object</param>
11698 <remarks>If objectLocalID is a child primitive in a linkset, the entire linkset will be derezzed</remarks>
11699 </member> 11625 </member>
11700 <member name="M:OpenMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32,OpenMetaverse.DeRezDestination,OpenMetaverse.UUID,OpenMetaverse.UUID)"> 11626 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.UseNewAngle">
11701 <summary> 11627 <summary>Particles use new 'correct' angle parameters</summary>
11702 DeRez an object from the simulator and return to inventory
11703 </summary>
11704 <param name="objectLocalID">The simulator Local ID of the object</param>
11705 <param name="destType">The type of destination from the <seealso cref="T:OpenMetaverse.DeRezDestination" /> enum</param>
11706 <param name="destFolder">The destination inventory folders <seealso cref="T:OpenMetaverse.UUID" /> -or-
11707 if DeRezzing object to a tasks Inventory, the Tasks <seealso cref="T:OpenMetaverse.UUID" /></param>
11708 <param name="transactionID">The transaction ID for this request which
11709 can be used to correlate this request with other packets</param>
11710 <remarks>If objectLocalID is a child primitive in a linkset, the entire linkset will be derezzed</remarks>
11711 </member> 11628 </member>
11712 <member name="M:OpenMetaverse.InventoryManager.RequestRestoreRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.InventoryItem,OpenMetaverse.UUID)"> 11629 <member name="M:OpenMetaverse.Messages.MessageUtils.DecodeEvent(System.String,OpenMetaverse.StructuredData.OSDMap)">
11713 <summary> 11630 <summary>
11714 Rez an item from inventory to its previous simulator location 11631 Return a decoded capabilities message as a strongly typed object
11715 </summary> 11632 </summary>
11716 <param name="simulator"> 11633 <param name="eventName">A string containing the name of the capabilities message key</param>
11717 </param> 11634 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> to decode</param>
11718 <param name="item"> 11635 <returns>A strongly typed object containing the decoded information from the capabilities message, or null
11719 </param> 11636 if no existing Message object exists for the specified event</returns>
11720 <param name="queryID">
11721 </param>
11722 <returns>
11723 </returns>
11724 </member> 11637 </member>
11725 <member name="M:OpenMetaverse.InventoryManager.GiveItem(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,System.Boolean)"> 11638 <member name="T:OpenMetaverse.Imaging.OpenJPEG">
11726 <summary> 11639 <summary>
11727 Give an inventory item to another avatar 11640 A Wrapper around openjpeg to encode and decode images to and from byte arrays
11728 </summary> 11641 </summary>
11729 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID" /> of the item to give</param>
11730 <param name="itemName">The name of the item</param>
11731 <param name="assetType">The type of the item from the <seealso cref="T:OpenMetaverse.AssetType" /> enum</param>
11732 <param name="recipient">The <seealso cref="T:OpenMetaverse.UUID" /> of the recipient</param>
11733 <param name="doEffect">true to generate a beameffect during transfer</param>
11734 </member> 11642 </member>
11735 <member name="M:OpenMetaverse.InventoryManager.GiveFolder(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,System.Boolean)"> 11643 <member name="F:OpenMetaverse.Imaging.OpenJPEG.TGA_HEADER_SIZE">
11736 <summary> 11644 <summary>TGA Header size</summary>
11737 Give an inventory Folder with contents to another avatar
11738 </summary>
11739 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID" /> of the Folder to give</param>
11740 <param name="folderName">The name of the folder</param>
11741 <param name="assetType">The type of the item from the <seealso cref="T:OpenMetaverse.AssetType" /> enum</param>
11742 <param name="recipient">The <seealso cref="T:OpenMetaverse.UUID" /> of the recipient</param>
11743 <param name="doEffect">true to generate a beameffect during transfer</param>
11744 </member> 11645 </member>
11745 <member name="M:OpenMetaverse.InventoryManager.UpdateTaskInventory(System.UInt32,OpenMetaverse.InventoryItem)"> 11646 <member name="F:OpenMetaverse.Imaging.OpenJPEG.OpenJPEGLock">
11746 <summary> 11647 <summary>OpenJPEG is not threadsafe, so this object is used to lock
11747 Copy or move an <see cref="T:OpenMetaverse.InventoryItem" /> from agent inventory to a task (primitive) inventory 11648 during calls into unmanaged code</summary>
11748 </summary>
11749 <param name="objectLocalID">The target object</param>
11750 <param name="item">The item to copy or move from inventory</param>
11751 <returns>
11752 </returns>
11753 <remarks>For items with copy permissions a copy of the item is placed in the tasks inventory,
11754 for no-copy items the object is moved to the tasks inventory</remarks>
11755 </member> 11649 </member>
11756 <member name="M:OpenMetaverse.InventoryManager.GetTaskInventory(OpenMetaverse.UUID,System.UInt32,System.Int32)"> 11650 <member name="M:OpenMetaverse.Imaging.OpenJPEG.Encode(OpenMetaverse.Imaging.ManagedImage,System.Boolean)">
11757 <summary> 11651 <summary>
11758 Retrieve a listing of the items contained in a task (Primitive) 11652 Encode a <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object into a byte array
11759 </summary> 11653 </summary>
11760 <param name="objectID">The tasks <seealso cref="T:OpenMetaverse.UUID" /></param> 11654 <param name="image">The <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object to encode</param>
11761 <param name="objectLocalID">The tasks simulator local ID</param> 11655 <param name="lossless">true to enable lossless conversion, only useful for small images ie: sculptmaps</param>
11762 <param name="timeoutMS">milliseconds to wait for reply from simulator</param> 11656 <returns>A byte array containing the encoded Image object</returns>
11763 <returns>A list containing the inventory items inside the task or null
11764 if a timeout occurs</returns>
11765 <remarks>This request blocks until the response from the simulator arrives
11766 or timeoutMS is exceeded</remarks>
11767 </member> 11657 </member>
11768 <member name="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32)"> 11658 <member name="M:OpenMetaverse.Imaging.OpenJPEG.Encode(OpenMetaverse.Imaging.ManagedImage)">
11769 <summary> 11659 <summary>
11770 Request the contents of a tasks (primitives) inventory from the 11660 Encode a <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object into a byte array
11771 current simulator
11772 </summary> 11661 </summary>
11773 <param name="objectLocalID">The LocalID of the object</param> 11662 <param name="image">The <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object to encode</param>
11774 <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply" /> 11663 <returns>a byte array of the encoded image</returns>
11775 </member> 11664 </member>
11776 <member name="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32,OpenMetaverse.Simulator)"> 11665 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(System.Byte[],OpenMetaverse.Imaging.ManagedImage@,System.Drawing.Image@)">
11777 <summary> 11666 <summary>
11778 Request the contents of a tasks (primitives) inventory 11667 Decode JPEG2000 data to an <seealso cref="T:System.Drawing.Image"/> and
11668 <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/>
11779 </summary> 11669 </summary>
11780 <param name="objectLocalID">The simulator Local ID of the object</param> 11670 <param name="encoded">JPEG2000 encoded data</param>
11781 <param name="simulator">A reference to the simulator object that contains the object</param> 11671 <param name="managedImage">ManagedImage object to decode to</param>
11782 <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply" /> 11672 <param name="image">Image object to decode to</param>
11673 <returns>True if the decode succeeds, otherwise false</returns>
11783 </member> 11674 </member>
11784 <member name="M:OpenMetaverse.InventoryManager.MoveTaskInventory(System.UInt32,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Simulator)"> 11675 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(System.Byte[],OpenMetaverse.Imaging.ManagedImage@)">
11785 <summary> 11676 <summary>
11786 Move an item from a tasks (Primitive) inventory to the specified folder in the avatars inventory 11677
11787 </summary> 11678 </summary>
11788 <param name="objectLocalID">LocalID of the object in the simulator</param> 11679 <param name="encoded"></param>
11789 <param name="taskItemID">UUID of the task item to move</param> 11680 <param name="managedImage"></param>
11790 <param name="inventoryFolderID">The ID of the destination folder in this agents inventory</param> 11681 <returns></returns>
11791 <param name="simulator">Simulator Object</param>
11792 <remarks>Raises the <see cref="M:OpenMetaverse.InventoryManager.OnTaskItemReceived(OpenMetaverse.TaskItemReceivedEventArgs)" /> event</remarks>
11793 </member> 11682 </member>
11794 <member name="M:OpenMetaverse.InventoryManager.RemoveTaskInventory(System.UInt32,OpenMetaverse.UUID,OpenMetaverse.Simulator)"> 11683 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeLayerBoundaries(System.Byte[],OpenMetaverse.Imaging.OpenJPEG.J2KLayerInfo[]@,System.Int32@)">
11795 <summary> 11684 <summary>
11796 Remove an item from an objects (Prim) Inventory 11685
11797 </summary> 11686 </summary>
11798 <param name="objectLocalID">LocalID of the object in the simulator</param> 11687 <param name="encoded"></param>
11799 <param name="taskItemID">UUID of the task item to remove</param> 11688 <param name="layerInfo"></param>
11800 <param name="simulator">Simulator Object</param> 11689 <param name="components"></param>
11801 <remarks>You can confirm the removal by comparing the tasks inventory serial before and after the 11690 <returns></returns>
11802 request with the <see cref="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32,OpenMetaverse.Simulator)" /> request combined with
11803 the <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply" /> event</remarks>
11804 </member> 11691 </member>
11805 <member name="M:OpenMetaverse.InventoryManager.CopyScriptToTask(System.UInt32,OpenMetaverse.InventoryItem,System.Boolean)"> 11692 <member name="M:OpenMetaverse.Imaging.OpenJPEG.EncodeFromImage(System.Drawing.Bitmap,System.Boolean)">
11806 <summary> 11693 <summary>
11807 Copy an InventoryScript item from the Agents Inventory into a primitives task inventory 11694 Encode a <seealso cref="T:System.Drawing.Bitmap"/> object into a byte array
11808 </summary> 11695 </summary>
11809 <param name="objectLocalID">An unsigned integer representing a primitive being simulated</param> 11696 <param name="bitmap">The source <seealso cref="T:System.Drawing.Bitmap"/> object to encode</param>
11810 <param name="item">An <seealso cref="T:OpenMetaverse.InventoryItem" /> which represents a script object from the agents inventory</param> 11697 <param name="lossless">true to enable lossless decoding</param>
11811 <param name="enableScript">true to set the scripts running state to enabled</param> 11698 <returns>A byte array containing the source Bitmap object</returns>
11812 <returns>A Unique Transaction ID</returns>
11813 <example>
11814 The following example shows the basic steps necessary to copy a script from the agents inventory into a tasks inventory
11815 and assumes the script exists in the agents inventory.
11816 <code>
11817 uint primID = 95899503; // Fake prim ID
11818 UUID scriptID = UUID.Parse("92a7fe8a-e949-dd39-a8d8-1681d8673232"); // Fake Script UUID in Inventory
11819 Client.Inventory.FolderContents(Client.Inventory.FindFolderForType(AssetType.LSLText), Client.Self.AgentID,
11820 false, true, InventorySortOrder.ByName, 10000);
11821 Client.Inventory.RezScript(primID, (InventoryItem)Client.Inventory.Store[scriptID]);
11822 </code></example>
11823 </member> 11699 </member>
11824 <member name="M:OpenMetaverse.InventoryManager.RequestGetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 11700 <member name="T:OpenMetaverse.Imaging.OpenJPEG.J2KLayerInfo">
11825 <summary> 11701 <summary>
11826 Request the running status of a script contained in a task (primitive) inventory 11702 Defines the beginning and ending file positions of a layer in an
11703 LRCP-progression JPEG2000 file
11827 </summary> 11704 </summary>
11828 <param name="objectID">The ID of the primitive containing the script</param>
11829 <param name="scriptID">The ID of the script</param>
11830 <remarks>The <see cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply" /> event can be used to obtain the results of the
11831 request</remarks>
11832 <seealso cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply" />
11833 </member> 11705 </member>
11834 <member name="M:OpenMetaverse.InventoryManager.RequestSetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)"> 11706 <member name="T:OpenMetaverse.Imaging.OpenJPEG.MarshalledImage">
11835 <summary> 11707 <summary>
11836 Send a request to set the running state of a script contained in a task (primitive) inventory 11708 This structure is used to marshal both encoded and decoded images.
11709 MUST MATCH THE STRUCT IN dotnet.h!
11837 </summary> 11710 </summary>
11838 <param name="objectID">The ID of the primitive containing the script</param>
11839 <param name="scriptID">The ID of the script</param>
11840 <param name="running">true to set the script running, false to stop a running script</param>
11841 <remarks>To verify the change you can use the <see cref="M:OpenMetaverse.InventoryManager.RequestGetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID)" /> method combined
11842 with the <see cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply" /> event</remarks>
11843 </member> 11711 </member>
11844 <member name="M:OpenMetaverse.InventoryManager.ItemCRC(OpenMetaverse.InventoryItem)"> 11712 <member name="T:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket">
11845 <summary> 11713 <summary>
11846 Create a CRC from an InventoryItem 11714 Information about a single packet in a JPEG2000 stream
11847 </summary> 11715 </summary>
11848 <param name="iitem">The source InventoryItem</param>
11849 <returns>A uint representing the source InventoryItem as a CRC</returns>
11850 </member> 11716 </member>
11851 <member name="M:OpenMetaverse.InventoryManager.DecryptShadowID(OpenMetaverse.UUID)"> 11717 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.start_pos">
11852 <summary> 11718 <summary>Packet start position</summary>
11853 Reverses a cheesy XORing with a fixed UUID to convert a shadow_id to an asset_id
11854 </summary>
11855 <param name="shadowID">Obfuscated shadow_id value</param>
11856 <returns>Deobfuscated asset_id value</returns>
11857 </member> 11719 </member>
11858 <member name="M:OpenMetaverse.InventoryManager.EncryptAssetID(OpenMetaverse.UUID)"> 11720 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.end_ph_pos">
11859 <summary> 11721 <summary>Packet header end position</summary>
11860 Does a cheesy XORing with a fixed UUID to convert an asset_id to a shadow_id
11861 </summary>
11862 <param name="assetID">asset_id value to obfuscate</param>
11863 <returns>Obfuscated shadow_id value</returns>
11864 </member> 11722 </member>
11865 <member name="M:OpenMetaverse.InventoryManager.CreateInventoryItem(OpenMetaverse.InventoryType,OpenMetaverse.UUID)"> 11723 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.end_pos">
11866 <summary> 11724 <summary>Packet end position</summary>
11867 Wrapper for creating a new <seealso cref="T:OpenMetaverse.InventoryItem" /> object
11868 </summary>
11869 <param name="type">The type of item from the <seealso cref="T:OpenMetaverse.InventoryType" /> enum</param>
11870 <param name="id">The <seealso cref="T:OpenMetaverse.UUID" /> of the newly created object</param>
11871 <returns>An <seealso cref="T:OpenMetaverse.InventoryItem" /> object with the type and id passed</returns>
11872 </member> 11725 </member>
11873 <member name="M:OpenMetaverse.InventoryManager.ParseTaskInventory(System.String)"> 11726 <member name="F:OpenMetaverse.TerrainManager.m_LandPatchReceivedEvent">
11874 <summary> 11727 <summary>The event subscribers. null if no subcribers</summary>
11875 Parse the results of a RequestTaskInventory() response
11876 </summary>
11877 <param name="taskData">A string which contains the data from the task reply</param>
11878 <returns>A List containing the items contained within the tasks inventory</returns>
11879 </member> 11728 </member>
11880 <member name="M:OpenMetaverse.InventoryManager.SaveAssetIntoInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11729 <member name="M:OpenMetaverse.TerrainManager.OnLandPatchReceived(OpenMetaverse.LandPatchReceivedEventArgs)">
11881 <summary>Process an incoming packet and raise the appropriate events</summary> 11730 <summary>Raises the LandPatchReceived event</summary>
11882 <param name="sender">The sender</param> 11731 <param name="e">A LandPatchReceivedEventArgs object containing the
11883 <param name="e">The EventArgs object containing the packet data</param> 11732 data returned from the simulator</param>
11884 </member> 11733 </member>
11885 <member name="M:OpenMetaverse.InventoryManager.InventoryDescendentsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11734 <member name="F:OpenMetaverse.TerrainManager.m_LandPatchReceivedLock">
11886 <summary>Process an incoming packet and raise the appropriate events</summary> 11735 <summary>Thread sync lock object</summary>
11887 <param name="sender">The sender</param>
11888 <param name="e">The EventArgs object containing the packet data</param>
11889 </member> 11736 </member>
11890 <member name="M:OpenMetaverse.InventoryManager.UpdateCreateInventoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11737 <member name="M:OpenMetaverse.TerrainManager.#ctor(OpenMetaverse.GridClient)">
11891 <summary> 11738 <summary>
11892 UpdateCreateInventoryItem packets are received when a new inventory item 11739 Default constructor
11893 is created. This may occur when an object that's rezzed in world is
11894 taken into inventory, when an item is created using the CreateInventoryItem
11895 packet, or when an object is purchased
11896 </summary> 11740 </summary>
11897 <param name="sender">The sender</param> 11741 <param name="client"></param>
11898 <param name="e">The EventArgs object containing the packet data</param>
11899 </member> 11742 </member>
11900 <member name="M:OpenMetaverse.InventoryManager.MoveInventoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11743 <member name="E:OpenMetaverse.TerrainManager.LandPatchReceived">
11901 <summary>Process an incoming packet and raise the appropriate events</summary> 11744 <summary>Raised when the simulator responds sends </summary>
11902 <param name="sender">The sender</param>
11903 <param name="e">The EventArgs object containing the packet data</param>
11904 </member> 11745 </member>
11905 <member name="M:OpenMetaverse.InventoryManager.BulkUpdateInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11746 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.Simulator">
11906 <summary>Process an incoming packet and raise the appropriate events</summary> 11747 <summary>Simulator from that sent tha data</summary>
11907 <param name="sender">The sender</param>
11908 <param name="e">The EventArgs object containing the packet data</param>
11909 </member> 11748 </member>
11910 <member name="M:OpenMetaverse.InventoryManager.FetchInventoryReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11749 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.X">
11911 <summary>Process an incoming packet and raise the appropriate events</summary> 11750 <summary>Sim coordinate of the patch</summary>
11912 <param name="sender">The sender</param>
11913 <param name="e">The EventArgs object containing the packet data</param>
11914 </member> 11751 </member>
11915 <member name="M:OpenMetaverse.InventoryManager.ReplyTaskInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 11752 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.Y">
11916 <summary>Process an incoming packet and raise the appropriate events</summary> 11753 <summary>Sim coordinate of the patch</summary>
11917 <param name="sender">The sender</param>
11918 <param name="e">The EventArgs object containing the packet data</param>
11919 </member> 11754 </member>
11920 <member name="P:OpenMetaverse.InventoryObjectOfferedEventArgs.Accept"> 11755 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.PatchSize">
11921 <summary>Set to true to accept offer, false to decline it</summary> 11756 <summary>Size of tha patch</summary>
11922 </member> 11757 </member>
11923 <member name="P:OpenMetaverse.InventoryObjectOfferedEventArgs.FolderID"> 11758 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.HeightMap">
11924 <summary>The folder to accept the inventory into, if null default folder for <see cref="T:OpenMetaverse.AssetType" /> will be used</summary> 11759 <summary>Heightmap for the patch</summary>
11925 </member> 11760 </member>
11926 <member name="T:OpenMetaverse.TaskItemReceivedEventArgs"> 11761 <member name="T:OpenMetaverse.Caps">
11927 <summary> 11762 <summary>
11928 Callback when an inventory object is accepted and received from a 11763 Capabilities is the name of the bi-directional HTTP REST protocol
11929 task inventory. This is the callback in which you actually get 11764 used to communicate non real-time transactions such as teleporting or
11930 the ItemID, as in ObjectOfferedCallback it is null when received 11765 group messaging
11931 from a task.
11932 </summary> 11766 </summary>
11933 </member> 11767 </member>
11934 <member name="M:OpenMetaverse.InventoryNode.#ctor"> 11768 <member name="F:OpenMetaverse.Caps.Simulator">
11935 <summary> 11769 <summary>Reference to the simulator this system is connected to</summary>
11936 </summary>
11937 </member> 11770 </member>
11938 <member name="M:OpenMetaverse.InventoryNode.#ctor(OpenMetaverse.InventoryBase)"> 11771 <member name="M:OpenMetaverse.Caps.#ctor(OpenMetaverse.Simulator,System.String)">
11939 <summary> 11772 <summary>
11773 Default constructor
11940 </summary> 11774 </summary>
11941 <param name="data"> 11775 <param name="simulator"></param>
11942 </param> 11776 <param name="seedcaps"></param>
11943 </member> 11777 </member>
11944 <member name="M:OpenMetaverse.InventoryNode.#ctor(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryNode)"> 11778 <member name="M:OpenMetaverse.Caps.CapabilityURI(System.String)">
11945 <summary> 11779 <summary>
11946 De-serialization constructor for the InventoryNode Class 11780 Request the URI of a named capability
11947 </summary> 11781 </summary>
11782 <param name="capability">Name of the capability to request</param>
11783 <returns>The URI of the requested capability, or String.Empty if
11784 the capability does not exist</returns>
11948 </member> 11785 </member>
11949 <member name="M:OpenMetaverse.InventoryNode.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11786 <member name="M:OpenMetaverse.Caps.EventQueueEventHandler(System.String,OpenMetaverse.StructuredData.OSDMap)">
11950 <summary> 11787 <summary>
11951 De-serialization handler for the InventoryNode Class 11788 Process any incoming events, check to see if we have a message created for the event,
11952 </summary> 11789 </summary>
11790 <param name="eventName"></param>
11791 <param name="body"></param>
11953 </member> 11792 </member>
11954 <member name="P:OpenMetaverse.InventoryNode.Data"> 11793 <member name="P:OpenMetaverse.Caps.SeedCapsURI">
11955 <summary> 11794 <summary>Capabilities URI this system was initialized with</summary>
11956 </summary>
11957 </member> 11795 </member>
11958 <member name="P:OpenMetaverse.InventoryNode.Parent"> 11796 <member name="P:OpenMetaverse.Caps.IsEventQueueRunning">
11959 <summary> 11797 <summary>Whether the capabilities event queue is connected and
11960 </summary> 11798 listening for incoming events</summary>
11961 </member> 11799 </member>
11962 <member name="P:OpenMetaverse.InventoryNode.ParentID"> 11800 <member name="T:OpenMetaverse.Caps.EventQueueCallback">
11963 <summary> 11801 <summary>
11802 Triggered when an event is received via the EventQueueGet
11803 capability
11964 </summary> 11804 </summary>
11805 <param name="capsKey">Event name</param>
11806 <param name="message">Decoded event data</param>
11807 <param name="simulator">The simulator that generated the event</param>
11965 </member> 11808 </member>
11966 <member name="P:OpenMetaverse.InventoryNode.Nodes"> 11809 <member name="T:OpenMetaverse.StatusCode">
11967 <summary> 11810 <summary>
11811
11968 </summary> 11812 </summary>
11969 </member> 11813 </member>
11970 <member name="P:OpenMetaverse.InventoryNode.NeedsUpdate"> 11814 <member name="F:OpenMetaverse.StatusCode.OK">
11971 <summary> 11815 <summary>OK</summary>
11972 For inventory folder nodes specifies weather the folder needs to be
11973 refreshed from the server
11974 </summary>
11975 </member> 11816 </member>
11976 <member name="M:OpenMetaverse.InventoryNode.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> 11817 <member name="F:OpenMetaverse.StatusCode.Done">
11977 <summary> 11818 <summary>Transfer completed</summary>
11978 Serialization handler for the InventoryNode Class
11979 </summary>
11980 </member> 11819 </member>
11981 <member name="M:OpenMetaverse.InventoryNode.ToString"> 11820 <member name="F:OpenMetaverse.StatusCode.Skip">
11982 <summary> 11821 <summary></summary>
11983 </summary>
11984 <returns>
11985 </returns>
11986 </member> 11822 </member>
11987 <member name="T:OpenMetaverse.Logger"> 11823 <member name="F:OpenMetaverse.StatusCode.Abort">
11988 <summary> 11824 <summary></summary>
11989 Singleton logging class for the entire library
11990 </summary>
11991 </member> 11825 </member>
11992 <member name="M:OpenMetaverse.Logger.#ctor"> 11826 <member name="F:OpenMetaverse.StatusCode.Error">
11993 <summary> 11827 <summary>Unknown error occurred</summary>
11994 Default constructor
11995 </summary>
11996 </member> 11828 </member>
11997 <member name="T:OpenMetaverse.Logger.LogCallback"> 11829 <member name="F:OpenMetaverse.StatusCode.UnknownSource">
11998 <summary> 11830 <summary>Equivalent to a 404 error</summary>
11999 Callback used for client apps to receive log messages from
12000 the library
12001 </summary>
12002 <param name="message">Data being logged</param>
12003 <param name="level">The severity of the log entry from <seealso cref="T:OpenMetaverse.Helpers.LogLevel" /></param>
12004 </member> 11831 </member>
12005 <member name="F:OpenMetaverse.Logger.LogInstance"> 11832 <member name="F:OpenMetaverse.StatusCode.InsufficientPermissions">
12006 <summary>log4net logging engine</summary> 11833 <summary>Client does not have permission for that resource</summary>
12007 </member> 11834 </member>
12008 <member name="E:OpenMetaverse.Logger.OnLogMessage"> 11835 <member name="F:OpenMetaverse.StatusCode.Unknown">
12009 <summary>Triggered whenever a message is logged. If this is left 11836 <summary>Unknown status</summary>
12010 null, log messages will go to the console</summary>
12011 </member> 11837 </member>
12012 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel)"> 11838 <member name="T:OpenMetaverse.ChannelType">
12013 <summary> 11839 <summary>
12014 Send a log message to the logging engine 11840
12015 </summary> 11841 </summary>
12016 <param name="message">The log message</param>
12017 <param name="level">The severity of the log entry</param>
12018 </member> 11842 </member>
12019 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,OpenMetaverse.GridClient)"> 11843 <member name="F:OpenMetaverse.ChannelType.Unknown">
12020 <summary> 11844 <summary></summary>
12021 Send a log message to the logging engine
12022 </summary>
12023 <param name="message">The log message</param>
12024 <param name="level">The severity of the log entry</param>
12025 <param name="client">Instance of the client</param>
12026 </member> 11845 </member>
12027 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,System.Exception)"> 11846 <member name="F:OpenMetaverse.ChannelType.Misc">
12028 <summary> 11847 <summary>Unknown</summary>
12029 Send a log message to the logging engine
12030 </summary>
12031 <param name="message">The log message</param>
12032 <param name="level">The severity of the log entry</param>
12033 <param name="exception">Exception that was raised</param>
12034 </member> 11848 </member>
12035 <member name="M:OpenMetaverse.Logger.Log(System.Object,OpenMetaverse.Helpers.LogLevel,OpenMetaverse.GridClient,System.Exception)"> 11849 <member name="F:OpenMetaverse.ChannelType.Asset">
12036 <summary> 11850 <summary>Virtually all asset transfers use this channel</summary>
12037 Send a log message to the logging engine
12038 </summary>
12039 <param name="message">The log message</param>
12040 <param name="level">The severity of the log entry</param>
12041 <param name="client">Instance of the client</param>
12042 <param name="exception">Exception that was raised</param>
12043 </member> 11851 </member>
12044 <member name="M:OpenMetaverse.Logger.DebugLog(System.Object)"> 11852 <member name="T:OpenMetaverse.SourceType">
12045 <summary> 11853 <summary>
12046 If the library is compiled with DEBUG defined, an event will be 11854
12047 fired if an <code>OnLogMessage</code> handler is registered and the
12048 message will be sent to the logging engine
12049 </summary> 11855 </summary>
12050 <param name="message">The message to log at the DEBUG level to the
12051 current logging engine</param>
12052 </member> 11856 </member>
12053 <member name="M:OpenMetaverse.Logger.DebugLog(System.Object,OpenMetaverse.GridClient)"> 11857 <member name="F:OpenMetaverse.SourceType.Unknown">
12054 <summary> 11858 <summary></summary>
12055 If the library is compiled with DEBUG defined and
12056 <code>GridClient.Settings.DEBUG</code> is true, an event will be
12057 fired if an <code>OnLogMessage</code> handler is registered and the
12058 message will be sent to the logging engine
12059 </summary>
12060 <param name="message">The message to log at the DEBUG level to the
12061 current logging engine</param>
12062 <param name="client">Instance of the client</param>
12063 </member> 11859 </member>
12064 <member name="T:OpenMetaverse.LoginStatus"> 11860 <member name="F:OpenMetaverse.SourceType.Asset">
12065 <summary> 11861 <summary>Asset from the asset server</summary>
12066 </summary>
12067 </member> 11862 </member>
12068 <member name="F:OpenMetaverse.LoginStatus.Failed"> 11863 <member name="F:OpenMetaverse.SourceType.SimInventoryItem">
12069 <summary> 11864 <summary>Inventory item</summary>
12070 </summary>
12071 </member> 11865 </member>
12072 <member name="F:OpenMetaverse.LoginStatus.None"> 11866 <member name="F:OpenMetaverse.SourceType.SimEstate">
12073 <summary> 11867 <summary>Estate asset, such as an estate covenant</summary>
12074 </summary>
12075 </member> 11868 </member>
12076 <member name="F:OpenMetaverse.LoginStatus.ConnectingToLogin"> 11869 <member name="T:OpenMetaverse.TargetType">
12077 <summary> 11870 <summary>
11871
12078 </summary> 11872 </summary>
12079 </member> 11873 </member>
12080 <member name="F:OpenMetaverse.LoginStatus.ReadingResponse"> 11874 <member name="F:OpenMetaverse.TargetType.Unknown">
12081 <summary> 11875 <summary></summary>
12082 </summary>
12083 </member> 11876 </member>
12084 <member name="F:OpenMetaverse.LoginStatus.ConnectingToSim"> 11877 <member name="F:OpenMetaverse.TargetType.File">
12085 <summary> 11878 <summary></summary>
12086 </summary>
12087 </member> 11879 </member>
12088 <member name="F:OpenMetaverse.LoginStatus.Redirecting"> 11880 <member name="F:OpenMetaverse.TargetType.VFile">
12089 <summary> 11881 <summary></summary>
12090 </summary>
12091 </member> 11882 </member>
12092 <member name="F:OpenMetaverse.LoginStatus.Success"> 11883 <member name="T:OpenMetaverse.ImageType">
12093 <summary> 11884 <summary>
11885 When requesting image download, type of the image requested
12094 </summary> 11886 </summary>
12095 </member> 11887 </member>
12096 <member name="T:OpenMetaverse.LoginParams"> 11888 <member name="F:OpenMetaverse.ImageType.Normal">
12097 <summary> 11889 <summary>Normal in-world object texture</summary>
12098 Login Request Parameters
12099 </summary>
12100 </member> 11890 </member>
12101 <member name="M:OpenMetaverse.LoginParams.#ctor"> 11891 <member name="F:OpenMetaverse.ImageType.Baked">
12102 <summary> 11892 <summary>Avatar texture</summary>
12103 Default constuctor, initializes sane default values
12104 </summary>
12105 </member> 11893 </member>
12106 <member name="M:OpenMetaverse.LoginParams.#ctor(OpenMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String)"> 11894 <member name="F:OpenMetaverse.ImageType.ServerBaked">
12107 <summary> 11895 <summary>Server baked avatar texture</summary>
12108 Instantiates new LoginParams object and fills in the values
12109 </summary>
12110 <param name="client">Instance of GridClient to read settings from</param>
12111 <param name="firstName">Login first name</param>
12112 <param name="lastName">Login last name</param>
12113 <param name="password">Password</param>
12114 <param name="channel">Login channnel (application name)</param>
12115 <param name="version">Client version, should be application name + version number</param>
12116 </member> 11896 </member>
12117 <member name="M:OpenMetaverse.LoginParams.#ctor(OpenMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String,System.String)"> 11897 <member name="T:OpenMetaverse.ImageCodec">
12118 <summary> 11898 <summary>
12119 Instantiates new LoginParams object and fills in the values 11899 Image file format
12120 </summary> 11900 </summary>
12121 <param name="client">Instance of GridClient to read settings from</param>
12122 <param name="firstName">Login first name</param>
12123 <param name="lastName">Login last name</param>
12124 <param name="password">Password</param>
12125 <param name="channel">Login channnel (application name)</param>
12126 <param name="version">Client version, should be application name + version number</param>
12127 <param name="loginURI">URI of the login server</param>
12128 </member>
12129 <member name="F:OpenMetaverse.LoginParams.URI">
12130 <summary>The URL of the Login Server</summary>
12131 </member>
12132 <member name="F:OpenMetaverse.LoginParams.Timeout">
12133 <summary>The number of milliseconds to wait before a login is considered
12134 failed due to timeout</summary>
12135 </member>
12136 <member name="F:OpenMetaverse.LoginParams.MethodName">
12137 <summary>The request method</summary>
12138 <remarks>login_to_simulator is currently the only supported method</remarks>
12139 </member>
12140 <member name="F:OpenMetaverse.LoginParams.FirstName">
12141 <summary>The Agents First name</summary>
12142 </member>
12143 <member name="F:OpenMetaverse.LoginParams.LastName">
12144 <summary>The Agents Last name</summary>
12145 </member>
12146 <member name="F:OpenMetaverse.LoginParams.Password">
12147 <summary>A md5 hashed password</summary>
12148 <remarks>plaintext password will be automatically hashed</remarks>
12149 </member>
12150 <member name="F:OpenMetaverse.LoginParams.Start">
12151 <summary>The agents starting location once logged in</summary>
12152 <remarks>Either "last", "home", or a string encoded URI
12153 containing the simulator name and x/y/z coordinates e.g: uri:hooper&amp;128&amp;152&amp;17</remarks>
12154 </member> 11901 </member>
12155 <member name="F:OpenMetaverse.LoginParams.Channel"> 11902 <member name="T:OpenMetaverse.Transfer">
12156 <summary>A string containing the client software channel information</summary>
12157 <example>Second Life Release</example>
12158 </member>
12159 <member name="F:OpenMetaverse.LoginParams.Version">
12160 <summary>The client software version information</summary>
12161 <remarks>The official viewer uses: Second Life Release n.n.n.n
12162 where n is replaced with the current version of the viewer</remarks>
12163 </member>
12164 <member name="F:OpenMetaverse.LoginParams.Platform">
12165 <summary>A string containing the platform information the agent is running on</summary>
12166 </member>
12167 <member name="F:OpenMetaverse.LoginParams.MAC">
12168 <summary>A string hash of the network cards Mac Address</summary>
12169 </member>
12170 <member name="F:OpenMetaverse.LoginParams.ViewerDigest">
12171 <summary>Unknown or deprecated</summary>
12172 </member>
12173 <member name="F:OpenMetaverse.LoginParams.ID0">
12174 <summary>A string hash of the first disk drives ID used to identify this clients uniqueness</summary>
12175 </member>
12176 <member name="F:OpenMetaverse.LoginParams.UserAgent">
12177 <summary>A string containing the viewers Software, this is not directly sent to the login server but
12178 instead is used to generate the Version string</summary>
12179 </member>
12180 <member name="F:OpenMetaverse.LoginParams.Author">
12181 <summary>A string representing the software creator. This is not directly sent to the login server but
12182 is used by the library to generate the Version information</summary>
12183 </member>
12184 <member name="F:OpenMetaverse.LoginParams.AgreeToTos">
12185 <summary>If true, this agent agrees to the Terms of Service of the grid its connecting to</summary>
12186 </member>
12187 <member name="F:OpenMetaverse.LoginParams.ReadCritical">
12188 <summary>Unknown</summary>
12189 </member>
12190 <member name="F:OpenMetaverse.LoginParams.Options">
12191 <summary>An array of string sent to the login server to enable various options</summary>
12192 </member>
12193 <member name="F:OpenMetaverse.LoginParams.LoginID">
12194 <summary>A randomly generated ID to distinguish between login attempts. This value is only used
12195 internally in the library and is never sent over the wire</summary>
12196 </member>
12197 <member name="T:OpenMetaverse.LoginResponseData">
12198 <summary> 11903 <summary>
12199 The decoded data returned from the login server after a successful login 11904
12200 </summary> 11905 </summary>
12201 </member> 11906 </member>
12202 <member name="F:OpenMetaverse.LoginResponseData.Login"> 11907 <member name="P:OpenMetaverse.Transfer.TimeSinceLastPacket">
12203 <summary>true, false, indeterminate</summary> 11908 <summary>Number of milliseconds passed since the last transfer
12204 </member> 11909 packet was received</summary>
12205 <member name="F:OpenMetaverse.LoginResponseData.Message">
12206 <summary>Login message of the day</summary>
12207 </member>
12208 <member name="F:OpenMetaverse.LoginResponseData.AgentAccess">
12209 <summary>M or PG, also agent_region_access and agent_access_max</summary>
12210 </member> 11910 </member>
12211 <member name="M:OpenMetaverse.LoginResponseData.Parse(OpenMetaverse.StructuredData.OSDMap)"> 11911 <member name="T:OpenMetaverse.AssetDownload">
12212 <summary> 11912 <summary>
12213 Parse LLSD Login Reply Data 11913
12214 </summary> 11914 </summary>
12215 <param name="reply">An <seealso cref="T:OpenMetaverse.StructuredData.OSDMap" />
12216 contaning the login response data</param>
12217 <remarks>XML-RPC logins do not require this as XML-RPC.NET
12218 automatically populates the struct properly using attributes</remarks>
12219 </member> 11915 </member>
12220 <member name="T:OpenMetaverse.NetworkManager"> 11916 <member name="T:OpenMetaverse.XferDownload">
12221 <summary>
12222 Login Routines
12223 </summary>
12224 <summary> 11917 <summary>
12225 NetworkManager is responsible for managing the network layer of 11918
12226 OpenMetaverse. It tracks all the server connections, serializes
12227 outgoing traffic and deserializes incoming traffic, and provides
12228 instances of delegates for network-related events.
12229 </summary> 11919 </summary>
12230 </member> 11920 </member>
12231 <member name="M:OpenMetaverse.NetworkManager.#ctor(OpenMetaverse.GridClient)"> 11921 <member name="T:OpenMetaverse.ImageDownload">
12232 <summary> 11922 <summary>
12233 Default constructor 11923
12234 </summary> 11924 </summary>
12235 <param name="client">Reference to the GridClient object</param>
12236 </member> 11925 </member>
12237 <member name="T:OpenMetaverse.NetworkManager.DisconnectType"> 11926 <member name="T:OpenMetaverse.AssetUpload">
12238 <summary> 11927 <summary>
12239 Explains why a simulator or the grid disconnected from us 11928
12240 </summary> 11929 </summary>
12241 </member> 11930 </member>
12242 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.ClientInitiated"> 11931 <member name="T:OpenMetaverse.ImageRequest">
12243 <summary>The client requested the logout or simulator disconnect</summary>
12244 </member>
12245 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.ServerInitiated">
12246 <summary>The server notified us that it is disconnecting</summary>
12247 </member>
12248 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.NetworkTimeout">
12249 <summary>Either a socket was closed or network traffic timed out</summary>
12250 </member>
12251 <member name="F:OpenMetaverse.NetworkManager.DisconnectType.SimShutdown">
12252 <summary>The last active simulator shut down</summary>
12253 </member>
12254 <member name="T:OpenMetaverse.NetworkManager.IncomingPacket">
12255 <summary> 11932 <summary>
12256 Holds a simulator reference and a decoded packet, these structs are put in 11933
12257 the packet inbox for event handling
12258 </summary> 11934 </summary>
12259 </member> 11935 </member>
12260 <member name="F:OpenMetaverse.NetworkManager.IncomingPacket.Simulator"> 11936 <member name="M:OpenMetaverse.ImageRequest.#ctor(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32)">
12261 <summary>Reference to the simulator that this packet came from</summary>
12262 </member>
12263 <member name="F:OpenMetaverse.NetworkManager.IncomingPacket.Packet">
12264 <summary>Packet that needs to be processed</summary>
12265 </member>
12266 <member name="T:OpenMetaverse.NetworkManager.OutgoingPacket">
12267 <summary> 11937 <summary>
12268 Holds a simulator reference and a serialized packet, these structs are put in 11938
12269 the packet outbox for sending
12270 </summary> 11939 </summary>
11940 <param name="imageid"></param>
11941 <param name="type"></param>
11942 <param name="priority"></param>
11943 <param name="discardLevel"></param>
12271 </member> 11944 </member>
12272 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Simulator"> 11945 <member name="T:OpenMetaverse.AssetManager">
12273 <summary>Reference to the simulator this packet is destined for</summary>
12274 </member>
12275 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Buffer">
12276 <summary>Packet that needs to be sent</summary>
12277 </member>
12278 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.SequenceNumber">
12279 <summary>Sequence number of the wrapped packet</summary>
12280 </member>
12281 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.ResendCount">
12282 <summary>Number of times this packet has been resent</summary>
12283 </member>
12284 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.TickCount">
12285 <summary>Environment.TickCount when this packet was last sent over the wire</summary>
12286 </member>
12287 <member name="F:OpenMetaverse.NetworkManager.OutgoingPacket.Type">
12288 <summary>Type of the packet</summary>
12289 </member>
12290 <member name="T:OpenMetaverse.NetworkManager.LoginResponseCallback">
12291 <summary> 11946 <summary>
11947
12292 </summary> 11948 </summary>
12293 <param name="loginSuccess">
12294 </param>
12295 <param name="redirect">
12296 </param>
12297 <param name="replyData">
12298 </param>
12299 <param name="message">
12300 </param>
12301 <param name="reason">
12302 </param>
12303 </member>
12304 <member name="F:OpenMetaverse.NetworkManager.m_LoginProgress">
12305 <summary>The event subscribers, null of no subscribers</summary>
12306 </member>
12307 <member name="F:OpenMetaverse.NetworkManager.m_LoginProgressLock">
12308 <summary>Thread sync lock object</summary>
12309 </member>
12310 <member name="F:OpenMetaverse.NetworkManager.LoginSeedCapability">
12311 <summary>Seed CAPS URL returned from the login server</summary>
12312 </member>
12313 <member name="F:OpenMetaverse.NetworkManager.MaxAgentGroups">
12314 <summary>Maximum number of groups an agent can belong to, -1 for unlimited</summary>
12315 </member>
12316 <member name="F:OpenMetaverse.NetworkManager.XMPPHost">
12317 <summary>XMPP server to connect to for Group chat and IM services</summary>
12318 </member>
12319 <member name="F:OpenMetaverse.NetworkManager.UDPBlacklist">
12320 <summary>A list of packets obtained during the login process which
12321 networkmanager will log but not process</summary>
12322 </member> 11949 </member>
12323 <member name="F:OpenMetaverse.NetworkManager.m_PacketSent"> 11950 <member name="F:OpenMetaverse.AssetManager.TRANSFER_HEADER_TIMEOUT">
12324 <summary>The event subscribers, null of no subscribers</summary> 11951 <summary>Number of milliseconds to wait for a transfer header packet if out of order data was received</summary>
12325 </member> 11952 </member>
12326 <member name="F:OpenMetaverse.NetworkManager.m_PacketSentLock"> 11953 <member name="F:OpenMetaverse.AssetManager.m_XferReceivedEvent">
12327 <summary>Thread sync lock object</summary> 11954 <summary>The event subscribers. null if no subcribers</summary>
12328 </member> 11955 </member>
12329 <member name="F:OpenMetaverse.NetworkManager.m_LoggedOut"> 11956 <member name="M:OpenMetaverse.AssetManager.OnXferReceived(OpenMetaverse.XferReceivedEventArgs)">
12330 <summary>The event subscribers, null of no subscribers</summary> 11957 <summary>Raises the XferReceived event</summary>
11958 <param name="e">A XferReceivedEventArgs object containing the
11959 data returned from the simulator</param>
12331 </member> 11960 </member>
12332 <member name="F:OpenMetaverse.NetworkManager.m_LoggedOutLock"> 11961 <member name="F:OpenMetaverse.AssetManager.m_XferReceivedLock">
12333 <summary>Thread sync lock object</summary> 11962 <summary>Thread sync lock object</summary>
12334 </member> 11963 </member>
12335 <member name="F:OpenMetaverse.NetworkManager.m_SimConnecting"> 11964 <member name="F:OpenMetaverse.AssetManager.m_AssetUploadedEvent">
12336 <summary>The event subscribers, null of no subscribers</summary> 11965 <summary>The event subscribers. null if no subcribers</summary>
12337 </member>
12338 <member name="F:OpenMetaverse.NetworkManager.m_SimConnectingLock">
12339 <summary>Thread sync lock object</summary>
12340 </member> 11966 </member>
12341 <member name="F:OpenMetaverse.NetworkManager.m_SimConnected"> 11967 <member name="M:OpenMetaverse.AssetManager.OnAssetUploaded(OpenMetaverse.AssetUploadEventArgs)">
12342 <summary>The event subscribers, null of no subscribers</summary> 11968 <summary>Raises the AssetUploaded event</summary>
11969 <param name="e">A AssetUploadedEventArgs object containing the
11970 data returned from the simulator</param>
12343 </member> 11971 </member>
12344 <member name="F:OpenMetaverse.NetworkManager.m_SimConnectedLock"> 11972 <member name="F:OpenMetaverse.AssetManager.m_AssetUploadedLock">
12345 <summary>Thread sync lock object</summary> 11973 <summary>Thread sync lock object</summary>
12346 </member> 11974 </member>
12347 <member name="F:OpenMetaverse.NetworkManager.m_SimDisconnected"> 11975 <member name="F:OpenMetaverse.AssetManager.m_UploadProgressEvent">
12348 <summary>The event subscribers, null of no subscribers</summary> 11976 <summary>The event subscribers. null if no subcribers</summary>
12349 </member>
12350 <member name="F:OpenMetaverse.NetworkManager.m_SimDisconnectedLock">
12351 <summary>Thread sync lock object</summary>
12352 </member> 11977 </member>
12353 <member name="F:OpenMetaverse.NetworkManager.m_Disconnected"> 11978 <member name="M:OpenMetaverse.AssetManager.OnUploadProgress(OpenMetaverse.AssetUploadEventArgs)">
12354 <summary>The event subscribers, null of no subscribers</summary> 11979 <summary>Raises the UploadProgress event</summary>
11980 <param name="e">A UploadProgressEventArgs object containing the
11981 data returned from the simulator</param>
12355 </member> 11982 </member>
12356 <member name="F:OpenMetaverse.NetworkManager.m_DisconnectedLock"> 11983 <member name="F:OpenMetaverse.AssetManager.m_UploadProgressLock">
12357 <summary>Thread sync lock object</summary> 11984 <summary>Thread sync lock object</summary>
12358 </member> 11985 </member>
12359 <member name="F:OpenMetaverse.NetworkManager.m_SimChanged"> 11986 <member name="F:OpenMetaverse.AssetManager.m_InitiateDownloadEvent">
12360 <summary>The event subscribers, null of no subscribers</summary> 11987 <summary>The event subscribers. null if no subcribers</summary>
12361 </member>
12362 <member name="F:OpenMetaverse.NetworkManager.m_SimChangedLock">
12363 <summary>Thread sync lock object</summary>
12364 </member> 11988 </member>
12365 <member name="F:OpenMetaverse.NetworkManager.m_EventQueueRunning"> 11989 <member name="M:OpenMetaverse.AssetManager.OnInitiateDownload(OpenMetaverse.InitiateDownloadEventArgs)">
12366 <summary>The event subscribers, null of no subscribers</summary> 11990 <summary>Raises the InitiateDownload event</summary>
11991 <param name="e">A InitiateDownloadEventArgs object containing the
11992 data returned from the simulator</param>
12367 </member> 11993 </member>
12368 <member name="F:OpenMetaverse.NetworkManager.m_EventQueueRunningLock"> 11994 <member name="F:OpenMetaverse.AssetManager.m_InitiateDownloadLock">
12369 <summary>Thread sync lock object</summary> 11995 <summary>Thread sync lock object</summary>
12370 </member> 11996 </member>
12371 <member name="F:OpenMetaverse.NetworkManager.Simulators"> 11997 <member name="F:OpenMetaverse.AssetManager.m_ImageReceiveProgressEvent">
12372 <summary>All of the simulators we are currently connected to</summary> 11998 <summary>The event subscribers. null if no subcribers</summary>
12373 </member>
12374 <member name="F:OpenMetaverse.NetworkManager.CapsEvents">
12375 <summary>Handlers for incoming capability events</summary>
12376 </member>
12377 <member name="F:OpenMetaverse.NetworkManager.PacketEvents">
12378 <summary>Handlers for incoming packets</summary>
12379 </member>
12380 <member name="F:OpenMetaverse.NetworkManager.PacketInbox">
12381 <summary>Incoming packets that are awaiting handling</summary>
12382 </member>
12383 <member name="F:OpenMetaverse.NetworkManager.PacketOutbox">
12384 <summary>Outgoing packets that are awaiting handling</summary>
12385 </member>
12386 <member name="E:OpenMetaverse.NetworkManager.LoginProgress">
12387 <summary>Raised when the simulator sends us data containing
12388 ...</summary>
12389 </member>
12390 <member name="E:OpenMetaverse.NetworkManager.OnLoginResponse">
12391 <summary>Called when a reply is received from the login server, the
12392 login sequence will block until this event returns</summary>
12393 </member>
12394 <member name="E:OpenMetaverse.NetworkManager.PacketSent">
12395 <summary>Raised when the simulator sends us data containing
12396 ...</summary>
12397 </member>
12398 <member name="E:OpenMetaverse.NetworkManager.LoggedOut">
12399 <summary>Raised when the simulator sends us data containing
12400 ...</summary>
12401 </member>
12402 <member name="E:OpenMetaverse.NetworkManager.SimConnecting">
12403 <summary>Raised when the simulator sends us data containing
12404 ...</summary>
12405 </member>
12406 <member name="E:OpenMetaverse.NetworkManager.SimConnected">
12407 <summary>Raised when the simulator sends us data containing
12408 ...</summary>
12409 </member>
12410 <member name="E:OpenMetaverse.NetworkManager.SimDisconnected">
12411 <summary>Raised when the simulator sends us data containing
12412 ...</summary>
12413 </member>
12414 <member name="E:OpenMetaverse.NetworkManager.Disconnected">
12415 <summary>Raised when the simulator sends us data containing
12416 ...</summary>
12417 </member>
12418 <member name="E:OpenMetaverse.NetworkManager.SimChanged">
12419 <summary>Raised when the simulator sends us data containing
12420 ...</summary>
12421 </member>
12422 <member name="E:OpenMetaverse.NetworkManager.EventQueueRunning">
12423 <summary>Raised when the simulator sends us data containing
12424 ...</summary>
12425 </member>
12426 <member name="P:OpenMetaverse.NetworkManager.LoginStatusCode">
12427 <summary>Current state of logging in</summary>
12428 </member>
12429 <member name="P:OpenMetaverse.NetworkManager.LoginErrorKey">
12430 <summary>Upon login failure, contains a short string key for the
12431 type of login error that occurred</summary>
12432 </member>
12433 <member name="P:OpenMetaverse.NetworkManager.RawLoginReply">
12434 <summary>The raw XML-RPC reply from the login server, exactly as it
12435 was received (minus the HTTP header)</summary>
12436 </member>
12437 <member name="P:OpenMetaverse.NetworkManager.LoginMessage">
12438 <summary>During login this contains a descriptive version of
12439 LoginStatusCode. After a successful login this will contain the
12440 message of the day, and after a failed login a descriptive error
12441 message will be returned</summary>
12442 </member>
12443 <member name="P:OpenMetaverse.NetworkManager.CircuitCode">
12444 <summary>Unique identifier associated with our connections to
12445 simulators</summary>
12446 </member>
12447 <member name="P:OpenMetaverse.NetworkManager.CurrentSim">
12448 <summary>The simulator that the logged in avatar is currently
12449 occupying</summary>
12450 </member>
12451 <member name="P:OpenMetaverse.NetworkManager.Connected">
12452 <summary>Shows whether the network layer is logged in to the
12453 grid or not</summary>
12454 </member>
12455 <member name="P:OpenMetaverse.NetworkManager.InboxCount">
12456 <summary>Number of packets in the incoming queue</summary>
12457 </member>
12458 <member name="P:OpenMetaverse.NetworkManager.OutboxCount">
12459 <summary>Number of packets in the outgoing queue</summary>
12460 </member>
12461 <member name="M:OpenMetaverse.NetworkManager.OnLoginProgress(OpenMetaverse.LoginProgressEventArgs)">
12462 <summary>Raises the LoginProgress Event</summary>
12463 <param name="e">A LoginProgressEventArgs object containing
12464 the data sent from the simulator</param>
12465 </member>
12466 <member name="M:OpenMetaverse.NetworkManager.DefaultLoginParams(System.String,System.String,System.String,System.String,System.String)">
12467 <summary>
12468 Generate sane default values for a login request
12469 </summary>
12470 <param name="firstName">Account first name</param>
12471 <param name="lastName">Account last name</param>
12472 <param name="password">Account password</param>
12473 <param name="userAgent">Client application name</param>
12474 <param name="userVersion">Client application version</param>
12475 <returns>A populated <seealso cref="T:OpenMetaverse.LoginParams" /> struct containing
12476 sane defaults</returns>
12477 </member>
12478 <member name="M:OpenMetaverse.NetworkManager.Login(System.String,System.String,System.String,System.String,System.String)">
12479 <summary>
12480 Simplified login that takes the most common and required fields
12481 </summary>
12482 <param name="firstName">Account first name</param>
12483 <param name="lastName">Account last name</param>
12484 <param name="password">Account password</param>
12485 <param name="userAgent">Client application name</param>
12486 <param name="userVersion">Client application version</param>
12487 <returns>Whether the login was successful or not. On failure the
12488 LoginErrorKey string will contain the error code and LoginMessage
12489 will contain a description of the error</returns>
12490 </member>
12491 <member name="M:OpenMetaverse.NetworkManager.Login(System.String,System.String,System.String,System.String,System.String,System.String)">
12492 <summary>
12493 Simplified login that takes the most common fields along with a
12494 starting location URI, and can accept an MD5 string instead of a
12495 plaintext password
12496 </summary>
12497 <param name="firstName">Account first name</param>
12498 <param name="lastName">Account last name</param>
12499 <param name="password">Account password or MD5 hash of the password
12500 such as $1$1682a1e45e9f957dcdf0bb56eb43319c</param>
12501 <param name="userAgent">Client application name</param>
12502 <param name="start">Starting location URI that can be built with
12503 StartLocation()</param>
12504 <param name="userVersion">Client application version</param>
12505 <returns>Whether the login was successful or not. On failure the
12506 LoginErrorKey string will contain the error code and LoginMessage
12507 will contain a description of the error</returns>
12508 </member> 11999 </member>
12509 <member name="M:OpenMetaverse.NetworkManager.Login(OpenMetaverse.LoginParams)"> 12000 <member name="M:OpenMetaverse.AssetManager.OnImageReceiveProgress(OpenMetaverse.ImageReceiveProgressEventArgs)">
12510 <summary> 12001 <summary>Raises the ImageReceiveProgress event</summary>
12511 Login that takes a struct of all the values that will be passed to 12002 <param name="e">A ImageReceiveProgressEventArgs object containing the
12512 the login server 12003 data returned from the simulator</param>
12513 </summary>
12514 <param name="loginParams">The values that will be passed to the login
12515 server, all fields must be set even if they are String.Empty</param>
12516 <returns>Whether the login was successful or not. On failure the
12517 LoginErrorKey string will contain the error code and LoginMessage
12518 will contain a description of the error</returns>
12519 </member> 12004 </member>
12520 <member name="M:OpenMetaverse.NetworkManager.StartLocation(System.String,System.Int32,System.Int32,System.Int32)"> 12005 <member name="F:OpenMetaverse.AssetManager.m_ImageReceiveProgressLock">
12521 <summary> 12006 <summary>Thread sync lock object</summary>
12522 Build a start location URI for passing to the Login function
12523 </summary>
12524 <param name="sim">Name of the simulator to start in</param>
12525 <param name="x">X coordinate to start at</param>
12526 <param name="y">Y coordinate to start at</param>
12527 <param name="z">Z coordinate to start at</param>
12528 <returns>String with a URI that can be used to login to a specified
12529 location</returns>
12530 </member> 12007 </member>
12531 <member name="M:OpenMetaverse.NetworkManager.RemoteLoginHandler(OpenMetaverse.LoginResponseData,OpenMetaverse.LoginParams)"> 12008 <member name="F:OpenMetaverse.AssetManager.Cache">
12532 <summary> 12009 <summary>Texture download cache</summary>
12533 LoginParams and the initial login XmlRpcRequest were made on a remote machine.
12534 This method now initializes libomv with the results.
12535 </summary>
12536 </member> 12010 </member>
12537 <member name="M:OpenMetaverse.NetworkManager.LoginReplyXmlRpcHandler(Nwc.XmlRpc.XmlRpcResponse,OpenMetaverse.LoginParams)"> 12011 <member name="M:OpenMetaverse.AssetManager.#ctor(OpenMetaverse.GridClient)">
12538 <summary> 12012 <summary>
12539 Handles response from XML-RPC login replies 12013 Default constructor
12540 </summary> 12014 </summary>
12015 <param name="client">A reference to the GridClient object</param>
12541 </member> 12016 </member>
12542 <member name="M:OpenMetaverse.NetworkManager.LoginReplyXmlRpcHandler(OpenMetaverse.LoginResponseData,OpenMetaverse.LoginParams)"> 12017 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.AssetManager.AssetReceivedCallback)">
12543 <summary> 12018 <summary>
12544 Handles response from XML-RPC login replies with already parsed LoginResponseData 12019 Request an asset download
12545 </summary> 12020 </summary>
12021 <param name="assetID">Asset UUID</param>
12022 <param name="type">Asset type, must be correct for the transfer to succeed</param>
12023 <param name="priority">Whether to give this transfer an elevated priority</param>
12024 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
12546 </member> 12025 </member>
12547 <member name="M:OpenMetaverse.NetworkManager.LoginReplyLLSDHandler(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)"> 12026 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.SourceType,OpenMetaverse.AssetManager.AssetReceivedCallback)">
12548 <summary> 12027 <summary>
12549 Handle response from LLSD login replies 12028 Request an asset download
12550 </summary> 12029 </summary>
12551 <param name="client"> 12030 <param name="assetID">Asset UUID</param>
12552 </param> 12031 <param name="type">Asset type, must be correct for the transfer to succeed</param>
12553 <param name="result"> 12032 <param name="priority">Whether to give this transfer an elevated priority</param>
12554 </param> 12033 <param name="sourceType">Source location of the requested asset</param>
12555 <param name="error"> 12034 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
12556 </param>
12557 </member> 12035 </member>
12558 <member name="M:OpenMetaverse.NetworkManager.GetPlatform"> 12036 <member name="M:OpenMetaverse.AssetManager.RequestAsset(OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.SourceType,OpenMetaverse.UUID,OpenMetaverse.AssetManager.AssetReceivedCallback)">
12559 <summary> 12037 <summary>
12560 Get current OS 12038 Request an asset download
12561 </summary> 12039 </summary>
12562 <returns>Either "Win" or "Linux"</returns> 12040 <param name="assetID">Asset UUID</param>
12041 <param name="type">Asset type, must be correct for the transfer to succeed</param>
12042 <param name="priority">Whether to give this transfer an elevated priority</param>
12043 <param name="sourceType">Source location of the requested asset</param>
12044 <param name="transactionID">UUID of the transaction</param>
12045 <param name="callback">The callback to fire when the simulator responds with the asset data</param>
12563 </member> 12046 </member>
12564 <member name="M:OpenMetaverse.NetworkManager.GetMAC"> 12047 <member name="M:OpenMetaverse.AssetManager.RequestAssetXfer(System.String,System.Boolean,System.Boolean,OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean)">
12565 <summary> 12048 <summary>
12566 Get clients default Mac Address 12049 Request an asset download through the almost deprecated Xfer system
12567 </summary> 12050 </summary>
12568 <returns>A string containing the first found Mac Address</returns> 12051 <param name="filename">Filename of the asset to request</param>
12569 </member> 12052 <param name="deleteOnCompletion">Whether or not to delete the asset
12570 <member name="M:OpenMetaverse.NetworkManager.OnPacketSent(OpenMetaverse.PacketSentEventArgs)"> 12053 off the server after it is retrieved</param>
12571 <summary>Raises the PacketSent Event</summary> 12054 <param name="useBigPackets">Use large transfer packets or not</param>
12572 <param name="e">A PacketSentEventArgs object containing 12055 <param name="vFileID">UUID of the file to request, if filename is
12573 the data sent from the simulator</param> 12056 left empty</param>
12574 </member> 12057 <param name="vFileType">Asset type of <code>vFileID</code>, or
12575 <member name="M:OpenMetaverse.NetworkManager.OnLoggedOut(OpenMetaverse.LoggedOutEventArgs)"> 12058 <code>AssetType.Unknown</code> if filename is not empty</param>
12576 <summary>Raises the LoggedOut Event</summary> 12059 <param name="fromCache">Sets the FilePath in the request to Cache
12577 <param name="e">A LoggedOutEventArgs object containing 12060 (4) if true, otherwise Unknown (0) is used</param>
12578 the data sent from the simulator</param> 12061 <returns></returns>
12579 </member>
12580 <member name="M:OpenMetaverse.NetworkManager.OnSimConnecting(OpenMetaverse.SimConnectingEventArgs)">
12581 <summary>Raises the SimConnecting Event</summary>
12582 <param name="e">A SimConnectingEventArgs object containing
12583 the data sent from the simulator</param>
12584 </member>
12585 <member name="M:OpenMetaverse.NetworkManager.OnSimConnected(OpenMetaverse.SimConnectedEventArgs)">
12586 <summary>Raises the SimConnected Event</summary>
12587 <param name="e">A SimConnectedEventArgs object containing
12588 the data sent from the simulator</param>
12589 </member>
12590 <member name="M:OpenMetaverse.NetworkManager.OnSimDisconnected(OpenMetaverse.SimDisconnectedEventArgs)">
12591 <summary>Raises the SimDisconnected Event</summary>
12592 <param name="e">A SimDisconnectedEventArgs object containing
12593 the data sent from the simulator</param>
12594 </member>
12595 <member name="M:OpenMetaverse.NetworkManager.OnDisconnected(OpenMetaverse.DisconnectedEventArgs)">
12596 <summary>Raises the Disconnected Event</summary>
12597 <param name="e">A DisconnectedEventArgs object containing
12598 the data sent from the simulator</param>
12599 </member>
12600 <member name="M:OpenMetaverse.NetworkManager.OnSimChanged(OpenMetaverse.SimChangedEventArgs)">
12601 <summary>Raises the SimChanged Event</summary>
12602 <param name="e">A SimChangedEventArgs object containing
12603 the data sent from the simulator</param>
12604 </member>
12605 <member name="M:OpenMetaverse.NetworkManager.OnEventQueueRunning(OpenMetaverse.EventQueueRunningEventArgs)">
12606 <summary>Raises the EventQueueRunning Event</summary>
12607 <param name="e">A EventQueueRunningEventArgs object containing
12608 the data sent from the simulator</param>
12609 </member> 12062 </member>
12610 <member name="M:OpenMetaverse.NetworkManager.RegisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})"> 12063 <member name="M:OpenMetaverse.AssetManager.RequestInventoryAsset(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.AssetType,System.Boolean,OpenMetaverse.AssetManager.AssetReceivedCallback)">
12611 <summary> 12064 <summary>
12612 Register an event handler for a packet. This is a low level event 12065
12613 interface and should only be used if you are doing something not
12614 supported in the library
12615 </summary> 12066 </summary>
12616 <param name="type">Packet type to trigger events for</param> 12067 <param name="assetID">Use UUID.Zero if you do not have the
12617 <param name="callback">Callback to fire when a packet of this type 12068 asset ID but have all the necessary permissions</param>
12618 is received</param> 12069 <param name="itemID">The item ID of this asset in the inventory</param>
12070 <param name="taskID">Use UUID.Zero if you are not requesting an
12071 asset from an object inventory</param>
12072 <param name="ownerID">The owner of this asset</param>
12073 <param name="type">Asset type</param>
12074 <param name="priority">Whether to prioritize this asset download or not</param>
12075 <param name="callback"></param>
12619 </member> 12076 </member>
12620 <member name="M:OpenMetaverse.NetworkManager.RegisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs},System.Boolean)"> 12077 <member name="M:OpenMetaverse.AssetManager.SetPendingAssetUploadData(OpenMetaverse.AssetUpload)">
12621 <summary> 12078 <summary>
12622 Register an event handler for a packet. This is a low level event 12079 Used to force asset data into the PendingUpload property, ie: for raw terrain uploads
12623 interface and should only be used if you are doing something not
12624 supported in the library
12625 </summary> 12080 </summary>
12626 <param name="type">Packet type to trigger events for</param> 12081 <param name="assetData">An AssetUpload object containing the data to upload to the simulator</param>
12627 <param name="callback">Callback to fire when a packet of this type
12628 is received</param>
12629 <param name="isAsync">True if the callback should be ran
12630 asynchronously. Only set this to false (synchronous for callbacks
12631 that will always complete quickly)</param>
12632 <remarks>If any callback for a packet type is marked as
12633 asynchronous, all callbacks for that packet type will be fired
12634 asynchronously</remarks>
12635 </member> 12082 </member>
12636 <member name="M:OpenMetaverse.NetworkManager.UnregisterCallback(OpenMetaverse.Packets.PacketType,System.EventHandler{OpenMetaverse.PacketReceivedEventArgs})"> 12083 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.Assets.Asset,System.Boolean)">
12637 <summary> 12084 <summary>
12638 Unregister an event handler for a packet. This is a low level event 12085 Request an asset be uploaded to the simulator
12639 interface and should only be used if you are doing something not
12640 supported in the library
12641 </summary> 12086 </summary>
12642 <param name="type">Packet type this callback is registered with</param> 12087 <param name="asset">The <seealso cref="T:OpenMetaverse.Assets.Asset"/> Object containing the asset data</param>
12643 <param name="callback">Callback to stop firing events for</param> 12088 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
12089 in which the client was connected in addition to being stored on the asset server</param>
12090 <returns>The <seealso cref="T:OpenMetaverse.UUID"/> of the transfer, can be used to correlate the upload with
12091 events being fired</returns>
12644 </member> 12092 </member>
12645 <member name="M:OpenMetaverse.NetworkManager.RegisterEventCallback(System.String,OpenMetaverse.Caps.EventQueueCallback)"> 12093 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.AssetType,System.Byte[],System.Boolean)">
12646 <summary> 12094 <summary>
12647 Register a CAPS event handler. This is a low level event interface 12095 Request an asset be uploaded to the simulator
12648 and should only be used if you are doing something not supported in
12649 the library
12650 </summary> 12096 </summary>
12651 <param name="capsEvent">Name of the CAPS event to register a handler for</param> 12097 <param name="type">The <seealso cref="T:OpenMetaverse.AssetType"/> of the asset being uploaded</param>
12652 <param name="callback">Callback to fire when a CAPS event is received</param> 12098 <param name="data">A byte array containing the encoded asset data</param>
12099 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
12100 in which the client was connected in addition to being stored on the asset server</param>
12101 <returns>The <seealso cref="T:OpenMetaverse.UUID"/> of the transfer, can be used to correlate the upload with
12102 events being fired</returns>
12653 </member> 12103 </member>
12654 <member name="M:OpenMetaverse.NetworkManager.UnregisterEventCallback(System.String,OpenMetaverse.Caps.EventQueueCallback)"> 12104 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.UUID@,OpenMetaverse.AssetType,System.Byte[],System.Boolean)">
12655 <summary> 12105 <summary>
12656 Unregister a CAPS event handler. This is a low level event interface 12106 Request an asset be uploaded to the simulator
12657 and should only be used if you are doing something not supported in
12658 the library
12659 </summary> 12107 </summary>
12660 <param name="capsEvent">Name of the CAPS event this callback is 12108 <param name="assetID"></param>
12661 registered with</param> 12109 <param name="type">Asset type to upload this data as</param>
12662 <param name="callback">Callback to stop firing events for</param> 12110 <param name="data">A byte array containing the encoded asset data</param>
12111 <param name="storeLocal">If True, the asset once uploaded will be stored on the simulator
12112 in which the client was connected in addition to being stored on the asset server</param>
12113 <returns>The <seealso cref="T:OpenMetaverse.UUID"/> of the transfer, can be used to correlate the upload with
12114 events being fired</returns>
12663 </member> 12115 </member>
12664 <member name="M:OpenMetaverse.NetworkManager.SendPacket(OpenMetaverse.Packets.Packet)"> 12116 <member name="M:OpenMetaverse.AssetManager.RequestUpload(OpenMetaverse.UUID@,OpenMetaverse.AssetType,System.Byte[],System.Boolean,OpenMetaverse.UUID)">
12665 <summary> 12117 <summary>
12666 Send a packet to the simulator the avatar is currently occupying 12118 Initiate an asset upload
12667 </summary> 12119 </summary>
12668 <param name="packet">Packet to send</param> 12120 <param name="assetID">The ID this asset will have if the
12121 upload succeeds</param>
12122 <param name="type">Asset type to upload this data as</param>
12123 <param name="data">Raw asset data to upload</param>
12124 <param name="storeLocal">Whether to store this asset on the local
12125 simulator or the grid-wide asset server</param>
12126 <param name="transactionID">The tranaction id for the upload <see cref="!:RequestCreateItem"/></param>
12127 <returns>The transaction ID of this transfer</returns>
12669 </member> 12128 </member>
12670 <member name="M:OpenMetaverse.NetworkManager.SendPacket(OpenMetaverse.Packets.Packet,OpenMetaverse.Simulator)"> 12129 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32,OpenMetaverse.TextureDownloadCallback,System.Boolean)">
12671 <summary> 12130 <summary>
12672 Send a packet to a specified simulator 12131 Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline"/> system to
12673 </summary> 12132 manage the requests and re-assemble the image from the packets received from the simulator
12674 <param name="packet">Packet to send</param> 12133 </summary>
12675 <param name="simulator">Simulator to send the packet to</param> 12134 <param name="textureID">The <see cref="T:OpenMetaverse.UUID"/> of the texture asset to download</param>
12135 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType"/> of the texture asset.
12136 Use <see cref="F:OpenMetaverse.ImageType.Normal"/> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked"/> for baked layer texture assets</param>
12137 <param name="priority">A float indicating the requested priority for the transfer. Higher priority values tell the simulator
12138 to prioritize the request before lower valued requests. An image already being transferred using the <see cref="T:OpenMetaverse.TexturePipeline"/> can have
12139 its priority changed by resending the request with the new priority value</param>
12140 <param name="discardLevel">Number of quality layers to discard.
12141 This controls the end marker of the data sent. Sending with value -1 combined with priority of 0 cancels an in-progress
12142 transfer.</param>
12143 <remarks>A bug exists in the Linden Simulator where a -1 will occasionally be sent with a non-zero priority
12144 indicating an off-by-one error.</remarks>
12145 <param name="packetStart">The packet number to begin the request at. A value of 0 begins the request
12146 from the start of the asset texture</param>
12147 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback"/> callback to fire when the image is retrieved. The callback
12148 will contain the result of the request and the texture asset data</param>
12149 <param name="progress">If true, the callback will be fired for each chunk of the downloaded image.
12150 The callback asset parameter will contain all previously received chunks of the texture asset starting
12151 from the beginning of the request</param>
12152 <example>
12153 Request an image and fire a callback when the request is complete
12154 <code>
12155 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, TextureDownloader_OnDownloadFinished);
12156
12157 private void TextureDownloader_OnDownloadFinished(TextureRequestState state, AssetTexture asset)
12158 {
12159 if(state == TextureRequestState.Finished)
12160 {
12161 Console.WriteLine("Texture {0} ({1} bytes) has been successfully downloaded",
12162 asset.AssetID,
12163 asset.AssetData.Length);
12164 }
12165 }
12166 </code>
12167 Request an image and use an inline anonymous method to handle the downloaded texture data
12168 <code>
12169 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, delegate(TextureRequestState state, AssetTexture asset)
12170 {
12171 if(state == TextureRequestState.Finished)
12172 {
12173 Console.WriteLine("Texture {0} ({1} bytes) has been successfully downloaded",
12174 asset.AssetID,
12175 asset.AssetData.Length);
12176 }
12177 }
12178 );
12179 </code>
12180 Request a texture, decode the texture to a bitmap image and apply it to a imagebox
12181 <code>
12182 Client.Assets.RequestImage(UUID.Parse("c307629f-e3a1-4487-5e88-0d96ac9d4965"), ImageType.Normal, TextureDownloader_OnDownloadFinished);
12183
12184 private void TextureDownloader_OnDownloadFinished(TextureRequestState state, AssetTexture asset)
12185 {
12186 if(state == TextureRequestState.Finished)
12187 {
12188 ManagedImage imgData;
12189 Image bitmap;
12190
12191 if (state == TextureRequestState.Finished)
12192 {
12193 OpenJPEG.DecodeToImage(assetTexture.AssetData, out imgData, out bitmap);
12194 picInsignia.Image = bitmap;
12195 }
12196 }
12197 }
12198 </code>
12199 </example>
12676 </member> 12200 </member>
12677 <member name="M:OpenMetaverse.NetworkManager.Connect(System.Net.IPAddress,System.UInt16,System.UInt64,System.Boolean,System.String)"> 12201 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.TextureDownloadCallback)">
12678 <summary> 12202 <summary>
12679 Connect to a simulator 12203 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline"/> system to
12204 manage the requests and re-assemble the image from the packets received from the simulator
12680 </summary> 12205 </summary>
12681 <param name="ip">IP address to connect to</param> 12206 <param name="textureID">The <see cref="T:OpenMetaverse.UUID"/> of the texture asset to download</param>
12682 <param name="port">Port to connect to</param> 12207 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback"/> callback to fire when the image is retrieved. The callback
12683 <param name="handle">Handle for this simulator, to identify its 12208 will contain the result of the request and the texture asset data</param>
12684 location in the grid</param>
12685 <param name="setDefault">Whether to set CurrentSim to this new
12686 connection, use this if the avatar is moving in to this simulator</param>
12687 <param name="seedcaps">URL of the capabilities server to use for
12688 this sim connection</param>
12689 <returns>A Simulator object on success, otherwise null</returns>
12690 </member> 12209 </member>
12691 <member name="M:OpenMetaverse.NetworkManager.Connect(System.Net.IPEndPoint,System.UInt64,System.Boolean,System.String)"> 12210 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,OpenMetaverse.TextureDownloadCallback)">
12692 <summary> 12211 <summary>
12693 Connect to a simulator 12212 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline"/> system to
12213 manage the requests and re-assemble the image from the packets received from the simulator
12694 </summary> 12214 </summary>
12695 <param name="endPoint">IP address and port to connect to</param> 12215 <param name="textureID">The <see cref="T:OpenMetaverse.UUID"/> of the texture asset to download</param>
12696 <param name="handle">Handle for this simulator, to identify its 12216 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType"/> of the texture asset.
12697 location in the grid</param> 12217 Use <see cref="F:OpenMetaverse.ImageType.Normal"/> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked"/> for baked layer texture assets</param>
12698 <param name="setDefault">Whether to set CurrentSim to this new 12218 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback"/> callback to fire when the image is retrieved. The callback
12699 connection, use this if the avatar is moving in to this simulator</param> 12219 will contain the result of the request and the texture asset data</param>
12700 <param name="seedcaps">URL of the capabilities server to use for
12701 this sim connection</param>
12702 <returns>A Simulator object on success, otherwise null</returns>
12703 </member> 12220 </member>
12704 <member name="M:OpenMetaverse.NetworkManager.Logout"> 12221 <member name="M:OpenMetaverse.AssetManager.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,OpenMetaverse.TextureDownloadCallback,System.Boolean)">
12705 <summary> 12222 <summary>
12706 Initiate a blocking logout request. This will return when the logout 12223 Overload: Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline"/> system to
12707 handshake has completed or when <code>Settings.LOGOUT_TIMEOUT</code> 12224 manage the requests and re-assemble the image from the packets received from the simulator
12708 has expired and the network layer is manually shut down
12709 </summary> 12225 </summary>
12226 <param name="textureID">The <see cref="T:OpenMetaverse.UUID"/> of the texture asset to download</param>
12227 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType"/> of the texture asset.
12228 Use <see cref="F:OpenMetaverse.ImageType.Normal"/> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked"/> for baked layer texture assets</param>
12229 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback"/> callback to fire when the image is retrieved. The callback
12230 will contain the result of the request and the texture asset data</param>
12231 <param name="progress">If true, the callback will be fired for each chunk of the downloaded image.
12232 The callback asset parameter will contain all previously received chunks of the texture asset starting
12233 from the beginning of the request</param>
12710 </member> 12234 </member>
12711 <member name="M:OpenMetaverse.NetworkManager.RequestLogout"> 12235 <member name="M:OpenMetaverse.AssetManager.RequestImageCancel(OpenMetaverse.UUID)">
12712 <summary> 12236 <summary>
12713 Initiate the logout process. Check if logout succeeded with the 12237 Cancel a texture request
12714 <code>OnLogoutReply</code> event, and if this does not fire the
12715 <code>Shutdown()</code> function needs to be manually called
12716 </summary> 12238 </summary>
12239 <param name="textureID">The texture assets <see cref="T:OpenMetaverse.UUID"/></param>
12717 </member> 12240 </member>
12718 <member name="M:OpenMetaverse.NetworkManager.DisconnectSim(OpenMetaverse.Simulator,System.Boolean)"> 12241 <member name="M:OpenMetaverse.AssetManager.RequestMesh(OpenMetaverse.UUID,OpenMetaverse.AssetManager.MeshDownloadCallback)">
12719 <summary> 12242 <summary>
12720 Close a connection to the given simulator 12243 Requests download of a mesh asset
12721 </summary> 12244 </summary>
12722 <param name="simulator"> 12245 <param name="meshID">UUID of the mesh asset</param>
12723 </param> 12246 <param name="callback">Callback when the request completes</param>
12724 <param name="sendCloseCircuit">
12725 </param>
12726 </member>
12727 <member name="M:OpenMetaverse.NetworkManager.Shutdown(OpenMetaverse.NetworkManager.DisconnectType)">
12728 <summary>
12729 Shutdown will disconnect all the sims except for the current sim
12730 first, and then kill the connection to CurrentSim. This should only
12731 be called if the logout process times out on <code>RequestLogout</code></summary>
12732 <param name="type">Type of shutdown</param>
12733 </member>
12734 <member name="M:OpenMetaverse.NetworkManager.Shutdown(OpenMetaverse.NetworkManager.DisconnectType,System.String)">
12735 <summary>
12736 Shutdown will disconnect all the sims except for the current sim
12737 first, and then kill the connection to CurrentSim. This should only
12738 be called if the logout process times out on <code>RequestLogout</code></summary>
12739 <param name="type">Type of shutdown</param>
12740 <param name="message">Shutdown message</param>
12741 </member> 12247 </member>
12742 <member name="M:OpenMetaverse.NetworkManager.FindSimulator(System.Net.IPEndPoint)"> 12248 <member name="M:OpenMetaverse.AssetManager.RequestServerBakedImage(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.TextureDownloadCallback)">
12743 <summary> 12249 <summary>
12744 Searches through the list of currently connected simulators to find 12250 Fetach avatar texture on a grid capable of server side baking
12745 one attached to the given IPEndPoint
12746 </summary> 12251 </summary>
12747 <param name="endPoint">IPEndPoint of the Simulator to search for</param> 12252 <param name="avatarID">ID of the avatar</param>
12748 <returns>A Simulator reference on success, otherwise null</returns> 12253 <param name="textureID">ID of the texture</param>
12254 <param name="bakeName">Name of the part of the avatar texture applies to</param>
12255 <param name="callback">Callback invoked on operation completion</param>
12749 </member> 12256 </member>
12750 <member name="M:OpenMetaverse.NetworkManager.RaiseConnectedEvent(OpenMetaverse.Simulator)"> 12257 <member name="M:OpenMetaverse.AssetManager.FireImageProgressEvent(OpenMetaverse.UUID,System.Int32,System.Int32)">
12751 <summary> 12258 <summary>
12752 Fire an event when an event queue connects for capabilities 12259 Lets TexturePipeline class fire the progress event
12753 </summary> 12260 </summary>
12754 <param name="simulator">Simulator the event queue is attached to</param> 12261 <param name="texureID">The texture ID currently being downloaded</param>
12262 <param name="transferredBytes">the number of bytes transferred</param>
12263 <param name="totalBytes">the total number of bytes expected</param>
12755 </member> 12264 </member>
12756 <member name="M:OpenMetaverse.NetworkManager.LogoutReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12265 <member name="M:OpenMetaverse.AssetManager.TransferInfoHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12757 <summary>Process an incoming packet and raise the appropriate events</summary> 12266 <summary>Process an incoming packet and raise the appropriate events</summary>
12758 <param name="sender">The sender</param> 12267 <param name="sender">The sender</param>
12759 <param name="e">The EventArgs object containing the packet data</param> 12268 <param name="e">The EventArgs object containing the packet data</param>
12760 </member> 12269 </member>
12761 <member name="M:OpenMetaverse.NetworkManager.StartPingCheckHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12270 <member name="M:OpenMetaverse.AssetManager.TransferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12762 <summary>Process an incoming packet and raise the appropriate events</summary> 12271 <summary>Process an incoming packet and raise the appropriate events</summary>
12763 <param name="sender">The sender</param> 12272 <param name="sender">The sender</param>
12764 <param name="e">The EventArgs object containing the packet data</param> 12273 <param name="e">The EventArgs object containing the packet data</param>
12765 </member> 12274 </member>
12766 <member name="M:OpenMetaverse.NetworkManager.CompletePingCheckHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12275 <member name="M:OpenMetaverse.AssetManager.InitiateDownloadPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12767 <summary>Process an incoming packet and raise the appropriate events</summary> 12276 <summary>Process an incoming packet and raise the appropriate events</summary>
12768 <param name="sender">The sender</param> 12277 <param name="sender">The sender</param>
12769 <param name="e">The EventArgs object containing the packet data</param> 12278 <param name="e">The EventArgs object containing the packet data</param>
12770 </member> 12279 </member>
12771 <member name="M:OpenMetaverse.NetworkManager.SimStatsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12280 <member name="M:OpenMetaverse.AssetManager.RequestXferHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12772 <summary>Process an incoming packet and raise the appropriate events</summary> 12281 <summary>Process an incoming packet and raise the appropriate events</summary>
12773 <param name="sender">The sender</param> 12282 <param name="sender">The sender</param>
12774 <param name="e">The EventArgs object containing the packet data</param> 12283 <param name="e">The EventArgs object containing the packet data</param>
12775 </member> 12284 </member>
12776 <member name="M:OpenMetaverse.NetworkManager.RegionHandshakeHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12285 <member name="M:OpenMetaverse.AssetManager.ConfirmXferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12777 <summary>Process an incoming packet and raise the appropriate events</summary> 12286 <summary>Process an incoming packet and raise the appropriate events</summary>
12778 <param name="sender">The sender</param> 12287 <param name="sender">The sender</param>
12779 <param name="e">The EventArgs object containing the packet data</param> 12288 <param name="e">The EventArgs object containing the packet data</param>
12780 </member> 12289 </member>
12781 <member name="M:OpenMetaverse.NetworkManager.DisableSimulatorHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12290 <member name="M:OpenMetaverse.AssetManager.AssetUploadCompleteHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12782 <summary>Process an incoming packet and raise the appropriate events</summary> 12291 <summary>Process an incoming packet and raise the appropriate events</summary>
12783 <param name="sender">The sender</param> 12292 <param name="sender">The sender</param>
12784 <param name="e">The EventArgs object containing the packet data</param> 12293 <param name="e">The EventArgs object containing the packet data</param>
12785 </member> 12294 </member>
12786 <member name="M:OpenMetaverse.NetworkManager.KickUserHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12295 <member name="M:OpenMetaverse.AssetManager.SendXferPacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12787 <summary>Process an incoming packet and raise the appropriate events</summary> 12296 <summary>Process an incoming packet and raise the appropriate events</summary>
12788 <param name="sender">The sender</param> 12297 <param name="sender">The sender</param>
12789 <param name="e">The EventArgs object containing the packet data</param> 12298 <param name="e">The EventArgs object containing the packet data</param>
12790 </member> 12299 </member>
12791 <member name="T:OpenMetaverse.NameValue"> 12300 <member name="M:OpenMetaverse.AssetManager.AbortXferHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
12792 <summary> 12301 <summary>Process an incoming packet and raise the appropriate events</summary>
12793 A Name Value pair with additional settings, used in the protocol 12302 <param name="sender">The sender</param>
12794 primarily to transmit avatar names and active group in object packets 12303 <param name="e">The EventArgs object containing the packet data</param>
12795 </summary>
12796 </member>
12797 <member name="M:OpenMetaverse.NameValue.#ctor(System.String,OpenMetaverse.NameValue.ValueType,OpenMetaverse.NameValue.ClassType,OpenMetaverse.NameValue.SendtoType,System.Object)">
12798 <summary>
12799 Constructor that takes all the fields as parameters
12800 </summary>
12801 <param name="name">
12802 </param>
12803 <param name="valueType">
12804 </param>
12805 <param name="classType">
12806 </param>
12807 <param name="sendtoType">
12808 </param>
12809 <param name="value">
12810 </param>
12811 </member>
12812 <member name="M:OpenMetaverse.NameValue.#ctor(System.String)">
12813 <summary>
12814 Constructor that takes a single line from a NameValue field
12815 </summary>
12816 <param name="data">
12817 </param>
12818 </member>
12819 <member name="T:OpenMetaverse.NameValue.ValueType">
12820 <summary>Type of the value</summary>
12821 </member>
12822 <member name="F:OpenMetaverse.NameValue.ValueType.Unknown">
12823 <summary>Unknown</summary>
12824 </member>
12825 <member name="F:OpenMetaverse.NameValue.ValueType.String">
12826 <summary>String value</summary>
12827 </member>
12828 <member name="F:OpenMetaverse.NameValue.ValueType.F32">
12829 <summary>
12830 </summary>
12831 </member>
12832 <member name="F:OpenMetaverse.NameValue.ValueType.S32">
12833 <summary>
12834 </summary>
12835 </member>
12836 <member name="F:OpenMetaverse.NameValue.ValueType.VEC3">
12837 <summary>
12838 </summary>
12839 </member>
12840 <member name="F:OpenMetaverse.NameValue.ValueType.U32">
12841 <summary>
12842 </summary>
12843 </member>
12844 <member name="F:OpenMetaverse.NameValue.ValueType.CAMERA">
12845 <summary>Deprecated</summary>
12846 </member>
12847 <member name="F:OpenMetaverse.NameValue.ValueType.Asset">
12848 <summary>String value, but designated as an asset</summary>
12849 </member>
12850 <member name="F:OpenMetaverse.NameValue.ValueType.U64">
12851 <summary>
12852 </summary>
12853 </member>
12854 <member name="T:OpenMetaverse.NameValue.ClassType">
12855 <summary>
12856 </summary>
12857 </member> 12304 </member>
12858 <member name="F:OpenMetaverse.NameValue.ClassType.Unknown"> 12305 <member name="E:OpenMetaverse.AssetManager.XferReceived">
12859 <summary> 12306 <summary>Raised when the simulator responds sends </summary>
12860 </summary>
12861 </member> 12307 </member>
12862 <member name="F:OpenMetaverse.NameValue.ClassType.ReadOnly"> 12308 <member name="E:OpenMetaverse.AssetManager.AssetUploaded">
12863 <summary> 12309 <summary>Raised during upload completes</summary>
12864 </summary>
12865 </member> 12310 </member>
12866 <member name="F:OpenMetaverse.NameValue.ClassType.ReadWrite"> 12311 <member name="E:OpenMetaverse.AssetManager.UploadProgress">
12867 <summary> 12312 <summary>Raised during upload with progres update</summary>
12868 </summary>
12869 </member> 12313 </member>
12870 <member name="F:OpenMetaverse.NameValue.ClassType.Callback"> 12314 <member name="E:OpenMetaverse.AssetManager.InitiateDownload">
12871 <summary> 12315 <summary>Fired when the simulator sends an InitiateDownloadPacket, used to download terrain .raw files</summary>
12872 </summary>
12873 </member> 12316 </member>
12874 <member name="T:OpenMetaverse.NameValue.SendtoType"> 12317 <member name="E:OpenMetaverse.AssetManager.ImageReceiveProgress">
12875 <summary> 12318 <summary>Fired when a texture is in the process of being downloaded by the TexturePipeline class</summary>
12876 </summary>
12877 </member> 12319 </member>
12878 <member name="F:OpenMetaverse.NameValue.SendtoType.Unknown"> 12320 <member name="T:OpenMetaverse.AssetManager.AssetReceivedCallback">
12879 <summary> 12321 <summary>
12322 Callback used for various asset download requests
12880 </summary> 12323 </summary>
12324 <param name="transfer">Transfer information</param>
12325 <param name="asset">Downloaded asset, null on fail</param>
12881 </member> 12326 </member>
12882 <member name="F:OpenMetaverse.NameValue.SendtoType.Sim"> 12327 <member name="T:OpenMetaverse.AssetManager.BakedTextureUploadedCallback">
12883 <summary> 12328 <summary>
12329 Callback used upon competition of baked texture upload
12884 </summary> 12330 </summary>
12331 <param name="newAssetID">Asset UUID of the newly uploaded baked texture</param>
12885 </member> 12332 </member>
12886 <member name="F:OpenMetaverse.NameValue.SendtoType.DataSim"> 12333 <member name="T:OpenMetaverse.AssetManager.MeshDownloadCallback">
12887 <summary> 12334 <summary>
12335 A callback that fires upon the completition of the RequestMesh call
12888 </summary> 12336 </summary>
12337 <param name="success">Was the download successfull</param>
12338 <param name="assetMesh">Resulting mesh or null on problems</param>
12889 </member> 12339 </member>
12890 <member name="F:OpenMetaverse.NameValue.SendtoType.SimViewer"> 12340 <member name="P:OpenMetaverse.XferReceivedEventArgs.Xfer">
12891 <summary> 12341 <summary>Xfer data</summary>
12892 </summary>
12893 </member> 12342 </member>
12894 <member name="F:OpenMetaverse.NameValue.SendtoType.DataSimViewer"> 12343 <member name="P:OpenMetaverse.AssetUploadEventArgs.Upload">
12895 <summary> 12344 <summary>Upload data</summary>
12896 </summary>
12897 </member> 12345 </member>
12898 <member name="F:OpenMetaverse.NameValue.Name"> 12346 <member name="P:OpenMetaverse.InitiateDownloadEventArgs.SimFileName">
12899 <summary> 12347 <summary>Filename used on the simulator</summary>
12900 </summary>
12901 </member> 12348 </member>
12902 <member name="F:OpenMetaverse.NameValue.Type"> 12349 <member name="P:OpenMetaverse.InitiateDownloadEventArgs.ViewerFileName">
12903 <summary> 12350 <summary>Filename used by the client</summary>
12904 </summary>
12905 </member> 12351 </member>
12906 <member name="F:OpenMetaverse.NameValue.Class"> 12352 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.ImageID">
12907 <summary> 12353 <summary>UUID of the image that is in progress</summary>
12908 </summary>
12909 </member> 12354 </member>
12910 <member name="F:OpenMetaverse.NameValue.Sendto"> 12355 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.Received">
12911 <summary> 12356 <summary>Number of bytes received so far</summary>
12912 </summary>
12913 </member> 12357 </member>
12914 <member name="F:OpenMetaverse.NameValue.Value"> 12358 <member name="P:OpenMetaverse.ImageReceiveProgressEventArgs.Total">
12915 <summary> 12359 <summary>Image size in bytes</summary>
12916 </summary>
12917 </member> 12360 </member>
12918 <member name="T:OpenMetaverse.ReportType"> 12361 <member name="T:OpenMetaverse.Assets.AssetScriptText">
12919 <summary> 12362 <summary>
12363 Represents an LSL Text object containing a string of UTF encoded characters
12920 </summary> 12364 </summary>
12921 </member> 12365 </member>
12922 <member name="F:OpenMetaverse.ReportType.None"> 12366 <member name="F:OpenMetaverse.Assets.AssetScriptText.Source">
12923 <summary>No report</summary> 12367 <summary>A string of characters represting the script contents</summary>
12924 </member>
12925 <member name="F:OpenMetaverse.ReportType.Unknown">
12926 <summary>Unknown report type</summary>
12927 </member>
12928 <member name="F:OpenMetaverse.ReportType.Bug">
12929 <summary>Bug report</summary>
12930 </member>
12931 <member name="F:OpenMetaverse.ReportType.Complaint">
12932 <summary>Complaint report</summary>
12933 </member> 12368 </member>
12934 <member name="F:OpenMetaverse.ReportType.CustomerServiceRequest"> 12369 <member name="M:OpenMetaverse.Assets.AssetScriptText.#ctor">
12935 <summary>Customer service report</summary> 12370 <summary>Initializes a new AssetScriptText object</summary>
12936 </member> 12371 </member>
12937 <member name="T:OpenMetaverse.CompressedFlags"> 12372 <member name="M:OpenMetaverse.Assets.AssetScriptText.#ctor(OpenMetaverse.UUID,System.Byte[])">
12938 <summary> 12373 <summary>
12939 Bitflag field for ObjectUpdateCompressed data blocks, describing 12374 Initializes a new AssetScriptText object with parameters
12940 which options are present for each object
12941 </summary> 12375 </summary>
12376 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
12377 <param name="assetData">A byte array containing the raw asset data</param>
12942 </member> 12378 </member>
12943 <member name="F:OpenMetaverse.CompressedFlags.ScratchPad"> 12379 <member name="M:OpenMetaverse.Assets.AssetScriptText.Encode">
12944 <summary>Unknown</summary>
12945 </member>
12946 <member name="F:OpenMetaverse.CompressedFlags.Tree">
12947 <summary>Whether the object has a TreeSpecies</summary>
12948 </member>
12949 <member name="F:OpenMetaverse.CompressedFlags.HasText">
12950 <summary>Whether the object has floating text ala llSetText</summary>
12951 </member>
12952 <member name="F:OpenMetaverse.CompressedFlags.HasParticles">
12953 <summary>Whether the object has an active particle system</summary>
12954 </member>
12955 <member name="F:OpenMetaverse.CompressedFlags.HasSound">
12956 <summary>Whether the object has sound attached to it</summary>
12957 </member>
12958 <member name="F:OpenMetaverse.CompressedFlags.HasParent">
12959 <summary>Whether the object is attached to a root object or not</summary>
12960 </member>
12961 <member name="F:OpenMetaverse.CompressedFlags.TextureAnimation">
12962 <summary>Whether the object has texture animation settings</summary>
12963 </member>
12964 <member name="F:OpenMetaverse.CompressedFlags.HasAngularVelocity">
12965 <summary>Whether the object has an angular velocity</summary>
12966 </member>
12967 <member name="F:OpenMetaverse.CompressedFlags.HasNameValues">
12968 <summary>Whether the object has a name value pairs string</summary>
12969 </member>
12970 <member name="F:OpenMetaverse.CompressedFlags.MediaURL">
12971 <summary>Whether the object has a Media URL set</summary>
12972 </member>
12973 <member name="T:OpenMetaverse.UpdateType">
12974 <summary> 12380 <summary>
12975 Specific Flags for MultipleObjectUpdate requests 12381 Encode a string containing the scripts contents into byte encoded AssetData
12976 </summary> 12382 </summary>
12977 </member> 12383 </member>
12978 <member name="F:OpenMetaverse.UpdateType.None"> 12384 <member name="M:OpenMetaverse.Assets.AssetScriptText.Decode">
12979 <summary>None</summary>
12980 </member>
12981 <member name="F:OpenMetaverse.UpdateType.Position">
12982 <summary>Change position of prims</summary>
12983 </member>
12984 <member name="F:OpenMetaverse.UpdateType.Rotation">
12985 <summary>Change rotation of prims</summary>
12986 </member>
12987 <member name="F:OpenMetaverse.UpdateType.Scale">
12988 <summary>Change size of prims</summary>
12989 </member>
12990 <member name="F:OpenMetaverse.UpdateType.Linked">
12991 <summary>Perform operation on link set</summary>
12992 </member>
12993 <member name="F:OpenMetaverse.UpdateType.Uniform">
12994 <summary>Scale prims uniformly, same as selecing ctrl+shift in the
12995 viewer. Used in conjunction with Scale</summary>
12996 </member>
12997 <member name="T:OpenMetaverse.PayPriceType">
12998 <summary> 12385 <summary>
12999 Special values in PayPriceReply. If the price is not one of these 12386 Decode a byte array containing the scripts contents into a string
13000 literal value of the price should be use
13001 </summary> 12387 </summary>
12388 <returns>true if decoding is successful</returns>
13002 </member> 12389 </member>
13003 <member name="F:OpenMetaverse.PayPriceType.Hide"> 12390 <member name="P:OpenMetaverse.Assets.AssetScriptText.AssetType">
13004 <summary> 12391 <summary>Override the base classes AssetType</summary>
13005 Indicates that this pay option should be hidden
13006 </summary>
13007 </member> 12392 </member>
13008 <member name="F:OpenMetaverse.PayPriceType.Default"> 12393 <member name="T:OpenMetaverse.Assets.AssetScriptBinary">
13009 <summary> 12394 <summary>
13010 Indicates that this pay option should have the default value 12395 Represents an AssetScriptBinary object containing the
12396 LSO compiled bytecode of an LSL script
13011 </summary> 12397 </summary>
13012 </member> 12398 </member>
13013 <member name="T:OpenMetaverse.ObjectMovementUpdate"> 12399 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.#ctor">
13014 <summary> 12400 <summary>Initializes a new instance of an AssetScriptBinary object</summary>
13015 Contains the variables sent in an object update packet for objects.
13016 Used to track position and movement of prims and avatars
13017 </summary>
13018 </member> 12401 </member>
13019 <member name="F:OpenMetaverse.ObjectMovementUpdate.Avatar"> 12402 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.#ctor(OpenMetaverse.UUID,System.Byte[])">
13020 <summary> 12403 <summary>Initializes a new instance of an AssetScriptBinary object with parameters</summary>
13021 </summary> 12404 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
12405 <param name="assetData">A byte array containing the raw asset data</param>
13022 </member> 12406 </member>
13023 <member name="F:OpenMetaverse.ObjectMovementUpdate.CollisionPlane"> 12407 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.Encode">
13024 <summary> 12408 <summary>
12409 TODO: Encodes a scripts contents into a LSO Bytecode file
13025 </summary> 12410 </summary>
13026 </member> 12411 </member>
13027 <member name="F:OpenMetaverse.ObjectMovementUpdate.State"> 12412 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.Decode">
13028 <summary> 12413 <summary>
12414 TODO: Decode LSO Bytecode into a string
13029 </summary> 12415 </summary>
12416 <returns>true</returns>
13030 </member> 12417 </member>
13031 <member name="F:OpenMetaverse.ObjectMovementUpdate.LocalID"> 12418 <member name="P:OpenMetaverse.Assets.AssetScriptBinary.AssetType">
13032 <summary> 12419 <summary>Override the base classes AssetType</summary>
13033 </summary>
13034 </member> 12420 </member>
13035 <member name="F:OpenMetaverse.ObjectMovementUpdate.Position"> 12421 <member name="T:OpenMetaverse.Assets.AssetCallingCard">
13036 <summary> 12422 <summary>
12423 Represents a Callingcard with AvatarID and Position vector
13037 </summary> 12424 </summary>
13038 </member> 12425 </member>
13039 <member name="F:OpenMetaverse.ObjectMovementUpdate.Velocity"> 12426 <member name="F:OpenMetaverse.Assets.AssetCallingCard.AvatarID">
13040 <summary> 12427 <summary>UUID of the Callingcard target avatar</summary>
13041 </summary>
13042 </member> 12428 </member>
13043 <member name="F:OpenMetaverse.ObjectMovementUpdate.Acceleration"> 12429 <member name="M:OpenMetaverse.Assets.AssetCallingCard.#ctor">
13044 <summary> 12430 <summary>Construct an Asset of type Callingcard</summary>
13045 </summary>
13046 </member> 12431 </member>
13047 <member name="F:OpenMetaverse.ObjectMovementUpdate.Rotation"> 12432 <member name="M:OpenMetaverse.Assets.AssetCallingCard.#ctor(OpenMetaverse.UUID,System.Byte[])">
13048 <summary> 12433 <summary>
12434 Construct an Asset object of type Callingcard
13049 </summary> 12435 </summary>
12436 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
12437 <param name="assetData">A byte array containing the raw asset data</param>
13050 </member> 12438 </member>
13051 <member name="F:OpenMetaverse.ObjectMovementUpdate.AngularVelocity"> 12439 <member name="M:OpenMetaverse.Assets.AssetCallingCard.#ctor(OpenMetaverse.UUID)">
13052 <summary> 12440 <summary>
12441 Constuct an asset of type Callingcard
13053 </summary> 12442 </summary>
12443 <param name="avatarID">UUID of the target avatar</param>
13054 </member> 12444 </member>
13055 <member name="F:OpenMetaverse.ObjectMovementUpdate.Textures"> 12445 <member name="M:OpenMetaverse.Assets.AssetCallingCard.Encode">
13056 <summary> 12446 <summary>
12447 Encode the raw contents of a string with the specific Callingcard format
13057 </summary> 12448 </summary>
13058 </member> 12449 </member>
13059 <member name="T:OpenMetaverse.ObjectManager"> 12450 <member name="M:OpenMetaverse.Assets.AssetCallingCard.Decode">
13060 <summary> 12451 <summary>
13061 Handles all network traffic related to prims and avatar positions and 12452 Decode the raw asset data, populating the AvatarID and Position
13062 movement.
13063 </summary> 12453 </summary>
12454 <returns>true if the AssetData was successfully decoded to a UUID and Vector</returns>
13064 </member> 12455 </member>
13065 <member name="M:OpenMetaverse.ObjectManager.#ctor(OpenMetaverse.GridClient)"> 12456 <member name="P:OpenMetaverse.Assets.AssetCallingCard.AssetType">
13066 <summary> 12457 <summary>Override the base classes AssetType</summary>
13067 Construct a new instance of the ObjectManager class
13068 </summary>
13069 <param name="client">A reference to the <see cref="T:OpenMetaverse.GridClient" /> instance</param>
13070 </member> 12458 </member>
13071 <member name="T:OpenMetaverse.ObjectManager.ObjectMediaCallback"> 12459 <member name="T:OpenMetaverse.SoundManager">
13072 <summary> 12460 <summary>
13073 Callback for getting object media data via CAP 12461
13074 </summary> 12462 </summary>
13075 <param name="success">Indicates if the operation was succesfull</param>
13076 <param name="version">Object media version string</param>
13077 <param name="faceMedia">Array indexed on prim face of media entry data</param>
13078 </member> 12463 </member>
13079 <member name="F:OpenMetaverse.ObjectManager.m_ObjectUpdate"> 12464 <member name="F:OpenMetaverse.SoundManager.m_AttachedSound">
13080 <summary>The event subscribers, null of no subscribers</summary>
13081 </member>
13082 <member name="F:OpenMetaverse.ObjectManager.m_ObjectUpdateLock">
13083 <summary>Thread sync lock object</summary>
13084 </member>
13085 <member name="F:OpenMetaverse.ObjectManager.m_ObjectProperties">
13086 <summary>The event subscribers, null of no subscribers</summary>
13087 </member>
13088 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesLock">
13089 <summary>Thread sync lock object</summary>
13090 </member>
13091 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesUpdated">
13092 <summary>The event subscribers, null of no subscribers</summary>
13093 </member>
13094 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesUpdatedLock">
13095 <summary>Thread sync lock object</summary>
13096 </member>
13097 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesFamily">
13098 <summary>The event subscribers, null of no subscribers</summary> 12465 <summary>The event subscribers, null of no subscribers</summary>
13099 </member> 12466 </member>
13100 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesFamilyLock"> 12467 <member name="M:OpenMetaverse.SoundManager.OnAttachedSound(OpenMetaverse.AttachedSoundEventArgs)">
13101 <summary>Thread sync lock object</summary> 12468 <summary>Raises the AttachedSound Event</summary>
13102 </member> 12469 <param name="e">A AttachedSoundEventArgs object containing
13103 <member name="F:OpenMetaverse.ObjectManager.m_AvatarUpdate"> 12470 the data sent from the simulator</param>
13104 <summary>The event subscribers, null of no subscribers</summary>
13105 </member> 12471 </member>
13106 <member name="F:OpenMetaverse.ObjectManager.m_AvatarUpdateLock"> 12472 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundLock">
13107 <summary>Thread sync lock object</summary> 12473 <summary>Thread sync lock object</summary>
13108 </member> 12474 </member>
13109 <member name="F:OpenMetaverse.ObjectManager.m_TerseObjectUpdate"> 12475 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundGainChange">
13110 <summary>The event subscribers, null of no subscribers</summary> 12476 <summary>The event subscribers, null of no subscribers</summary>
13111 </member> 12477 </member>
13112 <member name="F:OpenMetaverse.ObjectManager.m_TerseObjectUpdateLock"> 12478 <member name="M:OpenMetaverse.SoundManager.OnAttachedSoundGainChange(OpenMetaverse.AttachedSoundGainChangeEventArgs)">
13113 <summary>Thread sync lock object</summary> 12479 <summary>Raises the AttachedSoundGainChange Event</summary>
13114 </member> 12480 <param name="e">A AttachedSoundGainChangeEventArgs object containing
13115 <member name="F:OpenMetaverse.ObjectManager.m_ObjectDataBlockUpdate"> 12481 the data sent from the simulator</param>
13116 <summary>The event subscribers, null of no subscribers</summary>
13117 </member> 12482 </member>
13118 <member name="F:OpenMetaverse.ObjectManager.m_ObjectDataBlockUpdateLock"> 12483 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundGainChangeLock">
13119 <summary>Thread sync lock object</summary> 12484 <summary>Thread sync lock object</summary>
13120 </member> 12485 </member>
13121 <member name="F:OpenMetaverse.ObjectManager.m_KillObject"> 12486 <member name="F:OpenMetaverse.SoundManager.m_SoundTrigger">
13122 <summary>The event subscribers, null of no subscribers</summary> 12487 <summary>The event subscribers, null of no subscribers</summary>
13123 </member> 12488 </member>
13124 <member name="F:OpenMetaverse.ObjectManager.m_KillObjectLock"> 12489 <member name="M:OpenMetaverse.SoundManager.OnSoundTrigger(OpenMetaverse.SoundTriggerEventArgs)">
13125 <summary>Thread sync lock object</summary> 12490 <summary>Raises the SoundTrigger Event</summary>
13126 </member> 12491 <param name="e">A SoundTriggerEventArgs object containing
13127 <member name="F:OpenMetaverse.ObjectManager.m_AvatarSitChanged"> 12492 the data sent from the simulator</param>
13128 <summary>The event subscribers, null of no subscribers</summary>
13129 </member> 12493 </member>
13130 <member name="F:OpenMetaverse.ObjectManager.m_AvatarSitChangedLock"> 12494 <member name="F:OpenMetaverse.SoundManager.m_SoundTriggerLock">
13131 <summary>Thread sync lock object</summary> 12495 <summary>Thread sync lock object</summary>
13132 </member> 12496 </member>
13133 <member name="F:OpenMetaverse.ObjectManager.m_PayPriceReply"> 12497 <member name="F:OpenMetaverse.SoundManager.m_PreloadSound">
13134 <summary>The event subscribers, null of no subscribers</summary> 12498 <summary>The event subscribers, null of no subscribers</summary>
13135 </member> 12499 </member>
13136 <member name="F:OpenMetaverse.ObjectManager.m_PayPriceReplyLock"> 12500 <member name="M:OpenMetaverse.SoundManager.OnPreloadSound(OpenMetaverse.PreloadSoundEventArgs)">
13137 <summary>Thread sync lock object</summary> 12501 <summary>Raises the PreloadSound Event</summary>
13138 </member> 12502 <param name="e">A PreloadSoundEventArgs object containing
13139 <member name="F:OpenMetaverse.ObjectManager.m_PhysicsProperties"> 12503 the data sent from the simulator</param>
13140 <summary>The event subscribers, null of no subscribers</summary>
13141 </member> 12504 </member>
13142 <member name="F:OpenMetaverse.ObjectManager.m_PhysicsPropertiesLock"> 12505 <member name="F:OpenMetaverse.SoundManager.m_PreloadSoundLock">
13143 <summary>Thread sync lock object</summary> 12506 <summary>Thread sync lock object</summary>
13144 </member> 12507 </member>
13145 <member name="F:OpenMetaverse.ObjectManager.Client"> 12508 <member name="M:OpenMetaverse.SoundManager.#ctor(OpenMetaverse.GridClient)">
13146 <summary>Reference to the GridClient object</summary>
13147 </member>
13148 <member name="F:OpenMetaverse.ObjectManager.InterpolationTimer">
13149 <summary>Does periodic dead reckoning calculation to convert
13150 velocity and acceleration to new positions for objects</summary>
13151 </member>
13152 <member name="E:OpenMetaverse.ObjectManager.ObjectUpdate">
13153 <summary>Raised when the simulator sends us data containing
13154 A <see cref="T:OpenMetaverse.Primitive" />, Foliage or Attachment</summary>
13155 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObject(OpenMetaverse.Simulator,System.UInt32)" />
13156 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})" />
13157 </member>
13158 <member name="E:OpenMetaverse.ObjectManager.ObjectProperties">
13159 <summary>Raised when the simulator sends us data containing
13160 additional <seea cref="Primitive" /> information</summary>
13161 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)" />
13162 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[])" />
13163 </member>
13164 <member name="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated">
13165 <summary>Raised when the simulator sends us data containing
13166 Primitive.ObjectProperties for an object we are currently tracking</summary>
13167 </member>
13168 <member name="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily">
13169 <summary>Raised when the simulator sends us data containing
13170 additional <seea cref="Primitive" /> and <see cref="T:OpenMetaverse.Avatar" /> details</summary>
13171 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean)" />
13172 </member>
13173 <member name="E:OpenMetaverse.ObjectManager.AvatarUpdate">
13174 <summary>Raised when the simulator sends us data containing
13175 updated information for an <see cref="T:OpenMetaverse.Avatar" /></summary>
13176 </member>
13177 <member name="E:OpenMetaverse.ObjectManager.TerseObjectUpdate">
13178 <summary>Raised when the simulator sends us data containing
13179 <see cref="T:OpenMetaverse.Primitive" /> and <see cref="T:OpenMetaverse.Avatar" /> movement changes</summary>
13180 </member>
13181 <member name="E:OpenMetaverse.ObjectManager.ObjectDataBlockUpdate">
13182 <summary>Raised when the simulator sends us data containing
13183 updates to an Objects DataBlock</summary>
13184 </member>
13185 <member name="E:OpenMetaverse.ObjectManager.KillObject">
13186 <summary>Raised when the simulator informs us an <see cref="T:OpenMetaverse.Primitive" />
13187 or <see cref="T:OpenMetaverse.Avatar" /> is no longer within view</summary>
13188 </member>
13189 <member name="E:OpenMetaverse.ObjectManager.AvatarSitChanged">
13190 <summary>Raised when the simulator sends us data containing
13191 updated sit information for our <see cref="T:OpenMetaverse.Avatar" /></summary>
13192 </member>
13193 <member name="E:OpenMetaverse.ObjectManager.PayPriceReply">
13194 <summary>Raised when the simulator sends us data containing
13195 purchase price information for a <see cref="T:OpenMetaverse.Primitive" /></summary>
13196 </member>
13197 <member name="E:OpenMetaverse.ObjectManager.PhysicsProperties">
13198 <summary>Raised when the simulator sends us data containing
13199 additional <seea cref="Primitive" /> information</summary>
13200 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)" />
13201 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[])" />
13202 </member>
13203 <member name="M:OpenMetaverse.ObjectManager.OnObjectProperties(OpenMetaverse.ObjectPropertiesEventArgs)">
13204 <summary>Raises the ObjectProperties Event</summary>
13205 <param name="e">A ObjectPropertiesEventArgs object containing
13206 the data sent from the simulator</param>
13207 </member>
13208 <member name="M:OpenMetaverse.ObjectManager.OnObjectPropertiesUpdated(OpenMetaverse.ObjectPropertiesUpdatedEventArgs)">
13209 <summary>Raises the ObjectPropertiesUpdated Event</summary>
13210 <param name="e">A ObjectPropertiesUpdatedEventArgs object containing
13211 the data sent from the simulator</param>
13212 </member>
13213 <member name="M:OpenMetaverse.ObjectManager.OnObjectPropertiesFamily(OpenMetaverse.ObjectPropertiesFamilyEventArgs)">
13214 <summary>Raises the ObjectPropertiesFamily Event</summary>
13215 <param name="e">A ObjectPropertiesFamilyEventArgs object containing
13216 the data sent from the simulator</param>
13217 </member>
13218 <member name="M:OpenMetaverse.ObjectManager.OnAvatarUpdate(OpenMetaverse.AvatarUpdateEventArgs)">
13219 <summary>Raises the AvatarUpdate Event</summary>
13220 <param name="e">A AvatarUpdateEventArgs object containing
13221 the data sent from the simulator</param>
13222 </member>
13223 <member name="M:OpenMetaverse.ObjectManager.OnObjectDataBlockUpdate(OpenMetaverse.ObjectDataBlockUpdateEventArgs)">
13224 <summary>Raises the ObjectDataBlockUpdate Event</summary>
13225 <param name="e">A ObjectDataBlockUpdateEventArgs object containing
13226 the data sent from the simulator</param>
13227 </member>
13228 <member name="M:OpenMetaverse.ObjectManager.OnKillObject(OpenMetaverse.KillObjectEventArgs)">
13229 <summary>Raises the KillObject Event</summary>
13230 <param name="e">A KillObjectEventArgs object containing
13231 the data sent from the simulator</param>
13232 </member>
13233 <member name="M:OpenMetaverse.ObjectManager.OnAvatarSitChanged(OpenMetaverse.AvatarSitChangedEventArgs)">
13234 <summary>Raises the AvatarSitChanged Event</summary>
13235 <param name="e">A AvatarSitChangedEventArgs object containing
13236 the data sent from the simulator</param>
13237 </member>
13238 <member name="M:OpenMetaverse.ObjectManager.OnPayPriceReply(OpenMetaverse.PayPriceReplyEventArgs)">
13239 <summary>Raises the PayPriceReply Event</summary>
13240 <param name="e">A PayPriceReplyEventArgs object containing
13241 the data sent from the simulator</param>
13242 </member>
13243 <member name="M:OpenMetaverse.ObjectManager.OnPhysicsProperties(OpenMetaverse.PhysicsPropertiesEventArgs)">
13244 <summary>Raises the PhysicsProperties Event</summary>
13245 <param name="e">A PhysicsPropertiesEventArgs object containing
13246 the data sent from the simulator</param>
13247 </member>
13248 <member name="M:OpenMetaverse.ObjectManager.RequestObject(OpenMetaverse.Simulator,System.UInt32)">
13249 <summary>
13250 Request information for a single object from a <see cref="T:OpenMetaverse.Simulator" />
13251 you are currently connected to
13252 </summary>
13253 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13254 <param name="localID">The Local ID of the object</param>
13255 </member>
13256 <member name="M:OpenMetaverse.ObjectManager.RequestObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
13257 <summary>
13258 Request information for multiple objects contained in
13259 the same simulator
13260 </summary>
13261 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the objects are located</param>
13262 <param name="localIDs">An array containing the Local IDs of the objects</param>
13263 </member>
13264 <member name="M:OpenMetaverse.ObjectManager.BuyObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.SaleType,System.Int32,OpenMetaverse.UUID,OpenMetaverse.UUID)">
13265 <summary>
13266 Attempt to purchase an original object, a copy, or the contents of
13267 an object
13268 </summary>
13269 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13270 <param name="localID">The Local ID of the object</param>
13271 <param name="saleType">Whether the original, a copy, or the object
13272 contents are on sale. This is used for verification, if the this
13273 sale type is not valid for the object the purchase will fail</param>
13274 <param name="price">Price of the object. This is used for
13275 verification, if it does not match the actual price the purchase
13276 will fail</param>
13277 <param name="groupID">Group ID that will be associated with the new
13278 purchase</param>
13279 <param name="categoryID">Inventory folder UUID where the object or objects
13280 purchased should be placed</param>
13281 <example>
13282 <code>
13283 BuyObject(Client.Network.CurrentSim, 500, SaleType.Copy,
13284 100, UUID.Zero, Client.Self.InventoryRootFolderUUID);
13285 </code>
13286 </example>
13287 </member>
13288 <member name="M:OpenMetaverse.ObjectManager.RequestPayPrice(OpenMetaverse.Simulator,OpenMetaverse.UUID)">
13289 <summary>
13290 Request prices that should be displayed in pay dialog. This will triggger the simulator
13291 to send us back a PayPriceReply which can be handled by OnPayPriceReply event
13292 </summary>
13293 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13294 <param name="objectID">The ID of the object</param>
13295 <remarks>The result is raised in the <see cref="E:OpenMetaverse.ObjectManager.PayPriceReply" /> event</remarks>
13296 </member>
13297 <member name="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)">
13298 <summary>
13299 Select a single object. This will cause the <see cref="T:OpenMetaverse.Simulator" /> to send us
13300 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event
13301 </summary>
13302 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13303 <param name="localID">The Local ID of the object</param>
13304 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs" />
13305 </member>
13306 <member name="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)">
13307 <summary>
13308 Select a single object. This will cause the <see cref="T:OpenMetaverse.Simulator" /> to send us
13309 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event
13310 </summary>
13311 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13312 <param name="localID">The Local ID of the object</param>
13313 <param name="automaticDeselect">if true, a call to <see cref="M:OpenMetaverse.ObjectManager.DeselectObject(OpenMetaverse.Simulator,System.UInt32)" /> is
13314 made immediately following the request</param>
13315 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs" />
13316 </member>
13317 <member name="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[],System.Boolean)">
13318 <summary>
13319 Select multiple objects. This will cause the <see cref="T:OpenMetaverse.Simulator" /> to send us
13320 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event
13321 </summary>
13322 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the objects are located</param>
13323 <param name="localIDs">An array containing the Local IDs of the objects</param>
13324 <param name="automaticDeselect">Should objects be deselected immediately after selection</param>
13325 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs" />
13326 </member>
13327 <member name="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[])">
13328 <summary>
13329 Select multiple objects. This will cause the <see cref="T:OpenMetaverse.Simulator" /> to send us
13330 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event
13331 </summary>
13332 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the objects are located</param>
13333 <param name="localIDs">An array containing the Local IDs of the objects</param>
13334 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs" />
13335 </member>
13336 <member name="M:OpenMetaverse.ObjectManager.SetFlags(OpenMetaverse.Simulator,System.UInt32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
13337 <summary>
13338 Update the properties of an object
13339 </summary>
13340 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13341 <param name="localID">The Local ID of the object</param>
13342 <param name="physical">true to turn the objects physical property on</param>
13343 <param name="temporary">true to turn the objects temporary property on</param>
13344 <param name="phantom">true to turn the objects phantom property on</param>
13345 <param name="castsShadow">true to turn the objects cast shadows property on</param>
13346 </member>
13347 <member name="M:OpenMetaverse.ObjectManager.SetFlags(OpenMetaverse.Simulator,System.UInt32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,OpenMetaverse.PhysicsShapeType,System.Single,System.Single,System.Single,System.Single)">
13348 <summary>
13349 Update the properties of an object
13350 </summary>
13351 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13352 <param name="localID">The Local ID of the object</param>
13353 <param name="physical">true to turn the objects physical property on</param>
13354 <param name="temporary">true to turn the objects temporary property on</param>
13355 <param name="phantom">true to turn the objects phantom property on</param>
13356 <param name="castsShadow">true to turn the objects cast shadows property on</param>
13357 <param name="physicsType">Type of the represetnation prim will have in the physics engine</param>
13358 <param name="density">Density - normal value 1000</param>
13359 <param name="friction">Friction - normal value 0.6</param>
13360 <param name="restitution">Restitution - standard value 0.5</param>
13361 <param name="gravityMultiplier">Gravity multiplier - standar value 1.0</param>
13362 </member>
13363 <member name="M:OpenMetaverse.ObjectManager.SetSaleInfo(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.SaleType,System.Int32)">
13364 <summary>
13365 Sets the sale properties of a single object
13366 </summary>
13367 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13368 <param name="localID">The Local ID of the object</param>
13369 <param name="saleType">One of the options from the <see cref="T:OpenMetaverse.SaleType" /> enum</param>
13370 <param name="price">The price of the object</param>
13371 </member>
13372 <member name="M:OpenMetaverse.ObjectManager.SetSaleInfo(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.SaleType,System.Int32)">
13373 <summary>
13374 Sets the sale properties of multiple objects
13375 </summary>
13376 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the objects are located</param>
13377 <param name="localIDs">An array containing the Local IDs of the objects</param>
13378 <param name="saleType">One of the options from the <see cref="T:OpenMetaverse.SaleType" /> enum</param>
13379 <param name="price">The price of the object</param>
13380 </member>
13381 <member name="M:OpenMetaverse.ObjectManager.DeselectObject(OpenMetaverse.Simulator,System.UInt32)">
13382 <summary>
13383 Deselect a single object
13384 </summary>
13385 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13386 <param name="localID">The Local ID of the object</param>
13387 </member>
13388 <member name="M:OpenMetaverse.ObjectManager.DeselectObjects(OpenMetaverse.Simulator,System.UInt32[])">
13389 <summary>
13390 Deselect multiple objects.
13391 </summary>
13392 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the objects are located</param>
13393 <param name="localIDs">An array containing the Local IDs of the objects</param>
13394 </member>
13395 <member name="M:OpenMetaverse.ObjectManager.ClickObject(OpenMetaverse.Simulator,System.UInt32)">
13396 <summary>
13397 Perform a click action on an object
13398 </summary>
13399 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13400 <param name="localID">The Local ID of the object</param>
13401 </member>
13402 <member name="M:OpenMetaverse.ObjectManager.ClickObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
13403 <summary>
13404 Perform a click action (Grab) on a single object
13405 </summary>
13406 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator" /> the object is located</param>
13407 <param name="localID">The Local ID of the object</param>
13408 <param name="uvCoord">The texture coordinates to touch</param>
13409 <param name="stCoord">The surface coordinates to touch</param>
13410 <param name="faceIndex">The face of the position to touch</param>
13411 <param name="position">The region coordinates of the position to touch</param>
13412 <param name="normal">The surface normal of the position to touch (A normal is a vector perpindicular to the surface)</param>
13413 <param name="binormal">The surface binormal of the position to touch (A binormal is a vector tangen to the surface
13414 pointing along the U direction of the tangent space</param>
13415 </member>
13416 <member name="M:OpenMetaverse.ObjectManager.AddPrim(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ConstructionData,OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion)">
13417 <summary>
13418 Create (rez) a new prim object in a simulator
13419 </summary>
13420 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object to place the object in</param>
13421 <param name="prim">Data describing the prim object to rez</param>
13422 <param name="groupID">Group ID that this prim will be set to, or UUID.Zero if you
13423 do not want the object to be associated with a specific group</param>
13424 <param name="position">An approximation of the position at which to rez the prim</param>
13425 <param name="scale">Scale vector to size this prim</param>
13426 <param name="rotation">Rotation quaternion to rotate this prim</param>
13427 <remarks>Due to the way client prim rezzing is done on the server,
13428 the requested position for an object is only close to where the prim
13429 actually ends up. If you desire exact placement you'll need to
13430 follow up by moving the object after it has been created. This
13431 function will not set textures, light and flexible data, or other
13432 extended primitive properties</remarks>
13433 </member>
13434 <member name="M:OpenMetaverse.ObjectManager.AddPrim(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ConstructionData,OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.PrimFlags)">
13435 <summary>
13436 Create (rez) a new prim object in a simulator
13437 </summary>
13438 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object to place the object in</param>
13439 <param name="prim">Data describing the prim object to rez</param>
13440 <param name="groupID">Group ID that this prim will be set to, or UUID.Zero if you
13441 do not want the object to be associated with a specific group</param>
13442 <param name="position">An approximation of the position at which to rez the prim</param>
13443 <param name="scale">Scale vector to size this prim</param>
13444 <param name="rotation">Rotation quaternion to rotate this prim</param>
13445 <param name="createFlags">Specify the <seealso cref="T:OpenMetaverse.PrimFlags" /></param>
13446 <remarks>Due to the way client prim rezzing is done on the server,
13447 the requested position for an object is only close to where the prim
13448 actually ends up. If you desire exact placement you'll need to
13449 follow up by moving the object after it has been created. This
13450 function will not set textures, light and flexible data, or other
13451 extended primitive properties</remarks>
13452 </member>
13453 <member name="M:OpenMetaverse.ObjectManager.AddTree(OpenMetaverse.Simulator,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.Tree,OpenMetaverse.UUID,System.Boolean)">
13454 <summary>
13455 Rez a Linden tree
13456 </summary>
13457 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13458 <param name="scale">The size of the tree</param>
13459 <param name="rotation">The rotation of the tree</param>
13460 <param name="position">The position of the tree</param>
13461 <param name="treeType">The Type of tree</param>
13462 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID" /> of the group to set the tree to,
13463 or UUID.Zero if no group is to be set</param>
13464 <param name="newTree">true to use the "new" Linden trees, false to use the old</param>
13465 </member>
13466 <member name="M:OpenMetaverse.ObjectManager.AddGrass(OpenMetaverse.Simulator,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.Grass,OpenMetaverse.UUID)">
13467 <summary>
13468 Rez grass and ground cover
13469 </summary>
13470 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13471 <param name="scale">The size of the grass</param>
13472 <param name="rotation">The rotation of the grass</param>
13473 <param name="position">The position of the grass</param>
13474 <param name="grassType">The type of grass from the <seealso cref="T:OpenMetaverse.Grass" /> enum</param>
13475 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID" /> of the group to set the tree to,
13476 or UUID.Zero if no group is to be set</param>
13477 </member>
13478 <member name="M:OpenMetaverse.ObjectManager.SetTextures(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.TextureEntry)">
13479 <summary>
13480 Set the textures to apply to the faces of an object
13481 </summary>
13482 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13483 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13484 <param name="textures">The texture data to apply</param>
13485 </member>
13486 <member name="M:OpenMetaverse.ObjectManager.SetTextures(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.TextureEntry,System.String)">
13487 <summary>
13488 Set the textures to apply to the faces of an object
13489 </summary>
13490 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13491 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13492 <param name="textures">The texture data to apply</param>
13493 <param name="mediaUrl">A media URL (not used)</param>
13494 </member>
13495 <member name="M:OpenMetaverse.ObjectManager.SetLight(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.LightData)">
13496 <summary>
13497 Set the Light data on an object
13498 </summary>
13499 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13500 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13501 <param name="light">A <seealso cref="T:OpenMetaverse.Primitive.LightData" /> object containing the data to set</param>
13502 </member>
13503 <member name="M:OpenMetaverse.ObjectManager.SetFlexible(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.FlexibleData)">
13504 <summary>
13505 Set the flexible data on an object
13506 </summary>
13507 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13508 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13509 <param name="flexible">A <seealso cref="T:OpenMetaverse.Primitive.FlexibleData" /> object containing the data to set</param>
13510 </member>
13511 <member name="M:OpenMetaverse.ObjectManager.SetSculpt(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.SculptData)">
13512 <summary>
13513 Set the sculptie texture and data on an object
13514 </summary>
13515 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13516 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13517 <param name="sculpt">A <seealso cref="T:OpenMetaverse.Primitive.SculptData" /> object containing the data to set</param>
13518 </member>
13519 <member name="M:OpenMetaverse.ObjectManager.SetExtraParamOff(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.ExtraParamType)">
13520 <summary>
13521 Unset additional primitive parameters on an object
13522 </summary>
13523 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13524 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13525 <param name="type">The extra parameters to set</param>
13526 </member>
13527 <member name="M:OpenMetaverse.ObjectManager.LinkPrims(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
13528 <summary>
13529 Link multiple prims into a linkset
13530 </summary>
13531 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param>
13532 <param name="localIDs">An array which contains the IDs of the objects to link</param>
13533 <remarks>The last object in the array will be the root object of the linkset TODO: Is this true?</remarks>
13534 </member>
13535 <member name="M:OpenMetaverse.ObjectManager.DelinkPrims(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
13536 <summary>
13537 Delink/Unlink multiple prims from a linkset
13538 </summary>
13539 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param>
13540 <param name="localIDs">An array which contains the IDs of the objects to delink</param>
13541 </member>
13542 <member name="M:OpenMetaverse.ObjectManager.SetRotation(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Quaternion)">
13543 <summary>
13544 Change the rotation of an object
13545 </summary>
13546 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13547 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13548 <param name="rotation">The new rotation of the object</param>
13549 </member>
13550 <member name="M:OpenMetaverse.ObjectManager.SetName(OpenMetaverse.Simulator,System.UInt32,System.String)">
13551 <summary>
13552 Set the name of an object
13553 </summary>
13554 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13555 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13556 <param name="name">A string containing the new name of the object</param>
13557 </member>
13558 <member name="M:OpenMetaverse.ObjectManager.SetNames(OpenMetaverse.Simulator,System.UInt32[],System.String[])">
13559 <summary>
13560 Set the name of multiple objects
13561 </summary>
13562 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param>
13563 <param name="localIDs">An array which contains the IDs of the objects to change the name of</param>
13564 <param name="names">An array which contains the new names of the objects</param>
13565 </member>
13566 <member name="M:OpenMetaverse.ObjectManager.SetDescription(OpenMetaverse.Simulator,System.UInt32,System.String)">
13567 <summary>
13568 Set the description of an object
13569 </summary>
13570 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13571 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13572 <param name="description">A string containing the new description of the object</param>
13573 </member>
13574 <member name="M:OpenMetaverse.ObjectManager.SetDescriptions(OpenMetaverse.Simulator,System.UInt32[],System.String[])">
13575 <summary>
13576 Set the descriptions of multiple objects
13577 </summary>
13578 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param>
13579 <param name="localIDs">An array which contains the IDs of the objects to change the description of</param>
13580 <param name="descriptions">An array which contains the new descriptions of the objects</param>
13581 </member>
13582 <member name="M:OpenMetaverse.ObjectManager.AttachObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.AttachmentPoint,OpenMetaverse.Quaternion)">
13583 <summary>
13584 Attach an object to this avatar
13585 </summary>
13586 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13587 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13588 <param name="attachPoint">The point on the avatar the object will be attached</param>
13589 <param name="rotation">The rotation of the attached object</param>
13590 </member>
13591 <member name="M:OpenMetaverse.ObjectManager.DropObject(OpenMetaverse.Simulator,System.UInt32)">
13592 <summary>
13593 Drop an attached object from this avatar
13594 </summary>
13595 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" />
13596 object where the objects reside. This will always be the simulator the avatar is currently in
13597 </param>
13598 <param name="localID">The object's ID which is local to the simulator the object is in</param>
13599 </member>
13600 <member name="M:OpenMetaverse.ObjectManager.DetachObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
13601 <summary>
13602 Detach an object from yourself
13603 </summary>
13604 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" />
13605 object where the objects reside
13606 This will always be the simulator the avatar is currently in
13607 </param>
13608 <param name="localIDs">An array which contains the IDs of the objects to detach</param>
13609 </member>
13610 <member name="M:OpenMetaverse.ObjectManager.SetPosition(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3)">
13611 <summary>
13612 Change the position of an object, Will change position of entire linkset
13613 </summary>
13614 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13615 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13616 <param name="position">The new position of the object</param>
13617 </member>
13618 <member name="M:OpenMetaverse.ObjectManager.SetPosition(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,System.Boolean)">
13619 <summary>
13620 Change the position of an object
13621 </summary>
13622 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13623 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13624 <param name="position">The new position of the object</param>
13625 <param name="childOnly">if true, will change position of (this) child prim only, not entire linkset</param>
13626 </member>
13627 <member name="M:OpenMetaverse.ObjectManager.SetScale(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,System.Boolean,System.Boolean)">
13628 <summary>
13629 Change the Scale (size) of an object
13630 </summary>
13631 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13632 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13633 <param name="scale">The new scale of the object</param>
13634 <param name="childOnly">If true, will change scale of this prim only, not entire linkset</param>
13635 <param name="uniform">True to resize prims uniformly</param>
13636 </member>
13637 <member name="M:OpenMetaverse.ObjectManager.SetRotation(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Quaternion,System.Boolean)">
13638 <summary>
13639 Change the Rotation of an object that is either a child or a whole linkset
13640 </summary>
13641 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13642 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13643 <param name="quat">The new scale of the object</param>
13644 <param name="childOnly">If true, will change rotation of this prim only, not entire linkset</param>
13645 </member>
13646 <member name="M:OpenMetaverse.ObjectManager.UpdateObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.UpdateType)">
13647 <summary>
13648 Send a Multiple Object Update packet to change the size, scale or rotation of a primitive
13649 </summary>
13650 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13651 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13652 <param name="data">The new rotation, size, or position of the target object</param>
13653 <param name="type">The flags from the <seealso cref="T:OpenMetaverse.UpdateType" /> Enum</param>
13654 </member>
13655 <member name="M:OpenMetaverse.ObjectManager.DeedObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
13656 <summary>
13657 Deed an object (prim) to a group, Object must be shared with group which
13658 can be accomplished with SetPermissions()
13659 </summary>
13660 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13661 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13662 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID" /> of the group to deed the object to</param>
13663 </member>
13664 <member name="M:OpenMetaverse.ObjectManager.DeedObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.UUID)">
13665 <summary>
13666 Deed multiple objects (prims) to a group, Objects must be shared with group which
13667 can be accomplished with SetPermissions()
13668 </summary>
13669 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13670 <param name="localIDs">An array which contains the IDs of the objects to deed</param>
13671 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID" /> of the group to deed the object to</param>
13672 </member>
13673 <member name="M:OpenMetaverse.ObjectManager.SetPermissions(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.PermissionWho,OpenMetaverse.PermissionMask,System.Boolean)">
13674 <summary>
13675 Set the permissions on multiple objects
13676 </summary>
13677 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param>
13678 <param name="localIDs">An array which contains the IDs of the objects to set the permissions on</param>
13679 <param name="who">The new Who mask to set</param>
13680 <param name="permissions">Which permission to modify</param>
13681 <param name="set">The new state of permission</param>
13682 </member>
13683 <member name="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID)">
13684 <summary>
13685 Request additional properties for an object
13686 </summary>
13687 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13688 <param name="objectID">
13689 </param>
13690 </member>
13691 <member name="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean)">
13692 <summary> 12509 <summary>
13693 Request additional properties for an object 12510 Construct a new instance of the SoundManager class, used for playing and receiving
12511 sound assets
13694 </summary> 12512 </summary>
13695 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param> 12513 <param name="client">A reference to the current GridClient instance</param>
13696 <param name="objectID">Absolute UUID of the object</param>
13697 <param name="reliable">Whether to require server acknowledgement of this request</param>
13698 </member> 12514 </member>
13699 <member name="M:OpenMetaverse.ObjectManager.SetObjectsGroup(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.UUID)"> 12515 <member name="M:OpenMetaverse.SoundManager.PlaySound(OpenMetaverse.UUID)">
13700 <summary> 12516 <summary>
13701 Set the ownership of a list of objects to the specified group 12517 Plays a sound in the current region at full volume from avatar position
13702 </summary> 12518 </summary>
13703 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the objects reside</param> 12519 <param name="soundID">UUID of the sound to be played</param>
13704 <param name="localIds">An array which contains the IDs of the objects to set the group id on</param>
13705 <param name="groupID">The Groups ID</param>
13706 </member> 12520 </member>
13707 <member name="M:OpenMetaverse.ObjectManager.NavigateObjectMedia(OpenMetaverse.UUID,System.Int32,System.String,OpenMetaverse.Simulator)"> 12521 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Vector3)">
13708 <summary> 12522 <summary>
13709 Update current URL of the previously set prim media 12523 Plays a sound in the current region at full volume
13710 </summary> 12524 </summary>
13711 <param name="primID">UUID of the prim</param> 12525 <param name="soundID">UUID of the sound to be played.</param>
13712 <param name="newURL">Set current URL to this</param> 12526 <param name="position">position for the sound to be played at. Normally the avatar.</param>
13713 <param name="face">Prim face number</param>
13714 <param name="sim">Simulator in which prim is located</param>
13715 </member> 12527 </member>
13716 <member name="M:OpenMetaverse.ObjectManager.UpdateObjectMedia(OpenMetaverse.UUID,OpenMetaverse.MediaEntry[],OpenMetaverse.Simulator)"> 12528 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Vector3,System.Single)">
13717 <summary> 12529 <summary>
13718 Set object media 12530 Plays a sound in the current region
13719 </summary> 12531 </summary>
13720 <param name="primID">UUID of the prim</param> 12532 <param name="soundID">UUID of the sound to be played.</param>
13721 <param name="faceMedia">Array the length of prims number of faces. Null on face indexes where there is 12533 <param name="position">position for the sound to be played at. Normally the avatar.</param>
13722 no media, <seealso cref="T:OpenMetaverse.MediaEntry" /> on faces which contain the media</param> 12534 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
13723 <param name="sim">Simulatior in which prim is located</param>
13724 </member> 12535 </member>
13725 <member name="M:OpenMetaverse.ObjectManager.RequestObjectMedia(OpenMetaverse.UUID,OpenMetaverse.Simulator,OpenMetaverse.ObjectManager.ObjectMediaCallback)"> 12536 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Simulator,OpenMetaverse.Vector3,System.Single)">
13726 <summary> 12537 <summary>
13727 Retrieve information about object media 12538 Plays a sound in the specified sim
13728 </summary> 12539 </summary>
13729 <param name="primID">UUID of the primitive</param> 12540 <param name="soundID">UUID of the sound to be played.</param>
13730 <param name="sim">Simulator where prim is located</param> 12541 <param name="sim">UUID of the sound to be played.</param>
13731 <param name="callback">Call this callback when done</param> 12542 <param name="position">position for the sound to be played at. Normally the avatar.</param>
13732 </member> 12543 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
13733 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13734 <summary>Process an incoming packet and raise the appropriate events</summary>
13735 <param name="sender">The sender</param>
13736 <param name="e">The EventArgs object containing the packet data</param>
13737 </member> 12544 </member>
13738 <member name="M:OpenMetaverse.ObjectManager.ImprovedTerseObjectUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12545 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,System.UInt64,OpenMetaverse.Vector3,System.Single)">
13739 <summary> 12546 <summary>
13740 A terse object update, used when a transformation matrix or 12547 Play a sound asset
13741 velocity/acceleration for an object changes but nothing else
13742 (scale/position/rotation/acceleration/velocity)
13743 </summary> 12548 </summary>
13744 <param name="sender">The sender</param> 12549 <param name="soundID">UUID of the sound to be played.</param>
13745 <param name="e">The EventArgs object containing the packet data</param> 12550 <param name="handle">handle id for the sim to be played in.</param>
13746 </member> 12551 <param name="position">position for the sound to be played at. Normally the avatar.</param>
13747 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateCompressedHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12552 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
13748 <summary>Process an incoming packet and raise the appropriate events</summary>
13749 <param name="sender">The sender</param>
13750 <param name="e">The EventArgs object containing the packet data</param>
13751 </member>
13752 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateCachedHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13753 <summary>Process an incoming packet and raise the appropriate events</summary>
13754 <param name="sender">The sender</param>
13755 <param name="e">The EventArgs object containing the packet data</param>
13756 </member> 12553 </member>
13757 <member name="M:OpenMetaverse.ObjectManager.KillObjectHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12554 <member name="M:OpenMetaverse.SoundManager.AttachedSoundHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13758 <summary>Process an incoming packet and raise the appropriate events</summary> 12555 <summary>Process an incoming packet and raise the appropriate events</summary>
13759 <param name="sender">The sender</param> 12556 <param name="sender">The sender</param>
13760 <param name="e">The EventArgs object containing the packet data</param> 12557 <param name="e">The EventArgs object containing the packet data</param>
13761 </member> 12558 </member>
13762 <member name="M:OpenMetaverse.ObjectManager.ObjectPropertiesHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12559 <member name="M:OpenMetaverse.SoundManager.AttachedSoundGainChangeHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13763 <summary>Process an incoming packet and raise the appropriate events</summary> 12560 <summary>Process an incoming packet and raise the appropriate events</summary>
13764 <param name="sender">The sender</param> 12561 <param name="sender">The sender</param>
13765 <param name="e">The EventArgs object containing the packet data</param> 12562 <param name="e">The EventArgs object containing the packet data</param>
13766 </member> 12563 </member>
13767 <member name="M:OpenMetaverse.ObjectManager.ObjectPropertiesFamilyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12564 <member name="M:OpenMetaverse.SoundManager.PreloadSoundHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13768 <summary>Process an incoming packet and raise the appropriate events</summary> 12565 <summary>Process an incoming packet and raise the appropriate events</summary>
13769 <param name="sender">The sender</param> 12566 <param name="sender">The sender</param>
13770 <param name="e">The EventArgs object containing the packet data</param> 12567 <param name="e">The EventArgs object containing the packet data</param>
13771 </member> 12568 </member>
13772 <member name="M:OpenMetaverse.ObjectManager.PayPriceReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 12569 <member name="M:OpenMetaverse.SoundManager.SoundTriggerHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
13773 <summary>Process an incoming packet and raise the appropriate events</summary> 12570 <summary>Process an incoming packet and raise the appropriate events</summary>
13774 <param name="sender">The sender</param> 12571 <param name="sender">The sender</param>
13775 <param name="e">The EventArgs object containing the packet data</param> 12572 <param name="e">The EventArgs object containing the packet data</param>
13776 </member> 12573 </member>
13777 <member name="M:OpenMetaverse.ObjectManager.ObjectPhysicsPropertiesHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)"> 12574 <member name="E:OpenMetaverse.SoundManager.AttachedSound">
13778 <summary> 12575 <summary>Raised when the simulator sends us data containing
13779 </summary> 12576 sound</summary>
13780 <param name="capsKey">
13781 </param>
13782 <param name="message">
13783 </param>
13784 <param name="simulator">
13785 </param>
13786 </member>
13787 <member name="M:OpenMetaverse.ObjectManager.BuildBasicShape(OpenMetaverse.PrimType)">
13788 <summary>
13789 Setup construction data for a basic primitive shape
13790 </summary>
13791 <param name="type">Primitive shape to construct</param>
13792 <returns>Construction data that can be plugged into a <seealso cref="T:OpenMetaverse.Primitive" /></returns>
13793 </member>
13794 <member name="M:OpenMetaverse.ObjectManager.SetAvatarSittingOn(OpenMetaverse.Simulator,OpenMetaverse.Avatar,System.UInt32,System.UInt32)">
13795 <summary>
13796 </summary>
13797 <param name="sim">
13798 </param>
13799 <param name="av">
13800 </param>
13801 <param name="localid">
13802 </param>
13803 <param name="oldSeatID">
13804 </param>
13805 </member>
13806 <member name="M:OpenMetaverse.ObjectManager.UpdateDilation(OpenMetaverse.Simulator,System.UInt32)">
13807 <summary>
13808 </summary>
13809 <param name="s">
13810 </param>
13811 <param name="dilation">
13812 </param>
13813 </member>
13814 <member name="M:OpenMetaverse.ObjectManager.SetShape(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.ConstructionData)">
13815 <summary>
13816 Set the Shape data of an object
13817 </summary>
13818 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13819 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13820 <param name="prim">Data describing the prim shape</param>
13821 </member>
13822 <member name="M:OpenMetaverse.ObjectManager.SetMaterial(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Material)">
13823 <summary>
13824 Set the Material data of an object
13825 </summary>
13826 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator" /> object where the object resides</param>
13827 <param name="localID">The objects ID which is local to the simulator the object is in</param>
13828 <param name="material">The new material of the object</param>
13829 </member>
13830 <member name="M:OpenMetaverse.ObjectManager.GetPrimitive(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
13831 <summary>
13832 </summary>
13833 <param name="simulator">
13834 </param>
13835 <param name="localID">
13836 </param>
13837 <param name="fullID">
13838 </param>
13839 <returns>
13840 </returns>
13841 </member>
13842 <member name="M:OpenMetaverse.ObjectManager.GetAvatar(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
13843 <summary>
13844 </summary>
13845 <param name="simulator">
13846 </param>
13847 <param name="localID">
13848 </param>
13849 <param name="fullID">
13850 </param>
13851 <returns>
13852 </returns>
13853 </member>
13854 <member name="T:OpenMetaverse.PrimEventArgs">
13855 <summary>Provides data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" /> event</summary>
13856 <remarks>
13857 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" /> event occurs when the simulator sends
13858 an <see cref="T:OpenMetaverse.Packets.ObjectUpdatePacket" /> containing a Primitive, Foliage or Attachment data</para>
13859 <para>Note 1: The <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" /> event will not be raised when the object is an Avatar</para>
13860 <para>Note 2: It is possible for the <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" /> to be
13861 raised twice for the same object if for example the primitive moved to a new simulator, then returned to the current simulator or
13862 if an Avatar crosses the border into a new simulator and returns to the current simulator</para>
13863 </remarks>
13864 <example>
13865 The following code example uses the <see cref="P:OpenMetaverse.PrimEventArgs.Prim" />, <see cref="P:OpenMetaverse.PrimEventArgs.Simulator" />, and <see cref="P:OpenMetaverse.PrimEventArgs.IsAttachment" />
13866 properties to display new Primitives and Attachments on the <see cref="T:System.Console" /> window.
13867 <code>
13868 // Subscribe to the event that gives us prim and foliage information
13869 Client.Objects.ObjectUpdate += Objects_ObjectUpdate;
13870 private void Objects_ObjectUpdate(object sender, PrimEventArgs e)
13871 {
13872 Console.WriteLine("Primitive {0} {1} in {2} is an attachment {3}", e.Prim.ID, e.Prim.LocalID, e.Simulator.Name, e.IsAttachment);
13873 }
13874 </code></example>
13875 <seealso cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" />
13876 <seealso cref="E:OpenMetaverse.ObjectManager.AvatarUpdate" />
13877 <seealso cref="T:OpenMetaverse.AvatarUpdateEventArgs" />
13878 </member>
13879 <member name="M:OpenMetaverse.PrimEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive,System.UInt16,System.Boolean,System.Boolean)">
13880 <summary>
13881 Construct a new instance of the PrimEventArgs class
13882 </summary>
13883 <param name="simulator">The simulator the object originated from</param>
13884 <param name="prim">The Primitive</param>
13885 <param name="timeDilation">The simulator time dilation</param>
13886 <param name="isNew">The prim was not in the dictionary before this update</param>
13887 <param name="isAttachment">true if the primitive represents an attachment to an agent</param>
13888 </member>
13889 <member name="P:OpenMetaverse.PrimEventArgs.Simulator">
13890 <summary>Get the simulator the <see cref="T:OpenMetaverse.Primitive" /> originated from</summary>
13891 </member>
13892 <member name="P:OpenMetaverse.PrimEventArgs.Prim">
13893 <summary>Get the <see cref="T:OpenMetaverse.Primitive" /> details</summary>
13894 </member>
13895 <member name="P:OpenMetaverse.PrimEventArgs.IsNew">
13896 <summary>true if the <see cref="T:OpenMetaverse.Primitive" /> did not exist in the dictionary before this update (always true if object tracking has been disabled)</summary>
13897 </member>
13898 <member name="P:OpenMetaverse.PrimEventArgs.IsAttachment">
13899 <summary>true if the <see cref="T:OpenMetaverse.Primitive" /> is attached to an <see cref="T:OpenMetaverse.Avatar" /></summary>
13900 </member>
13901 <member name="P:OpenMetaverse.PrimEventArgs.TimeDilation">
13902 <summary>Get the simulator Time Dilation</summary>
13903 </member>
13904 <member name="T:OpenMetaverse.AvatarUpdateEventArgs">
13905 <summary>Provides data for the <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate" /> event</summary>
13906 <remarks>
13907 <para>The <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate" /> event occurs when the simulator sends
13908 an <see cref="T:OpenMetaverse.Packets.ObjectUpdatePacket" /> containing Avatar data</para>
13909 <para>Note 1: The <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate" /> event will not be raised when the object is an Avatar</para>
13910 <para>Note 2: It is possible for the <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate" /> to be
13911 raised twice for the same avatar if for example the avatar moved to a new simulator, then returned to the current simulator</para>
13912 </remarks>
13913 <example>
13914 The following code example uses the <see cref="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar" /> property to make a request for the top picks
13915 using the <see cref="M:OpenMetaverse.AvatarManager.RequestAvatarPicks(OpenMetaverse.UUID)" /> method in the <see cref="T:OpenMetaverse.AvatarManager" /> class to display the names
13916 of our own agents picks listings on the <see cref="T:System.Console" /> window.
13917 <code>
13918 // subscribe to the AvatarUpdate event to get our information
13919 Client.Objects.AvatarUpdate += Objects_AvatarUpdate;
13920 Client.Avatars.AvatarPicksReply += Avatars_AvatarPicksReply;
13921 private void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e)
13922 {
13923 // we only want our own data
13924 if (e.Avatar.LocalID == Client.Self.LocalID)
13925 {
13926 // Unsubscribe from the avatar update event to prevent a loop
13927 // where we continually request the picks every time we get an update for ourselves
13928 Client.Objects.AvatarUpdate -= Objects_AvatarUpdate;
13929 // make the top picks request through AvatarManager
13930 Client.Avatars.RequestAvatarPicks(e.Avatar.ID);
13931 }
13932 }
13933 private void Avatars_AvatarPicksReply(object sender, AvatarPicksReplyEventArgs e)
13934 {
13935 // we'll unsubscribe from the AvatarPicksReply event since we now have the data
13936 // we were looking for
13937 Client.Avatars.AvatarPicksReply -= Avatars_AvatarPicksReply;
13938 // loop through the dictionary and extract the names of the top picks from our profile
13939 foreach (var pickName in e.Picks.Values)
13940 {
13941 Console.WriteLine(pickName);
13942 }
13943 }
13944 </code></example>
13945 <seealso cref="E:OpenMetaverse.ObjectManager.ObjectUpdate" />
13946 <seealso cref="T:OpenMetaverse.PrimEventArgs" />
13947 </member>
13948 <member name="M:OpenMetaverse.AvatarUpdateEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Avatar,System.UInt16,System.Boolean)">
13949 <summary>
13950 Construct a new instance of the AvatarUpdateEventArgs class
13951 </summary>
13952 <param name="simulator">The simulator the packet originated from</param>
13953 <param name="avatar">The <see cref="T:OpenMetaverse.Avatar" /> data</param>
13954 <param name="timeDilation">The simulator time dilation</param>
13955 <param name="isNew">The avatar was not in the dictionary before this update</param>
13956 </member>
13957 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.Simulator">
13958 <summary>Get the simulator the object originated from</summary>
13959 </member> 12577 </member>
13960 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar"> 12578 <member name="E:OpenMetaverse.SoundManager.AttachedSoundGainChange">
13961 <summary>Get the <see cref="T:OpenMetaverse.Avatar" /> data</summary> 12579 <summary>Raised when the simulator sends us data containing
12580 ...</summary>
13962 </member> 12581 </member>
13963 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.TimeDilation"> 12582 <member name="E:OpenMetaverse.SoundManager.SoundTrigger">
13964 <summary>Get the simulator time dilation</summary> 12583 <summary>Raised when the simulator sends us data containing
12584 ...</summary>
13965 </member> 12585 </member>
13966 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.IsNew"> 12586 <member name="E:OpenMetaverse.SoundManager.PreloadSound">
13967 <summary>true if the <see cref="T:OpenMetaverse.Avatar" /> did not exist in the dictionary before this update (always true if avatar tracking has been disabled)</summary> 12587 <summary>Raised when the simulator sends us data containing
12588 ...</summary>
13968 </member> 12589 </member>
13969 <member name="T:OpenMetaverse.ObjectPropertiesEventArgs"> 12590 <member name="T:OpenMetaverse.AttachedSoundEventArgs">
13970 <summary>Provides additional primitive data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event</summary> 12591 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.AttachedSound"/> event</summary>
13971 <remarks> 12592 <remarks>The <see cref="E:OpenMetaverse.SoundManager.AttachedSound"/> event occurs when the simulator sends
13972 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event occurs when the simulator sends 12593 the sound data which emits from an agents attachment</remarks>
13973 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> containing additional details for a Primitive, Foliage data or Attachment data</para>
13974 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)" /> request is
13975 made.</para>
13976 </remarks>
13977 <example> 12594 <example>
13978 The following code example uses the <see cref="P:OpenMetaverse.PrimEventArgs.Prim" />, <see cref="P:OpenMetaverse.PrimEventArgs.Simulator" /> and 12595 The following code example shows the process to subscribe to the <see cref="E:OpenMetaverse.SoundManager.AttachedSound"/> event
13979 <see cref="P:OpenMetaverse.ObjectPropertiesEventArgs.Properties" /> 12596 and a stub to handle the data passed from the simulator
13980 properties to display new attachments and send a request for additional properties containing the name of the
13981 attachment then display it on the <see cref="T:System.Console" /> window.
13982 <code> 12597 <code>
13983 // Subscribe to the event that provides additional primitive details 12598 // Subscribe to the AttachedSound event
13984 Client.Objects.ObjectProperties += Objects_ObjectProperties; 12599 Client.Sound.AttachedSound += Sound_AttachedSound;
13985 // handle the properties data that arrives 12600
13986 private void Objects_ObjectProperties(object sender, ObjectPropertiesEventArgs e) 12601 // process the data raised in the event here
13987 { 12602 private void Sound_AttachedSound(object sender, AttachedSoundEventArgs e)
13988 Console.WriteLine("Primitive Properties: {0} Name is {1}", e.Properties.ObjectID, e.Properties.Name); 12603 {
13989 } 12604 // ... Process AttachedSoundEventArgs here ...
13990 </code></example> 12605 }
13991 </member> 12606 </code>
13992 <member name="M:OpenMetaverse.ObjectPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ObjectProperties)"> 12607 </example>
13993 <summary>
13994 Construct a new instance of the ObjectPropertiesEventArgs class
13995 </summary>
13996 <param name="simulator">The simulator the object is located</param>
13997 <param name="props">The primitive Properties</param>
13998 </member>
13999 <member name="P:OpenMetaverse.ObjectPropertiesEventArgs.Simulator">
14000 <summary>Get the simulator the object is located</summary>
14001 </member>
14002 <member name="P:OpenMetaverse.ObjectPropertiesEventArgs.Properties">
14003 <summary>Get the primitive properties</summary>
14004 </member>
14005 <member name="T:OpenMetaverse.ObjectPropertiesUpdatedEventArgs">
14006 <summary>Provides additional primitive data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated" /> event</summary>
14007 <remarks>
14008 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated" /> event occurs when the simulator sends
14009 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> containing additional details for a Primitive or Foliage data that is currently
14010 being tracked in the <see cref="F:OpenMetaverse.Simulator.ObjectsPrimitives" /> dictionary</para>
14011 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated" /> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)" /> request is
14012 made and <see cref="F:OpenMetaverse.Settings.OBJECT_TRACKING" /> is enabled</para>
14013 </remarks>
14014 </member>
14015 <member name="M:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive,OpenMetaverse.Primitive.ObjectProperties)">
14016 <summary>
14017 Construct a new instance of the ObjectPropertiesUpdatedEvenrArgs class
14018 </summary>
14019 <param name="simulator">The simulator the object is located</param>
14020 <param name="prim">The Primitive</param>
14021 <param name="props">The primitive Properties</param>
14022 </member>
14023 <member name="P:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.Simulator">
14024 <summary>Get the simulator the object is located</summary>
14025 </member>
14026 <member name="P:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.Prim">
14027 <summary>Get the primitive details</summary>
14028 </member>
14029 <member name="P:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.Properties">
14030 <summary>Get the primitive properties</summary>
14031 </member>
14032 <member name="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs">
14033 <summary>Provides additional primitive data, permissions and sale info for the <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily" /> event</summary>
14034 <remarks>
14035 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily" /> event occurs when the simulator sends
14036 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket" /> containing additional details for a Primitive, Foliage data or Attachment. This includes
14037 Permissions, Sale info, and other basic details on an object</para>
14038 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties" /> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean)" /> request is
14039 made, the viewer equivalent is hovering the mouse cursor over an object</para>
14040 </remarks>
14041 </member>
14042 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Simulator">
14043 <summary>Get the simulator the object is located</summary>
14044 </member>
14045 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Properties">
14046 <summary>
14047 </summary>
14048 </member>
14049 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Type">
14050 <summary>
14051 </summary>
14052 </member>
14053 <member name="T:OpenMetaverse.TerseObjectUpdateEventArgs">
14054 <summary>Provides primitive data containing updated location, velocity, rotation, textures for the <see cref="E:OpenMetaverse.ObjectManager.TerseObjectUpdate" /> event</summary>
14055 <remarks>
14056 <para>The <see cref="E:OpenMetaverse.ObjectManager.TerseObjectUpdate" /> event occurs when the simulator sends updated location, velocity, rotation, etc</para>
14057 </remarks>
14058 </member>
14059 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Simulator">
14060 <summary>Get the simulator the object is located</summary>
14061 </member>
14062 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Prim">
14063 <summary>Get the primitive details</summary>
14064 </member>
14065 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Update">
14066 <summary>
14067 </summary>
14068 </member>
14069 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.TimeDilation">
14070 <summary>
14071 </summary>
14072 </member>
14073 <member name="T:OpenMetaverse.ObjectDataBlockUpdateEventArgs">
14074 <summary>
14075 </summary>
14076 </member>
14077 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Simulator">
14078 <summary>Get the simulator the object is located</summary>
14079 </member>
14080 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Prim">
14081 <summary>Get the primitive details</summary>
14082 </member>
14083 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.ConstructionData">
14084 <summary>
14085 </summary>
14086 </member>
14087 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Block">
14088 <summary>
14089 </summary>
14090 </member>
14091 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Update">
14092 <summary>
14093 </summary>
14094 </member> 12608 </member>
14095 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.NameValues"> 12609 <member name="M:OpenMetaverse.AttachedSoundEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,OpenMetaverse.SoundFlags)">
14096 <summary> 12610 <summary>
12611 Construct a new instance of the SoundTriggerEventArgs class
14097 </summary> 12612 </summary>
12613 <param name="sim">Simulator where the event originated</param>
12614 <param name="soundID">The sound asset id</param>
12615 <param name="ownerID">The ID of the owner</param>
12616 <param name="objectID">The ID of the object</param>
12617 <param name="gain">The volume level</param>
12618 <param name="flags">The <see cref="T:OpenMetaverse.SoundFlags"/></param>
14098 </member> 12619 </member>
14099 <member name="T:OpenMetaverse.KillObjectEventArgs"> 12620 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Simulator">
14100 <summary>Provides notification when an Avatar, Object or Attachment is DeRezzed or moves out of the avatars view for the 12621 <summary>Simulator where the event originated</summary>
14101 <see cref="E:OpenMetaverse.ObjectManager.KillObject" /> event</summary>
14102 </member> 12622 </member>
14103 <member name="P:OpenMetaverse.KillObjectEventArgs.Simulator"> 12623 <member name="P:OpenMetaverse.AttachedSoundEventArgs.SoundID">
14104 <summary>Get the simulator the object is located</summary> 12624 <summary>Get the sound asset id</summary>
14105 </member> 12625 </member>
14106 <member name="P:OpenMetaverse.KillObjectEventArgs.ObjectLocalID"> 12626 <member name="P:OpenMetaverse.AttachedSoundEventArgs.OwnerID">
14107 <summary>The LocalID of the object</summary> 12627 <summary>Get the ID of the owner</summary>
14108 </member> 12628 </member>
14109 <member name="T:OpenMetaverse.AvatarSitChangedEventArgs"> 12629 <member name="P:OpenMetaverse.AttachedSoundEventArgs.ObjectID">
14110 <summary> 12630 <summary>Get the ID of the Object</summary>
14111 Provides updates sit position data
14112 </summary>
14113 </member> 12631 </member>
14114 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.Simulator"> 12632 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Gain">
14115 <summary>Get the simulator the object is located</summary> 12633 <summary>Get the volume level</summary>
14116 </member> 12634 </member>
14117 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.Avatar"> 12635 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Flags">
14118 <summary> 12636 <summary>Get the <see cref="T:OpenMetaverse.SoundFlags"/></summary>
14119 </summary>
14120 </member> 12637 </member>
14121 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.SittingOn"> 12638 <member name="T:OpenMetaverse.AttachedSoundGainChangeEventArgs">
14122 <summary> 12639 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.AttachedSoundGainChange"/> event</summary>
14123 </summary> 12640 <remarks>The <see cref="E:OpenMetaverse.SoundManager.AttachedSoundGainChange"/> event occurs when an attached sound
12641 changes its volume level</remarks>
14124 </member> 12642 </member>
14125 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.OldSeat"> 12643 <member name="M:OpenMetaverse.AttachedSoundGainChangeEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Single)">
14126 <summary> 12644 <summary>
12645 Construct a new instance of the AttachedSoundGainChangedEventArgs class
14127 </summary> 12646 </summary>
12647 <param name="sim">Simulator where the event originated</param>
12648 <param name="objectID">The ID of the Object</param>
12649 <param name="gain">The new volume level</param>
14128 </member> 12650 </member>
14129 <member name="T:OpenMetaverse.PayPriceReplyEventArgs"> 12651 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.Simulator">
14130 <summary> 12652 <summary>Simulator where the event originated</summary>
14131 </summary>
14132 </member> 12653 </member>
14133 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.Simulator"> 12654 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.ObjectID">
14134 <summary>Get the simulator the object is located</summary> 12655 <summary>Get the ID of the Object</summary>
14135 </member> 12656 </member>
14136 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.ObjectID"> 12657 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.Gain">
14137 <summary> 12658 <summary>Get the volume level</summary>
14138 </summary>
14139 </member> 12659 </member>
14140 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.DefaultPrice"> 12660 <member name="T:OpenMetaverse.SoundTriggerEventArgs">
14141 <summary> 12661 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.SoundTrigger"/> event</summary>
14142 </summary> 12662 <remarks><para>The <see cref="E:OpenMetaverse.SoundManager.SoundTrigger"/> event occurs when the simulator forwards
12663 a request made by yourself or another agent to play either an asset sound or a built in sound</para>
12664
12665 <para>Requests to play sounds where the <see cref="P:OpenMetaverse.SoundTriggerEventArgs.SoundID"/> is not one of the built-in
12666 <see cref="T:OpenMetaverse.Sounds"/> will require sending a request to download the sound asset before it can be played</para>
12667 </remarks>
12668 <example>
12669 The following code example uses the <see cref="P:OpenMetaverse.SoundTriggerEventArgs.OwnerID"/>, <see cref="P:OpenMetaverse.SoundTriggerEventArgs.SoundID"/>
12670 and <see cref="P:OpenMetaverse.SoundTriggerEventArgs.Gain"/>
12671 properties to display some information on a sound request on the <see cref="T:System.Console"/> window.
12672 <code>
12673 // subscribe to the event
12674 Client.Sound.SoundTrigger += Sound_SoundTrigger;
12675
12676 // play the pre-defined BELL_TING sound
12677 Client.Sound.SendSoundTrigger(Sounds.BELL_TING);
12678
12679 // handle the response data
12680 private void Sound_SoundTrigger(object sender, SoundTriggerEventArgs e)
12681 {
12682 Console.WriteLine("{0} played the sound {1} at volume {2}",
12683 e.OwnerID, e.SoundID, e.Gain);
12684 }
12685 </code>
12686 </example>
14143 </member> 12687 </member>
14144 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.ButtonPrices"> 12688 <member name="M:OpenMetaverse.SoundTriggerEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,System.UInt64,OpenMetaverse.Vector3)">
14145 <summary> 12689 <summary>
12690 Construct a new instance of the SoundTriggerEventArgs class
14146 </summary> 12691 </summary>
12692 <param name="sim">Simulator where the event originated</param>
12693 <param name="soundID">The sound asset id</param>
12694 <param name="ownerID">The ID of the owner</param>
12695 <param name="objectID">The ID of the object</param>
12696 <param name="parentID">The ID of the objects parent</param>
12697 <param name="gain">The volume level</param>
12698 <param name="regionHandle">The regionhandle</param>
12699 <param name="position">The source position</param>
14147 </member> 12700 </member>
14148 <member name="P:OpenMetaverse.ObjectMediaEventArgs.Success"> 12701 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Simulator">
14149 <summary> 12702 <summary>Simulator where the event originated</summary>
14150 Indicates if the operation was successful
14151 </summary>
14152 </member> 12703 </member>
14153 <member name="P:OpenMetaverse.ObjectMediaEventArgs.Version"> 12704 <member name="P:OpenMetaverse.SoundTriggerEventArgs.SoundID">
14154 <summary> 12705 <summary>Get the sound asset id</summary>
14155 Media version string
14156 </summary>
14157 </member> 12706 </member>
14158 <member name="P:OpenMetaverse.ObjectMediaEventArgs.FaceMedia"> 12707 <member name="P:OpenMetaverse.SoundTriggerEventArgs.OwnerID">
14159 <summary> 12708 <summary>Get the ID of the owner</summary>
14160 Array of media entries indexed by face number
14161 </summary>
14162 </member> 12709 </member>
14163 <member name="T:OpenMetaverse.PhysicsPropertiesEventArgs"> 12710 <member name="P:OpenMetaverse.SoundTriggerEventArgs.ObjectID">
14164 <summary> 12711 <summary>Get the ID of the Object</summary>
14165 Set when simulator sends us infomation on primitive's physical properties
14166 </summary>
14167 </member> 12712 </member>
14168 <member name="M:OpenMetaverse.PhysicsPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive.PhysicsProperties)"> 12713 <member name="P:OpenMetaverse.SoundTriggerEventArgs.ParentID">
14169 <summary> 12714 <summary>Get the ID of the objects parent</summary>
14170 Constructor
14171 </summary>
14172 <param name="sim">Simulator where the message originated</param>
14173 <param name="props">Updated physical properties</param>
14174 </member> 12715 </member>
14175 <member name="F:OpenMetaverse.PhysicsPropertiesEventArgs.Simulator"> 12716 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Gain">
14176 <summary>Simulator where the message originated</summary> 12717 <summary>Get the volume level</summary>
14177 </member> 12718 </member>
14178 <member name="F:OpenMetaverse.PhysicsPropertiesEventArgs.PhysicsProperties"> 12719 <member name="P:OpenMetaverse.SoundTriggerEventArgs.RegionHandle">
14179 <summary>Updated physical properties</summary> 12720 <summary>Get the regionhandle</summary>
14180 </member> 12721 </member>
14181 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor"> 12722 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Position">
14182 <summary> 12723 <summary>Get the source position</summary>
14183 Create an allocated UDP packet buffer for receiving a packet
14184 </summary>
14185 </member> 12724 </member>
14186 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor(System.Net.IPEndPoint)"> 12725 <member name="T:OpenMetaverse.PreloadSoundEventArgs">
14187 <summary> 12726 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance"/> event</summary>
14188 Create an allocated UDP packet buffer for sending a packet 12727 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance"/> event occurs when the simulator sends
14189 </summary> 12728 the appearance data for an avatar</remarks>
14190 <param name="endPoint">EndPoint of the remote host</param> 12729 <example>
12730 The following code example uses the <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID"/> and <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams"/>
12731 properties to display the selected shape of an avatar on the <see cref="T:System.Console"/> window.
12732 <code>
12733 // subscribe to the event
12734 Client.Avatars.AvatarAppearance += Avatars_AvatarAppearance;
12735
12736 // handle the data when the event is raised
12737 void Avatars_AvatarAppearance(object sender, AvatarAppearanceEventArgs e)
12738 {
12739 Console.WriteLine("The Agent {0} is using a {1} shape.", e.AvatarID, (e.VisualParams[31] &gt; 0) : "male" ? "female")
12740 }
12741 </code>
12742 </example>
14191 </member> 12743 </member>
14192 <member name="M:OpenMetaverse.UDPPacketBuffer.#ctor(System.Net.IPEndPoint,System.Int32)"> 12744 <member name="M:OpenMetaverse.PreloadSoundEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
14193 <summary> 12745 <summary>
14194 Create an allocated UDP packet buffer for sending a packet 12746 Construct a new instance of the PreloadSoundEventArgs class
14195 </summary> 12747 </summary>
14196 <param name="endPoint">EndPoint of the remote host</param> 12748 <param name="sim">Simulator where the event originated</param>
14197 <param name="bufferSize">Size of the buffer to allocate for packet data</param> 12749 <param name="soundID">The sound asset id</param>
12750 <param name="ownerID">The ID of the owner</param>
12751 <param name="objectID">The ID of the object</param>
14198 </member> 12752 </member>
14199 <member name="F:OpenMetaverse.UDPPacketBuffer.BUFFER_SIZE"> 12753 <member name="P:OpenMetaverse.PreloadSoundEventArgs.Simulator">
14200 <summary>Size of the byte array used to store raw packet data</summary> 12754 <summary>Simulator where the event originated</summary>
14201 </member> 12755 </member>
14202 <member name="F:OpenMetaverse.UDPPacketBuffer.Data"> 12756 <member name="P:OpenMetaverse.PreloadSoundEventArgs.SoundID">
14203 <summary>Raw packet data buffer</summary> 12757 <summary>Get the sound asset id</summary>
14204 </member> 12758 </member>
14205 <member name="F:OpenMetaverse.UDPPacketBuffer.DataLength"> 12759 <member name="P:OpenMetaverse.PreloadSoundEventArgs.OwnerID">
14206 <summary>Length of the data to transmit</summary> 12760 <summary>Get the ID of the owner</summary>
14207 </member> 12761 </member>
14208 <member name="F:OpenMetaverse.UDPPacketBuffer.RemoteEndPoint"> 12762 <member name="P:OpenMetaverse.PreloadSoundEventArgs.ObjectID">
14209 <summary>EndPoint of the remote host</summary> 12763 <summary>Get the ID of the Object</summary>
14210 </member> 12764 </member>
14211 <member name="T:OpenMetaverse.PacketBufferPool"> 12765 <member name="F:OpenMetaverse.Voice.VoicePosition.Position">
14212 <summary> 12766 <summary>Positional vector of the users position</summary>
14213 Object pool for packet buffers. This is used to allocate memory for all
14214 incoming and outgoing packets, and zerocoding buffers for those packets
14215 </summary>
14216 </member> 12767 </member>
14217 <member name="M:OpenMetaverse.PacketBufferPool.#ctor(System.Net.IPEndPoint,System.Int32,System.Int32)"> 12768 <member name="F:OpenMetaverse.Voice.VoicePosition.Velocity">
14218 <summary> 12769 <summary>Velocity vector of the position</summary>
14219 Initialize the object pool in client mode
14220 </summary>
14221 <param name="endPoint">Server to connect to</param>
14222 <param name="itemsPerSegment">
14223 </param>
14224 <param name="minSegments">
14225 </param>
14226 </member> 12770 </member>
14227 <member name="M:OpenMetaverse.PacketBufferPool.#ctor(System.Int32,System.Int32)"> 12771 <member name="F:OpenMetaverse.Voice.VoicePosition.AtOrientation">
14228 <summary> 12772 <summary>At Orientation (X axis) of the position</summary>
14229 Initialize the object pool in server mode
14230 </summary>
14231 <param name="itemsPerSegment">
14232 </param>
14233 <param name="minSegments">
14234 </param>
14235 </member> 12773 </member>
14236 <member name="M:OpenMetaverse.PacketBufferPool.GetObjectInstance"> 12774 <member name="F:OpenMetaverse.Voice.VoicePosition.UpOrientation">
14237 <summary> 12775 <summary>Up Orientation (Y axis) of the position</summary>
14238 Returns a packet buffer with EndPoint set if the buffer is in
14239 client mode, or with EndPoint set to null in server mode
14240 </summary>
14241 <returns>Initialized UDPPacketBuffer object</returns>
14242 </member> 12776 </member>
14243 <member name="M:OpenMetaverse.Pool.#ctor"> 12777 <member name="F:OpenMetaverse.Voice.VoicePosition.LeftOrientation">
14244 <summary> 12778 <summary>Left Orientation (Z axis) of the position</summary>
14245 Default constructor
14246 </summary>
14247 </member> 12779 </member>
14248 <member name="M:OpenMetaverse.Pool.CheckOut"> 12780 <member name="T:OpenMetaverse.Rendering.FacetedMesh">
14249 <summary> 12781 <summary>
14250 Check a packet buffer out of the pool 12782 Contains all mesh faces that belong to a prim
14251 </summary> 12783 </summary>
14252 <returns>A packet buffer object</returns>
14253 </member> 12784 </member>
14254 <member name="P:OpenMetaverse.WrappedObject`1.Instance"> 12785 <member name="F:OpenMetaverse.Rendering.FacetedMesh.Faces">
14255 <summary> 12786 <summary>List of primitive faces</summary>
14256 Returns an instance of the class that has been checked out of the Object Pool.
14257 </summary>
14258 </member> 12787 </member>
14259 <member name="M:OpenMetaverse.WrappedObject`1.Dispose"> 12788 <member name="M:OpenMetaverse.Rendering.FacetedMesh.TryDecodeFromAsset(OpenMetaverse.Primitive,OpenMetaverse.Assets.AssetMesh,OpenMetaverse.Rendering.DetailLevel,OpenMetaverse.Rendering.FacetedMesh@)">
14260 <summary> 12789 <summary>
14261 Checks the instance back into the object pool 12790 Decodes mesh asset into FacetedMesh
14262 </summary> 12791 </summary>
12792 <param name="prim">Mesh primitive</param>
12793 <param name="meshAsset">Asset retrieved from the asset server</param>
12794 <param name="LOD">Level of detail</param>
12795 <param name="mesh">Resulting decoded FacetedMesh</param>
12796 <returns>True if mesh asset decoding was successful</returns>
14263 </member> 12797 </member>
14264 <member name="M:OpenMetaverse.ObjectPoolBase`1.#ctor"> 12798 <member name="T:OpenMetaverse.Assets.GestureStepType">
14265 <summary> 12799 <summary>
14266 Creates a new instance of the ObjectPoolBase class. Initialize MUST be called 12800 Type of gesture step
14267 after using this constructor.
14268 </summary> 12801 </summary>
14269 </member> 12802 </member>
14270 <member name="M:OpenMetaverse.ObjectPoolBase`1.#ctor(System.Int32,System.Int32,System.Boolean,System.Int32)"> 12803 <member name="T:OpenMetaverse.Assets.GestureStep">
14271 <summary> 12804 <summary>
14272 Creates a new instance of the ObjectPool Base class. 12805 Base class for gesture steps
14273 </summary> 12806 </summary>
14274 <param name="itemsPerSegment">The object pool is composed of segments, which
14275 are allocated whenever the size of the pool is exceeded. The number of items
14276 in a segment should be large enough that allocating a new segmeng is a rare
14277 thing. For example, on a server that will have 10k people logged in at once,
14278 the receive buffer object pool should have segment sizes of at least 1000
14279 byte arrays per segment.
14280 </param>
14281 <param name="minimumSegmentCount">The minimun number of segments that may exist.</param>
14282 <param name="gcOnPoolGrowth">Perform a full GC.Collect whenever a segment is allocated, and then again after allocation to compact the heap.</param>
14283 <param name="cleanupFrequenceMS">The frequency which segments are checked to see if they're eligible for cleanup.</param>
14284 </member> 12807 </member>
14285 <member name="P:OpenMetaverse.ObjectPoolBase`1.TotalSegments"> 12808 <member name="P:OpenMetaverse.Assets.GestureStep.GestureStepType">
14286 <summary> 12809 <summary>
14287 The total number of segments created. Intended to be used by the Unit Tests. 12810 Retururns what kind of gesture step this is
14288 </summary> 12811 </summary>
14289 </member> 12812 </member>
14290 <member name="P:OpenMetaverse.ObjectPoolBase`1.ItemsPerSegment"> 12813 <member name="T:OpenMetaverse.Assets.GestureStepAnimation">
14291 <summary> 12814 <summary>
14292 The number of items that are in a segment. Items in a segment 12815 Describes animation step of a gesture
14293 are all allocated at the same time, and are hopefully close to
14294 each other in the managed heap.
14295 </summary> 12816 </summary>
14296 </member> 12817 </member>
14297 <member name="P:OpenMetaverse.ObjectPoolBase`1.MinimumSegmentCount"> 12818 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.AnimationStart">
14298 <summary> 12819 <summary>
14299 The minimum number of segments. When segments are reclaimed, 12820 If true, this step represents start of animation, otherwise animation stop
14300 this number of segments will always be left alone. These
14301 segments are allocated at startup.
14302 </summary> 12821 </summary>
14303 </member> 12822 </member>
14304 <member name="P:OpenMetaverse.ObjectPoolBase`1.MinimumSegmentAgePriorToCleanup"> 12823 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.ID">
14305 <summary> 12824 <summary>
14306 The age a segment must be before it's eligible for cleanup. 12825 Animation asset <see cref="T:OpenMetaverse.UUID"/>
14307 This is used to prevent thrash, and typical values are in
14308 the 5 minute range.
14309 </summary> 12826 </summary>
14310 </member> 12827 </member>
14311 <member name="P:OpenMetaverse.ObjectPoolBase`1.CleanupFrequencyMilliseconds"> 12828 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.Name">
14312 <summary> 12829 <summary>
14313 The frequence which the cleanup thread runs. This is typically 12830 Animation inventory name
14314 expected to be in the 5 minute range.
14315 </summary> 12831 </summary>
14316 </member> 12832 </member>
14317 <member name="M:OpenMetaverse.ObjectPoolBase`1.ForceCleanup"> 12833 <member name="P:OpenMetaverse.Assets.GestureStepAnimation.GestureStepType">
14318 <summary> 12834 <summary>
14319 Forces the segment cleanup algorithm to be run. This method is intended 12835 Returns what kind of gesture step this is
14320 primarly for use from the Unit Test libraries.
14321 </summary> 12836 </summary>
14322 </member> 12837 </member>
14323 <member name="M:OpenMetaverse.ObjectPoolBase`1.GetObjectInstance"> 12838 <member name="T:OpenMetaverse.Assets.GestureStepSound">
14324 <summary> 12839 <summary>
14325 Responsible for allocate 1 instance of an object that will be stored in a segment. 12840 Describes sound step of a gesture
14326 </summary> 12841 </summary>
14327 <returns>An instance of whatever objec the pool is pooling.</returns>
14328 </member> 12842 </member>
14329 <member name="M:OpenMetaverse.ObjectPoolBase`1.CheckIn(OpenMetaverse.ObjectPoolSegment{`0},`0)"> 12843 <member name="F:OpenMetaverse.Assets.GestureStepSound.ID">
14330 <summary> 12844 <summary>
14331 Checks in an instance of T owned by the object pool. This method is only intended to be called 12845 Sound asset <see cref="T:OpenMetaverse.UUID"/>
14332 by the <c>WrappedObject</c> class.
14333 </summary> 12846 </summary>
14334 <param name="owningSegment">The segment from which the instance is checked out.</param>
14335 <param name="instance">The instance of <c>T</c> to check back into the segment.</param>
14336 </member> 12847 </member>
14337 <member name="M:OpenMetaverse.ObjectPoolBase`1.CheckOut"> 12848 <member name="F:OpenMetaverse.Assets.GestureStepSound.Name">
14338 <summary> 12849 <summary>
14339 Checks an instance of <c>T</c> from the pool. If the pool is not sufficient to 12850 Sound inventory name
14340 allow the checkout, a new segment is created.
14341 </summary> 12851 </summary>
14342 <returns>A <c>WrappedObject</c> around the instance of <c>T</c>. To check
14343 the instance back into the segment, be sureto dispose the WrappedObject
14344 when finished. </returns>
14345 </member> 12852 </member>
14346 <member name="T:OpenMetaverse.DictionaryEventAction"> 12853 <member name="P:OpenMetaverse.Assets.GestureStepSound.GestureStepType">
14347 <summary> 12854 <summary>
12855 Returns what kind of gesture step this is
14348 </summary> 12856 </summary>
14349 </member> 12857 </member>
14350 <member name="F:OpenMetaverse.DictionaryEventAction.Add"> 12858 <member name="T:OpenMetaverse.Assets.GestureStepChat">
14351 <summary> 12859 <summary>
12860 Describes sound step of a gesture
14352 </summary> 12861 </summary>
14353 </member> 12862 </member>
14354 <member name="F:OpenMetaverse.DictionaryEventAction.Remove"> 12863 <member name="F:OpenMetaverse.Assets.GestureStepChat.Text">
14355 <summary> 12864 <summary>
12865 Text to output in chat
14356 </summary> 12866 </summary>
14357 </member> 12867 </member>
14358 <member name="F:OpenMetaverse.DictionaryEventAction.Change"> 12868 <member name="P:OpenMetaverse.Assets.GestureStepChat.GestureStepType">
14359 <summary> 12869 <summary>
12870 Returns what kind of gesture step this is
14360 </summary> 12871 </summary>
14361 </member> 12872 </member>
14362 <member name="T:OpenMetaverse.ObservableDictionary`2"> 12873 <member name="T:OpenMetaverse.Assets.GestureStepWait">
14363 <summary> 12874 <summary>
14364 The ObservableDictionary class is used for storing key/value pairs. It has methods for firing 12875 Describes sound step of a gesture
14365 events to subscribers when items are added, removed, or changed.
14366 </summary> 12876 </summary>
14367 <typeparam name="TKey">Key <see langword="Tkey" /></typeparam>
14368 <typeparam name="TValue">Value <see langword="TValue" /></typeparam>
14369 </member> 12877 </member>
14370 <member name="M:OpenMetaverse.ObservableDictionary`2.#ctor"> 12878 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitForAnimation">
14371 <summary> 12879 <summary>
14372 Initializes a new instance of the <seealso cref="T:ObservableDictionary" /> Class 12880 If true in this step we wait for all animations to finish
14373 with the specified key/value, has the default initial capacity.
14374 </summary> 12881 </summary>
14375 <example>
14376 <code>
14377 // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value.
14378 public ObservableDictionary&lt;string, int&gt; testDict = new ObservableDictionary&lt;string, int&gt;();
14379 </code>
14380 </example>
14381 </member> 12882 </member>
14382 <member name="M:OpenMetaverse.ObservableDictionary`2.#ctor(System.Int32)"> 12883 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitForTime">
14383 <summary> 12884 <summary>
14384 Initializes a new instance of the <seealso cref="T:OpenMetaverse.ObservableDictionary" /> Class 12885 If true gesture player should wait for the specified amount of time
14385 with the specified key/value, With its initial capacity specified.
14386 </summary> 12886 </summary>
14387 <param name="capacity">Initial size of dictionary</param>
14388 <example>
14389 <code>
14390 // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
14391 // initially allocated room for 10 entries.
14392 public ObservableDictionary&lt;string, int&gt; testDict = new ObservableDictionary&lt;string, int&gt;(10);
14393 </code>
14394 </example>
14395 </member> 12887 </member>
14396 <member name="F:OpenMetaverse.ObservableDictionary`2.Delegates"> 12888 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitTime">
14397 <summary> 12889 <summary>
14398 A dictionary of callbacks to fire when specified action occurs 12890 Time in seconds to wait if WaitForAnimation is false
14399 </summary> 12891 </summary>
14400 </member> 12892 </member>
14401 <member name="F:OpenMetaverse.ObservableDictionary`2.Dictionary"> 12893 <member name="P:OpenMetaverse.Assets.GestureStepWait.GestureStepType">
14402 <summary>Internal dictionary that this class wraps around. Do not
14403 modify or enumerate the contents of this dictionary without locking</summary>
14404 </member>
14405 <member name="P:OpenMetaverse.ObservableDictionary`2.Item(`0)">
14406 <summary> 12894 <summary>
14407 Indexer for the dictionary 12895 Returns what kind of gesture step this is
14408 </summary> 12896 </summary>
14409 <param name="key">The key</param>
14410 <returns>The value</returns>
14411 </member>
14412 <member name="P:OpenMetaverse.ObservableDictionary`2.Count">
14413 <summary>
14414 Gets the number of Key/Value pairs contained in the <seealso cref="T:ObservableDictionary" /></summary>
14415 </member> 12897 </member>
14416 <member name="M:OpenMetaverse.ObservableDictionary`2.AddDelegate(OpenMetaverse.DictionaryEventAction,OpenMetaverse.DictionaryChangeCallback)"> 12898 <member name="T:OpenMetaverse.Assets.GestureStepEOF">
14417 <summary> 12899 <summary>
14418 Register a callback to be fired when an action occurs 12900 Describes the final step of a gesture
14419 </summary> 12901 </summary>
14420 <param name="action">The action</param>
14421 <param name="callback">The callback to fire</param>
14422 </member> 12902 </member>
14423 <member name="M:OpenMetaverse.ObservableDictionary`2.RemoveDelegate(OpenMetaverse.DictionaryEventAction,OpenMetaverse.DictionaryChangeCallback)"> 12903 <member name="P:OpenMetaverse.Assets.GestureStepEOF.GestureStepType">
14424 <summary> 12904 <summary>
14425 Unregister a callback 12905 Returns what kind of gesture step this is
14426 </summary> 12906 </summary>
14427 <param name="action">The action</param>
14428 <param name="callback">The callback to fire</param>
14429 </member> 12907 </member>
14430 <member name="M:OpenMetaverse.ObservableDictionary`2.FireChangeEvent(OpenMetaverse.DictionaryEventAction,System.Collections.DictionaryEntry)"> 12908 <member name="T:OpenMetaverse.Assets.AssetGesture">
14431 <summary> 12909 <summary>
12910 Represents a sequence of animations, sounds, and chat actions
14432 </summary> 12911 </summary>
14433 <param name="action">
14434 </param>
14435 <param name="entry">
14436 </param>
14437 </member> 12912 </member>
14438 <member name="M:OpenMetaverse.ObservableDictionary`2.TryGetValue(`0,`1@)"> 12913 <member name="F:OpenMetaverse.Assets.AssetGesture.TriggerKey">
14439 <summary> 12914 <summary>
14440 Try to get entry from the <seealso cref="!:ObservableDictionary" /> with specified key 12915 Keyboard key that triggers the gestyre
14441 </summary> 12916 </summary>
14442 <param name="key">Key to use for lookup</param>
14443 <param name="value">Value returned</param>
14444 <returns>
14445 <see langword="true" /> if specified key exists, <see langword="false" /> if not found</returns>
14446 <example>
14447 <code>
14448 // find your avatar using the Simulator.ObjectsAvatars ObservableDictionary:
14449 Avatar av;
14450 if (Client.Network.CurrentSim.ObjectsAvatars.TryGetValue(Client.Self.AgentID, out av))
14451 Console.WriteLine("Found Avatar {0}", av.Name);
14452 </code>
14453 <seealso cref="F:OpenMetaverse.Simulator.ObjectsAvatars" />
14454 </example>
14455 </member> 12917 </member>
14456 <member name="M:OpenMetaverse.ObservableDictionary`2.Find(System.Predicate{`1})"> 12918 <member name="F:OpenMetaverse.Assets.AssetGesture.TriggerKeyMask">
14457 <summary> 12919 <summary>
14458 Finds the specified match. 12920 Modifier to the trigger key
14459 </summary> 12921 </summary>
14460 <param name="match">The match.</param>
14461 <returns>Matched value</returns>
14462 <example>
14463 <code>
14464 // use a delegate to find a prim in the ObjectsPrimitives ObservableDictionary
14465 // with the ID 95683496
14466 uint findID = 95683496;
14467 Primitive findPrim = sim.ObjectsPrimitives.Find(
14468 delegate(Primitive prim) { return prim.ID == findID; });
14469 </code>
14470 </example>
14471 </member>
14472 <member name="M:OpenMetaverse.ObservableDictionary`2.FindAll(System.Predicate{`1})">
14473 <summary>Find All items in an <seealso cref="T:ObservableDictionary" /></summary>
14474 <param name="match">return matching items.</param>
14475 <returns>a <seealso cref="T:System.Collections.Generic.List" /> containing found items.</returns>
14476 <example>
14477 Find All prims within 20 meters and store them in a List
14478 <code>
14479 int radius = 20;
14480 List&lt;Primitive&gt; prims = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
14481 delegate(Primitive prim) {
14482 Vector3 pos = prim.Position;
14483 return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
14484 }
14485 );
14486 </code></example>
14487 </member>
14488 <member name="M:OpenMetaverse.ObservableDictionary`2.FindAll(System.Predicate{`0})">
14489 <summary>Find All items in an <seealso cref="T:ObservableDictionary" /></summary>
14490 <param name="match">return matching keys.</param>
14491 <returns>a <seealso cref="T:System.Collections.Generic.List" /> containing found keys.</returns>
14492 <example>
14493 Find All keys which also exist in another dictionary
14494 <code>
14495 List&lt;UUID&gt; matches = myDict.FindAll(
14496 delegate(UUID id) {
14497 return myOtherDict.ContainsKey(id);
14498 }
14499 );
14500 </code></example>
14501 </member>
14502 <member name="M:OpenMetaverse.ObservableDictionary`2.ContainsKey(`0)">
14503 <summary>Check if Key exists in Dictionary</summary>
14504 <param name="key">Key to check for</param>
14505 <returns>
14506 <see langword="true" /> if found, <see langword="false" /> otherwise</returns>
14507 </member>
14508 <member name="M:OpenMetaverse.ObservableDictionary`2.ContainsValue(`1)">
14509 <summary>Check if Value exists in Dictionary</summary>
14510 <param name="value">Value to check for</param>
14511 <returns>
14512 <see langword="true" /> if found, <see langword="false" /> otherwise</returns>
14513 </member> 12922 </member>
14514 <member name="M:OpenMetaverse.ObservableDictionary`2.Add(`0,`1)"> 12923 <member name="F:OpenMetaverse.Assets.AssetGesture.Trigger">
14515 <summary>
14516 Adds the specified key to the dictionary, dictionary locking is not performed,
14517 <see cref="!:SafeAdd" /></summary>
14518 <param name="key">The key</param>
14519 <param name="value">The value</param>
14520 </member>
14521 <member name="M:OpenMetaverse.ObservableDictionary`2.Remove(`0)">
14522 <summary> 12924 <summary>
14523 Removes the specified key, dictionary locking is not performed 12925 String that triggers playing of the gesture sequence
14524 </summary> 12926 </summary>
14525 <param name="key">The key.</param>
14526 <returns>
14527 <see langword="true" /> if successful, <see langword="false" /> otherwise</returns>
14528 </member> 12927 </member>
14529 <member name="M:OpenMetaverse.ObservableDictionary`2.Clear"> 12928 <member name="F:OpenMetaverse.Assets.AssetGesture.ReplaceWith">
14530 <summary> 12929 <summary>
14531 Clear the contents of the dictionary 12930 Text that replaces trigger in chat once gesture is triggered
14532 </summary> 12931 </summary>
14533 </member> 12932 </member>
14534 <member name="M:OpenMetaverse.ObservableDictionary`2.GetEnumerator"> 12933 <member name="F:OpenMetaverse.Assets.AssetGesture.Sequence">
14535 <summary> 12934 <summary>
14536 Enumerator for iterating dictionary entries 12935 Sequence of gesture steps
14537 </summary> 12936 </summary>
14538 <returns>
14539 </returns>
14540 </member> 12937 </member>
14541 <member name="T:OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder"> 12938 <member name="M:OpenMetaverse.Assets.AssetGesture.#ctor">
14542 <summary> 12939 <summary>
14543 A custom decoder callback 12940 Constructs guesture asset
14544 </summary> 12941 </summary>
14545 <param name="fieldName">The key of the object</param>
14546 <param name="fieldData">the data to decode</param>
14547 <returns>A string represending the fieldData</returns>
14548 </member> 12942 </member>
14549 <member name="M:OpenMetaverse.Packets.PacketDecoder.AddCallback(System.String,OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder)"> 12943 <member name="M:OpenMetaverse.Assets.AssetGesture.#ctor(OpenMetaverse.UUID,System.Byte[])">
14550 <summary> 12944 <summary>
14551 Add a custom decoder callback 12945 Constructs guesture asset
14552 </summary> 12946 </summary>
14553 <param name="key">The key of the field to decode</param> 12947 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
14554 <param name="customPacketHandler">The custom decode handler</param> 12948 <param name="assetData">A byte array containing the raw asset data</param>
14555 </member> 12949 </member>
14556 <member name="M:OpenMetaverse.Packets.PacketDecoder.RemoveCustomHandler(System.String,OpenMetaverse.Packets.PacketDecoder.CustomPacketDecoder)"> 12950 <member name="M:OpenMetaverse.Assets.AssetGesture.Encode">
14557 <summary> 12951 <summary>
14558 Remove a custom decoder callback 12952 Encodes gesture asset suitable for uplaod
14559 </summary> 12953 </summary>
14560 <param name="key">The key of the field to decode</param>
14561 <param name="customPacketHandler">The custom decode handler</param>
14562 </member> 12954 </member>
14563 <member name="M:OpenMetaverse.Packets.PacketDecoder.PacketToString(OpenMetaverse.Packets.Packet)"> 12955 <member name="M:OpenMetaverse.Assets.AssetGesture.Decode">
14564 <summary> 12956 <summary>
14565 Creates a formatted string containing the values of a Packet 12957 Decodes gesture assset into play sequence
14566 </summary> 12958 </summary>
14567 <param name="packet">The Packet</param> 12959 <returns>true if the asset data was decoded successfully</returns>
14568 <returns>A formatted string of values of the nested items in the Packet object</returns>
14569 </member> 12960 </member>
14570 <member name="M:OpenMetaverse.Packets.PacketDecoder.MessageToString(System.Object,System.Int32)"> 12961 <member name="P:OpenMetaverse.Assets.AssetGesture.AssetType">
14571 <summary> 12962 <summary>
14572 Decode an IMessage object into a beautifully formatted string 12963 Returns asset type
14573 </summary> 12964 </summary>
14574 <param name="message">The IMessage object</param>
14575 <param name="recurseLevel">Recursion level (used for indenting)</param>
14576 <returns>A formatted string containing the names and values of the source object</returns>
14577 </member> 12965 </member>
14578 <member name="T:OpenMetaverse.ObjectReturnType"> 12966 <member name="T:OpenMetaverse.ObjectReturnType">
14579 <summary> 12967 <summary>
@@ -14581,8 +12969,7 @@
14581 </summary> 12969 </summary>
14582 </member> 12970 </member>
14583 <member name="F:OpenMetaverse.ObjectReturnType.None"> 12971 <member name="F:OpenMetaverse.ObjectReturnType.None">
14584 <summary> 12972 <summary></summary>
14585 </summary>
14586 </member> 12973 </member>
14587 <member name="F:OpenMetaverse.ObjectReturnType.Owner"> 12974 <member name="F:OpenMetaverse.ObjectReturnType.Owner">
14588 <summary>Return objects owned by parcel owner</summary> 12975 <summary>Return objects owned by parcel owner</summary>
@@ -14817,11 +13204,11 @@
14817 <summary>If Deeded, owner contributes required tier to group parcel is deeded to</summary> 13204 <summary>If Deeded, owner contributes required tier to group parcel is deeded to</summary>
14818 </member> 13205 </member>
14819 <member name="F:OpenMetaverse.ParcelFlags.SoundLocal"> 13206 <member name="F:OpenMetaverse.ParcelFlags.SoundLocal">
14820 <summary>Restrict sounds originating on this parcel to the 13207 <summary>Restrict sounds originating on this parcel to the
14821 parcel boundaries</summary> 13208 parcel boundaries</summary>
14822 </member> 13209 </member>
14823 <member name="F:OpenMetaverse.ParcelFlags.SellParcelObjects"> 13210 <member name="F:OpenMetaverse.ParcelFlags.SellParcelObjects">
14824 <summary>Objects on this parcel are sold when the land is 13211 <summary>Objects on this parcel are sold when the land is
14825 purchsaed</summary> 13212 purchsaed</summary>
14826 </member> 13213 </member>
14827 <member name="F:OpenMetaverse.ParcelFlags.AllowPublish"> 13214 <member name="F:OpenMetaverse.ParcelFlags.AllowPublish">
@@ -14846,7 +13233,7 @@
14846 <summary>Allow group-owned scripts to run</summary> 13233 <summary>Allow group-owned scripts to run</summary>
14847 </member> 13234 </member>
14848 <member name="F:OpenMetaverse.ParcelFlags.CreateGroupObjects"> 13235 <member name="F:OpenMetaverse.ParcelFlags.CreateGroupObjects">
14849 <summary>Allow object creation by group members or group 13236 <summary>Allow object creation by group members or group
14850 objects</summary> 13237 objects</summary>
14851 </member> 13238 </member>
14852 <member name="F:OpenMetaverse.ParcelFlags.AllowAPrimitiveEntry"> 13239 <member name="F:OpenMetaverse.ParcelFlags.AllowAPrimitiveEntry">
@@ -14961,12 +13348,12 @@
14961 <summary>Start the current media stream playing and stop when the end is reached</summary> 13348 <summary>Start the current media stream playing and stop when the end is reached</summary>
14962 </member> 13349 </member>
14963 <member name="F:OpenMetaverse.ParcelMediaCommand.Loop"> 13350 <member name="F:OpenMetaverse.ParcelMediaCommand.Loop">
14964 <summary>Start the current media stream playing, 13351 <summary>Start the current media stream playing,
14965 loop to the beginning when the end is reached and continue to play</summary> 13352 loop to the beginning when the end is reached and continue to play</summary>
14966 </member> 13353 </member>
14967 <member name="F:OpenMetaverse.ParcelMediaCommand.Texture"> 13354 <member name="F:OpenMetaverse.ParcelMediaCommand.Texture">
14968 <summary>Specifies the texture to replace with video</summary> 13355 <summary>Specifies the texture to replace with video</summary>
14969 <remarks>If passing the key of a texture, it must be explicitly typecast as a key, 13356 <remarks>If passing the key of a texture, it must be explicitly typecast as a key,
14970 not just passed within double quotes.</remarks> 13357 not just passed within double quotes.</remarks>
14971 </member> 13358 </member>
14972 <member name="F:OpenMetaverse.ParcelMediaCommand.URL"> 13359 <member name="F:OpenMetaverse.ParcelMediaCommand.URL">
@@ -14979,15 +13366,15 @@
14979 <summary>Specifies a single agent to apply the media command to</summary> 13366 <summary>Specifies a single agent to apply the media command to</summary>
14980 </member> 13367 </member>
14981 <member name="F:OpenMetaverse.ParcelMediaCommand.Unload"> 13368 <member name="F:OpenMetaverse.ParcelMediaCommand.Unload">
14982 <summary>Unloads the stream. While the stop command sets the texture to the first frame of the movie, 13369 <summary>Unloads the stream. While the stop command sets the texture to the first frame of the movie,
14983 unload resets it to the real texture that the movie was replacing.</summary> 13370 unload resets it to the real texture that the movie was replacing.</summary>
14984 </member> 13371 </member>
14985 <member name="F:OpenMetaverse.ParcelMediaCommand.AutoAlign"> 13372 <member name="F:OpenMetaverse.ParcelMediaCommand.AutoAlign">
14986 <summary>Turn on/off the auto align feature, similar to the auto align checkbox in the parcel media properties 13373 <summary>Turn on/off the auto align feature, similar to the auto align checkbox in the parcel media properties
14987 (NOT to be confused with the "align" function in the textures view of the editor!) Takes TRUE or FALSE as parameter.</summary> 13374 (NOT to be confused with the "align" function in the textures view of the editor!) Takes TRUE or FALSE as parameter.</summary>
14988 </member> 13375 </member>
14989 <member name="F:OpenMetaverse.ParcelMediaCommand.Type"> 13376 <member name="F:OpenMetaverse.ParcelMediaCommand.Type">
14990 <summary>Allows a Web page or image to be placed on a prim (1.19.1 RC0 and later only). 13377 <summary>Allows a Web page or image to be placed on a prim (1.19.1 RC0 and later only).
14991 Use "text/html" for HTML.</summary> 13378 Use "text/html" for HTML.</summary>
14992 </member> 13379 </member>
14993 <member name="F:OpenMetaverse.ParcelMediaCommand.Size"> 13380 <member name="F:OpenMetaverse.ParcelMediaCommand.Size">
@@ -15006,7 +13393,7 @@
15006 <summary>Global Key of record</summary> 13393 <summary>Global Key of record</summary>
15007 </member> 13394 </member>
15008 <member name="F:OpenMetaverse.ParcelInfo.OwnerID"> 13395 <member name="F:OpenMetaverse.ParcelInfo.OwnerID">
15009 <summary>Parcel Owners <seealso cref="T:OpenMetaverse.UUID" /></summary> 13396 <summary>Parcel Owners <seealso cref="T:OpenMetaverse.UUID"/></summary>
15010 </member> 13397 </member>
15011 <member name="F:OpenMetaverse.ParcelInfo.Name"> 13398 <member name="F:OpenMetaverse.ParcelInfo.Name">
15012 <summary>Name field of parcel, limited to 128 characters</summary> 13399 <summary>Name field of parcel, limited to 128 characters</summary>
@@ -15036,7 +13423,7 @@
15036 <summary>Name of simulator parcel is located in</summary> 13423 <summary>Name of simulator parcel is located in</summary>
15037 </member> 13424 </member>
15038 <member name="F:OpenMetaverse.ParcelInfo.SnapshotID"> 13425 <member name="F:OpenMetaverse.ParcelInfo.SnapshotID">
15039 <summary>Texture <seealso cref="T:OpenMetaverse.UUID" /> of parcels display picture</summary> 13426 <summary>Texture <seealso cref="T:OpenMetaverse.UUID"/> of parcels display picture</summary>
15040 </member> 13427 </member>
15041 <member name="F:OpenMetaverse.ParcelInfo.Dwell"> 13428 <member name="F:OpenMetaverse.ParcelInfo.Dwell">
15042 <summary>Float representing calculated traffic based on time spent on parcel by avatars</summary> 13429 <summary>Float representing calculated traffic based on time spent on parcel by avatars</summary>
@@ -15059,7 +13446,7 @@
15059 <summary>A boolean, if true the viewer should loop the media</summary> 13446 <summary>A boolean, if true the viewer should loop the media</summary>
15060 </member> 13447 </member>
15061 <member name="F:OpenMetaverse.ParcelMedia.MediaID"> 13448 <member name="F:OpenMetaverse.ParcelMedia.MediaID">
15062 <summary>The Asset UUID of the Texture which when applied to a 13449 <summary>The Asset UUID of the Texture which when applied to a
15063 primitive will display the media</summary> 13450 primitive will display the media</summary>
15064 </member> 13451 </member>
15065 <member name="F:OpenMetaverse.ParcelMedia.MediaURL"> 13452 <member name="F:OpenMetaverse.ParcelMedia.MediaURL">
@@ -15082,14 +13469,8 @@
15082 Parcel of land, a portion of virtual real estate in a simulator 13469 Parcel of land, a portion of virtual real estate in a simulator
15083 </summary> 13470 </summary>
15084 </member> 13471 </member>
15085 <member name="M:OpenMetaverse.Parcel.#ctor(System.Int32)">
15086 <summary>
15087 Defalt constructor
15088 </summary>
15089 <param name="localID">Local ID of this parcel</param>
15090 </member>
15091 <member name="F:OpenMetaverse.Parcel.SelfCount"> 13472 <member name="F:OpenMetaverse.Parcel.SelfCount">
15092 <summary>The total number of contiguous 4x4 meter blocks your agent owns within this parcel</summary> 13473 <summary>The total number of contiguous 4x4 meter blocks your agent owns within this parcel</summary>
15093 </member> 13474 </member>
15094 <member name="F:OpenMetaverse.Parcel.OtherCount"> 13475 <member name="F:OpenMetaverse.Parcel.OtherCount">
15095 <summary>The total number of contiguous 4x4 meter blocks contained in this parcel owned by a group or agent other than your own</summary> 13476 <summary>The total number of contiguous 4x4 meter blocks contained in this parcel owned by a group or agent other than your own</summary>
@@ -15107,8 +13488,7 @@
15107 <summary>Whether the land is deeded to a group or not</summary> 13488 <summary>Whether the land is deeded to a group or not</summary>
15108 </member> 13489 </member>
15109 <member name="F:OpenMetaverse.Parcel.AuctionID"> 13490 <member name="F:OpenMetaverse.Parcel.AuctionID">
15110 <summary> 13491 <summary></summary>
15111 </summary>
15112 </member> 13492 </member>
15113 <member name="F:OpenMetaverse.Parcel.ClaimDate"> 13493 <member name="F:OpenMetaverse.Parcel.ClaimDate">
15114 <summary>Date land was claimed</summary> 13494 <summary>Date land was claimed</summary>
@@ -15128,15 +13508,14 @@
15128 parcel</summary> 13508 parcel</summary>
15129 </member> 13509 </member>
15130 <member name="F:OpenMetaverse.Parcel.Bitmap"> 13510 <member name="F:OpenMetaverse.Parcel.Bitmap">
15131 <summary>Bitmap describing land layout in 4x4m squares across the 13511 <summary>Bitmap describing land layout in 4x4m squares across the
15132 entire region</summary> 13512 entire region</summary>
15133 </member> 13513 </member>
15134 <member name="F:OpenMetaverse.Parcel.Area"> 13514 <member name="F:OpenMetaverse.Parcel.Area">
15135 <summary>Total parcel land area</summary> 13515 <summary>Total parcel land area</summary>
15136 </member> 13516 </member>
15137 <member name="F:OpenMetaverse.Parcel.Status"> 13517 <member name="F:OpenMetaverse.Parcel.Status">
15138 <summary> 13518 <summary></summary>
15139 </summary>
15140 </member> 13519 </member>
15141 <member name="F:OpenMetaverse.Parcel.SimWideMaxPrims"> 13520 <member name="F:OpenMetaverse.Parcel.SimWideMaxPrims">
15142 <summary>Maximum primitives across the entire simulator owned by the same agent or group that owns this parcel that can be used</summary> 13521 <summary>Maximum primitives across the entire simulator owned by the same agent or group that owns this parcel that can be used</summary>
@@ -15156,7 +13535,7 @@
15156 for parcels owned by an individual this inicates the number of prims owned by the individual</summary> 13535 for parcels owned by an individual this inicates the number of prims owned by the individual</summary>
15157 </member> 13536 </member>
15158 <member name="F:OpenMetaverse.Parcel.GroupPrims"> 13537 <member name="F:OpenMetaverse.Parcel.GroupPrims">
15159 <summary>Total number of primitives owned by the parcel group on 13538 <summary>Total number of primitives owned by the parcel group on
15160 this parcel, or for parcels owned by an individual with a group set the 13539 this parcel, or for parcels owned by an individual with a group set the
15161 total number of prims set to that group.</summary> 13540 total number of prims set to that group.</summary>
15162 </member> 13541 </member>
@@ -15171,8 +13550,7 @@
15171 <summary>Autoreturn value in minutes for others' objects</summary> 13550 <summary>Autoreturn value in minutes for others' objects</summary>
15172 </member> 13551 </member>
15173 <member name="F:OpenMetaverse.Parcel.Flags"> 13552 <member name="F:OpenMetaverse.Parcel.Flags">
15174 <summary> 13553 <summary></summary>
15175 </summary>
15176 </member> 13554 </member>
15177 <member name="F:OpenMetaverse.Parcel.SalePrice"> 13555 <member name="F:OpenMetaverse.Parcel.SalePrice">
15178 <summary>Sale price of the parcel, only useful if ForSale is set</summary> 13556 <summary>Sale price of the parcel, only useful if ForSale is set</summary>
@@ -15190,8 +13568,7 @@
15190 <summary>URL For Music Stream</summary> 13568 <summary>URL For Music Stream</summary>
15191 </member> 13569 </member>
15192 <member name="F:OpenMetaverse.Parcel.GroupID"> 13570 <member name="F:OpenMetaverse.Parcel.GroupID">
15193 <summary> 13571 <summary></summary>
15194 </summary>
15195 </member> 13572 </member>
15196 <member name="F:OpenMetaverse.Parcel.PassPrice"> 13573 <member name="F:OpenMetaverse.Parcel.PassPrice">
15197 <summary>Price for a temporary pass</summary> 13574 <summary>Price for a temporary pass</summary>
@@ -15200,8 +13577,7 @@
15200 <summary>How long is pass valid for</summary> 13577 <summary>How long is pass valid for</summary>
15201 </member> 13578 </member>
15202 <member name="F:OpenMetaverse.Parcel.Category"> 13579 <member name="F:OpenMetaverse.Parcel.Category">
15203 <summary> 13580 <summary></summary>
15204 </summary>
15205 </member> 13581 </member>
15206 <member name="F:OpenMetaverse.Parcel.AuthBuyerID"> 13582 <member name="F:OpenMetaverse.Parcel.AuthBuyerID">
15207 <summary>Key of authorized buyer</summary> 13583 <summary>Key of authorized buyer</summary>
@@ -15216,19 +13592,16 @@
15216 <summary>The landing point LookAt</summary> 13592 <summary>The landing point LookAt</summary>
15217 </member> 13593 </member>
15218 <member name="F:OpenMetaverse.Parcel.Landing"> 13594 <member name="F:OpenMetaverse.Parcel.Landing">
15219 <summary>The type of landing enforced from the <see cref="T:OpenMetaverse.LandingType" /> enum</summary> 13595 <summary>The type of landing enforced from the <see cref="T:OpenMetaverse.LandingType"/> enum</summary>
15220 </member> 13596 </member>
15221 <member name="F:OpenMetaverse.Parcel.Dwell"> 13597 <member name="F:OpenMetaverse.Parcel.Dwell">
15222 <summary> 13598 <summary></summary>
15223 </summary>
15224 </member> 13599 </member>
15225 <member name="F:OpenMetaverse.Parcel.RegionDenyAnonymous"> 13600 <member name="F:OpenMetaverse.Parcel.RegionDenyAnonymous">
15226 <summary> 13601 <summary></summary>
15227 </summary>
15228 </member> 13602 </member>
15229 <member name="F:OpenMetaverse.Parcel.RegionPushOverride"> 13603 <member name="F:OpenMetaverse.Parcel.RegionPushOverride">
15230 <summary> 13604 <summary></summary>
15231 </summary>
15232 </member> 13605 </member>
15233 <member name="F:OpenMetaverse.Parcel.AccessWhiteList"> 13606 <member name="F:OpenMetaverse.Parcel.AccessWhiteList">
15234 <summary>Access list of who is whitelisted on this 13607 <summary>Access list of who is whitelisted on this
@@ -15256,6 +13629,12 @@
15256 </summary> 13629 </summary>
15257 <returns>string containing key=value pairs of a parcel object</returns> 13630 <returns>string containing key=value pairs of a parcel object</returns>
15258 </member> 13631 </member>
13632 <member name="M:OpenMetaverse.Parcel.#ctor(System.Int32)">
13633 <summary>
13634 Defalt constructor
13635 </summary>
13636 <param name="localID">Local ID of this parcel</param>
13637 </member>
15259 <member name="M:OpenMetaverse.Parcel.Update(OpenMetaverse.Simulator,System.Boolean)"> 13638 <member name="M:OpenMetaverse.Parcel.Update(OpenMetaverse.Simulator,System.Boolean)">
15260 <summary> 13639 <summary>
15261 Update the simulator with any local changes to this Parcel object 13640 Update the simulator with any local changes to this Parcel object
@@ -15275,180 +13654,111 @@
15275 Parcel (subdivided simulator lots) subsystem 13654 Parcel (subdivided simulator lots) subsystem
15276 </summary> 13655 </summary>
15277 </member> 13656 </member>
15278 <member name="M:OpenMetaverse.ParcelManager.#ctor(OpenMetaverse.GridClient)">
15279 <summary>
15280 Default constructor
15281 </summary>
15282 <param name="client">A reference to the GridClient object</param>
15283 </member>
15284 <member name="T:OpenMetaverse.ParcelManager.ParcelAccessEntry">
15285 <summary>
15286 Parcel Accesslist
15287 </summary>
15288 </member>
15289 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.AgentID">
15290 <summary>Agents <seealso cref="T:OpenMetaverse.UUID" /></summary>
15291 </member>
15292 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.Time">
15293 <summary>
15294 </summary>
15295 </member>
15296 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.Flags">
15297 <summary>Flags for specific entry in white/black lists</summary>
15298 </member>
15299 <member name="T:OpenMetaverse.ParcelManager.ParcelPrimOwners">
15300 <summary>
15301 Owners of primitives on parcel
15302 </summary>
15303 </member>
15304 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.OwnerID">
15305 <summary>Prim Owners <seealso cref="T:OpenMetaverse.UUID" /></summary>
15306 </member>
15307 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.IsGroupOwned">
15308 <summary>True of owner is group</summary>
15309 </member>
15310 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.Count">
15311 <summary>Total count of prims owned by OwnerID</summary>
15312 </member>
15313 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.OnlineStatus">
15314 <summary>true of OwnerID is currently online and is not a group</summary>
15315 </member>
15316 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.NewestPrim">
15317 <summary>The date of the most recent prim left by OwnerID</summary>
15318 </member>
15319 <member name="T:OpenMetaverse.ParcelManager.LandResourcesCallback">
15320 <summary>
15321 Called once parcel resource usage information has been collected
15322 </summary>
15323 <param name="success">Indicates if operation was successfull</param>
15324 <param name="info">Parcel resource usage information</param>
15325 </member>
15326 <member name="F:OpenMetaverse.ParcelManager.m_DwellReply"> 13657 <member name="F:OpenMetaverse.ParcelManager.m_DwellReply">
15327 <summary>The event subscribers. null if no subcribers</summary> 13658 <summary>The event subscribers. null if no subcribers</summary>
15328 </member> 13659 </member>
13660 <member name="M:OpenMetaverse.ParcelManager.OnParcelDwellReply(OpenMetaverse.ParcelDwellReplyEventArgs)">
13661 <summary>Raises the ParcelDwellReply event</summary>
13662 <param name="e">A ParcelDwellReplyEventArgs object containing the
13663 data returned from the simulator</param>
13664 </member>
15329 <member name="F:OpenMetaverse.ParcelManager.m_DwellReplyLock"> 13665 <member name="F:OpenMetaverse.ParcelManager.m_DwellReplyLock">
15330 <summary>Thread sync lock object</summary> 13666 <summary>Thread sync lock object</summary>
15331 </member> 13667 </member>
15332 <member name="F:OpenMetaverse.ParcelManager.m_ParcelInfo"> 13668 <member name="F:OpenMetaverse.ParcelManager.m_ParcelInfo">
15333 <summary>The event subscribers. null if no subcribers</summary> 13669 <summary>The event subscribers. null if no subcribers</summary>
15334 </member> 13670 </member>
13671 <member name="M:OpenMetaverse.ParcelManager.OnParcelInfoReply(OpenMetaverse.ParcelInfoReplyEventArgs)">
13672 <summary>Raises the ParcelInfoReply event</summary>
13673 <param name="e">A ParcelInfoReplyEventArgs object containing the
13674 data returned from the simulator</param>
13675 </member>
15335 <member name="F:OpenMetaverse.ParcelManager.m_ParcelInfoLock"> 13676 <member name="F:OpenMetaverse.ParcelManager.m_ParcelInfoLock">
15336 <summary>Thread sync lock object</summary> 13677 <summary>Thread sync lock object</summary>
15337 </member> 13678 </member>
15338 <member name="F:OpenMetaverse.ParcelManager.m_ParcelProperties"> 13679 <member name="F:OpenMetaverse.ParcelManager.m_ParcelProperties">
15339 <summary>The event subscribers. null if no subcribers</summary> 13680 <summary>The event subscribers. null if no subcribers</summary>
15340 </member> 13681 </member>
13682 <member name="M:OpenMetaverse.ParcelManager.OnParcelProperties(OpenMetaverse.ParcelPropertiesEventArgs)">
13683 <summary>Raises the ParcelProperties event</summary>
13684 <param name="e">A ParcelPropertiesEventArgs object containing the
13685 data returned from the simulator</param>
13686 </member>
15341 <member name="F:OpenMetaverse.ParcelManager.m_ParcelPropertiesLock"> 13687 <member name="F:OpenMetaverse.ParcelManager.m_ParcelPropertiesLock">
15342 <summary>Thread sync lock object</summary> 13688 <summary>Thread sync lock object</summary>
15343 </member> 13689 </member>
15344 <member name="F:OpenMetaverse.ParcelManager.m_ParcelACL"> 13690 <member name="F:OpenMetaverse.ParcelManager.m_ParcelACL">
15345 <summary>The event subscribers. null if no subcribers</summary> 13691 <summary>The event subscribers. null if no subcribers</summary>
15346 </member> 13692 </member>
13693 <member name="M:OpenMetaverse.ParcelManager.OnParcelAccessListReply(OpenMetaverse.ParcelAccessListReplyEventArgs)">
13694 <summary>Raises the ParcelAccessListReply event</summary>
13695 <param name="e">A ParcelAccessListReplyEventArgs object containing the
13696 data returned from the simulator</param>
13697 </member>
15347 <member name="F:OpenMetaverse.ParcelManager.m_ParcelACLLock"> 13698 <member name="F:OpenMetaverse.ParcelManager.m_ParcelACLLock">
15348 <summary>Thread sync lock object</summary> 13699 <summary>Thread sync lock object</summary>
15349 </member> 13700 </member>
15350 <member name="F:OpenMetaverse.ParcelManager.m_ParcelObjectOwnersReply"> 13701 <member name="F:OpenMetaverse.ParcelManager.m_ParcelObjectOwnersReply">
15351 <summary>The event subscribers. null if no subcribers</summary> 13702 <summary>The event subscribers. null if no subcribers</summary>
15352 </member> 13703 </member>
13704 <member name="M:OpenMetaverse.ParcelManager.OnParcelObjectOwnersReply(OpenMetaverse.ParcelObjectOwnersReplyEventArgs)">
13705 <summary>Raises the ParcelObjectOwnersReply event</summary>
13706 <param name="e">A ParcelObjectOwnersReplyEventArgs object containing the
13707 data returned from the simulator</param>
13708 </member>
15353 <member name="F:OpenMetaverse.ParcelManager.m_ParcelObjectOwnersLock"> 13709 <member name="F:OpenMetaverse.ParcelManager.m_ParcelObjectOwnersLock">
15354 <summary>Thread sync lock object</summary> 13710 <summary>Thread sync lock object</summary>
15355 </member> 13711 </member>
15356 <member name="F:OpenMetaverse.ParcelManager.m_SimParcelsDownloaded"> 13712 <member name="F:OpenMetaverse.ParcelManager.m_SimParcelsDownloaded">
15357 <summary>The event subscribers. null if no subcribers</summary> 13713 <summary>The event subscribers. null if no subcribers</summary>
15358 </member> 13714 </member>
13715 <member name="M:OpenMetaverse.ParcelManager.OnSimParcelsDownloaded(OpenMetaverse.SimParcelsDownloadedEventArgs)">
13716 <summary>Raises the SimParcelsDownloaded event</summary>
13717 <param name="e">A SimParcelsDownloadedEventArgs object containing the
13718 data returned from the simulator</param>
13719 </member>
15359 <member name="F:OpenMetaverse.ParcelManager.m_SimParcelsDownloadedLock"> 13720 <member name="F:OpenMetaverse.ParcelManager.m_SimParcelsDownloadedLock">
15360 <summary>Thread sync lock object</summary> 13721 <summary>Thread sync lock object</summary>
15361 </member> 13722 </member>
15362 <member name="F:OpenMetaverse.ParcelManager.m_ForceSelectObjects"> 13723 <member name="F:OpenMetaverse.ParcelManager.m_ForceSelectObjects">
15363 <summary>The event subscribers. null if no subcribers</summary> 13724 <summary>The event subscribers. null if no subcribers</summary>
15364 </member> 13725 </member>
13726 <member name="M:OpenMetaverse.ParcelManager.OnForceSelectObjectsReply(OpenMetaverse.ForceSelectObjectsReplyEventArgs)">
13727 <summary>Raises the ForceSelectObjectsReply event</summary>
13728 <param name="e">A ForceSelectObjectsReplyEventArgs object containing the
13729 data returned from the simulator</param>
13730 </member>
15365 <member name="F:OpenMetaverse.ParcelManager.m_ForceSelectObjectsLock"> 13731 <member name="F:OpenMetaverse.ParcelManager.m_ForceSelectObjectsLock">
15366 <summary>Thread sync lock object</summary> 13732 <summary>Thread sync lock object</summary>
15367 </member> 13733 </member>
15368 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaUpdateReply"> 13734 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaUpdateReply">
15369 <summary>The event subscribers. null if no subcribers</summary> 13735 <summary>The event subscribers. null if no subcribers</summary>
15370 </member> 13736 </member>
13737 <member name="M:OpenMetaverse.ParcelManager.OnParcelMediaUpdateReply(OpenMetaverse.ParcelMediaUpdateReplyEventArgs)">
13738 <summary>Raises the ParcelMediaUpdateReply event</summary>
13739 <param name="e">A ParcelMediaUpdateReplyEventArgs object containing the
13740 data returned from the simulator</param>
13741 </member>
15371 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaUpdateReplyLock"> 13742 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaUpdateReplyLock">
15372 <summary>Thread sync lock object</summary> 13743 <summary>Thread sync lock object</summary>
15373 </member> 13744 </member>
15374 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaCommand"> 13745 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaCommand">
15375 <summary>The event subscribers. null if no subcribers</summary> 13746 <summary>The event subscribers. null if no subcribers</summary>
15376 </member> 13747 </member>
15377 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaCommandLock">
15378 <summary>Thread sync lock object</summary>
15379 </member>
15380 <member name="E:OpenMetaverse.ParcelManager.ParcelDwellReply">
15381 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestDwell(OpenMetaverse.Simulator,System.Int32)" /> request</summary>
15382 </member>
15383 <member name="E:OpenMetaverse.ParcelManager.ParcelInfoReply">
15384 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelInfo(OpenMetaverse.UUID)" /> request</summary>
15385 </member>
15386 <member name="E:OpenMetaverse.ParcelManager.ParcelProperties">
15387 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelProperties(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single,System.Int32,System.Boolean)" /> request</summary>
15388 </member>
15389 <member name="E:OpenMetaverse.ParcelManager.ParcelAccessListReply">
15390 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelAccessList(OpenMetaverse.Simulator,System.Int32,OpenMetaverse.AccessList,System.Int32)" /> request</summary>
15391 </member>
15392 <member name="E:OpenMetaverse.ParcelManager.ParcelObjectOwnersReply">
15393 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestObjectOwners(OpenMetaverse.Simulator,System.Int32)" /> request</summary>
15394 </member>
15395 <member name="E:OpenMetaverse.ParcelManager.SimParcelsDownloaded">
15396 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator,System.Boolean,System.Int32)" /> request</summary>
15397 </member>
15398 <member name="E:OpenMetaverse.ParcelManager.ForceSelectObjectsReply">
15399 <summary>Raised when the simulator responds to a <see cref="!:RequestForceSelectObjects" /> request</summary>
15400 </member>
15401 <member name="E:OpenMetaverse.ParcelManager.ParcelMediaUpdateReply">
15402 <summary>Raised when the simulator responds to a Parcel Update request</summary>
15403 </member>
15404 <member name="E:OpenMetaverse.ParcelManager.ParcelMediaCommand">
15405 <summary>Raised when the parcel your agent is located sends a ParcelMediaCommand</summary>
15406 </member>
15407 <member name="M:OpenMetaverse.ParcelManager.OnParcelDwellReply(OpenMetaverse.ParcelDwellReplyEventArgs)">
15408 <summary>Raises the ParcelDwellReply event</summary>
15409 <param name="e">A ParcelDwellReplyEventArgs object containing the
15410 data returned from the simulator</param>
15411 </member>
15412 <member name="M:OpenMetaverse.ParcelManager.OnParcelInfoReply(OpenMetaverse.ParcelInfoReplyEventArgs)">
15413 <summary>Raises the ParcelInfoReply event</summary>
15414 <param name="e">A ParcelInfoReplyEventArgs object containing the
15415 data returned from the simulator</param>
15416 </member>
15417 <member name="M:OpenMetaverse.ParcelManager.OnParcelProperties(OpenMetaverse.ParcelPropertiesEventArgs)">
15418 <summary>Raises the ParcelProperties event</summary>
15419 <param name="e">A ParcelPropertiesEventArgs object containing the
15420 data returned from the simulator</param>
15421 </member>
15422 <member name="M:OpenMetaverse.ParcelManager.OnParcelAccessListReply(OpenMetaverse.ParcelAccessListReplyEventArgs)">
15423 <summary>Raises the ParcelAccessListReply event</summary>
15424 <param name="e">A ParcelAccessListReplyEventArgs object containing the
15425 data returned from the simulator</param>
15426 </member>
15427 <member name="M:OpenMetaverse.ParcelManager.OnParcelObjectOwnersReply(OpenMetaverse.ParcelObjectOwnersReplyEventArgs)">
15428 <summary>Raises the ParcelObjectOwnersReply event</summary>
15429 <param name="e">A ParcelObjectOwnersReplyEventArgs object containing the
15430 data returned from the simulator</param>
15431 </member>
15432 <member name="M:OpenMetaverse.ParcelManager.OnSimParcelsDownloaded(OpenMetaverse.SimParcelsDownloadedEventArgs)">
15433 <summary>Raises the SimParcelsDownloaded event</summary>
15434 <param name="e">A SimParcelsDownloadedEventArgs object containing the
15435 data returned from the simulator</param>
15436 </member>
15437 <member name="M:OpenMetaverse.ParcelManager.OnForceSelectObjectsReply(OpenMetaverse.ForceSelectObjectsReplyEventArgs)">
15438 <summary>Raises the ForceSelectObjectsReply event</summary>
15439 <param name="e">A ForceSelectObjectsReplyEventArgs object containing the
15440 data returned from the simulator</param>
15441 </member>
15442 <member name="M:OpenMetaverse.ParcelManager.OnParcelMediaUpdateReply(OpenMetaverse.ParcelMediaUpdateReplyEventArgs)">
15443 <summary>Raises the ParcelMediaUpdateReply event</summary>
15444 <param name="e">A ParcelMediaUpdateReplyEventArgs object containing the
15445 data returned from the simulator</param>
15446 </member>
15447 <member name="M:OpenMetaverse.ParcelManager.OnParcelMediaCommand(OpenMetaverse.ParcelMediaCommandEventArgs)"> 13748 <member name="M:OpenMetaverse.ParcelManager.OnParcelMediaCommand(OpenMetaverse.ParcelMediaCommandEventArgs)">
15448 <summary>Raises the ParcelMediaCommand event</summary> 13749 <summary>Raises the ParcelMediaCommand event</summary>
15449 <param name="e">A ParcelMediaCommandEventArgs object containing the 13750 <param name="e">A ParcelMediaCommandEventArgs object containing the
15450 data returned from the simulator</param> 13751 data returned from the simulator</param>
15451 </member> 13752 </member>
13753 <member name="F:OpenMetaverse.ParcelManager.m_ParcelMediaCommandLock">
13754 <summary>Thread sync lock object</summary>
13755 </member>
13756 <member name="M:OpenMetaverse.ParcelManager.#ctor(OpenMetaverse.GridClient)">
13757 <summary>
13758 Default constructor
13759 </summary>
13760 <param name="client">A reference to the GridClient object</param>
13761 </member>
15452 <member name="M:OpenMetaverse.ParcelManager.RequestParcelInfo(OpenMetaverse.UUID)"> 13762 <member name="M:OpenMetaverse.ParcelManager.RequestParcelInfo(OpenMetaverse.UUID)">
15453 <summary> 13763 <summary>
15454 Request basic information for a single parcel 13764 Request basic information for a single parcel
@@ -15474,8 +13784,7 @@
15474 <param name="sequenceID">An arbitrary integer that will be returned 13784 <param name="sequenceID">An arbitrary integer that will be returned
15475 with the ParcelAccessList reply, useful for distinguishing between 13785 with the ParcelAccessList reply, useful for distinguishing between
15476 multiple simultaneous requests</param> 13786 multiple simultaneous requests</param>
15477 <param name="flags"> 13787 <param name="flags"></param>
15478 </param>
15479 </member> 13788 </member>
15480 <member name="M:OpenMetaverse.ParcelManager.RequestParcelProperties(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single,System.Int32,System.Boolean)"> 13789 <member name="M:OpenMetaverse.ParcelManager.RequestParcelProperties(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single,System.Int32,System.Boolean)">
15481 <summary> 13790 <summary>
@@ -15495,14 +13804,14 @@
15495 </member> 13804 </member>
15496 <member name="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator)"> 13805 <member name="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator)">
15497 <summary> 13806 <summary>
15498 Request all simulator parcel properties (used for populating the <code>Simulator.Parcels</code> 13807 Request all simulator parcel properties (used for populating the <code>Simulator.Parcels</code>
15499 dictionary) 13808 dictionary)
15500 </summary> 13809 </summary>
15501 <param name="simulator">Simulator to request parcels from (must be connected)</param> 13810 <param name="simulator">Simulator to request parcels from (must be connected)</param>
15502 </member> 13811 </member>
15503 <member name="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator,System.Boolean,System.Int32)"> 13812 <member name="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator,System.Boolean,System.Int32)">
15504 <summary> 13813 <summary>
15505 Request all simulator parcel properties (used for populating the <code>Simulator.Parcels</code> 13814 Request all simulator parcel properties (used for populating the <code>Simulator.Parcels</code>
15506 dictionary) 13815 dictionary)
15507 </summary> 13816 </summary>
15508 <param name="simulator">Simulator to request parcels from (must be connected)</param> 13817 <param name="simulator">Simulator to request parcels from (must be connected)</param>
@@ -15523,12 +13832,11 @@
15523 <param name="simulator">The Simulator the parcel is located in</param> 13832 <param name="simulator">The Simulator the parcel is located in</param>
15524 <param name="localID">The parcels region specific local ID</param> 13833 <param name="localID">The parcels region specific local ID</param>
15525 <param name="forGroup">true if this parcel is being purchased by a group</param> 13834 <param name="forGroup">true if this parcel is being purchased by a group</param>
15526 <param name="groupID">The groups <seealso cref="T:OpenMetaverse.UUID" /></param> 13835 <param name="groupID">The groups <seealso cref="T:OpenMetaverse.UUID"/></param>
15527 <param name="removeContribution">true to remove tier contribution if purchase is successful</param> 13836 <param name="removeContribution">true to remove tier contribution if purchase is successful</param>
15528 <param name="parcelArea">The parcels size</param> 13837 <param name="parcelArea">The parcels size</param>
15529 <param name="parcelPrice">The purchase price of the parcel</param> 13838 <param name="parcelPrice">The purchase price of the parcel</param>
15530 <returns> 13839 <returns></returns>
15531 </returns>
15532 </member> 13840 </member>
15533 <member name="M:OpenMetaverse.ParcelManager.Reclaim(OpenMetaverse.Simulator,System.Int32)"> 13841 <member name="M:OpenMetaverse.ParcelManager.Reclaim(OpenMetaverse.Simulator,System.Int32)">
15534 <summary> 13842 <summary>
@@ -15543,7 +13851,7 @@
15543 </summary> 13851 </summary>
15544 <param name="simulator">The simulator the parcel is in</param> 13852 <param name="simulator">The simulator the parcel is in</param>
15545 <param name="localID">The parcels region specific local ID</param> 13853 <param name="localID">The parcels region specific local ID</param>
15546 <param name="groupID">The groups <seealso cref="T:OpenMetaverse.UUID" /></param> 13854 <param name="groupID">The groups <seealso cref="T:OpenMetaverse.UUID"/></param>
15547 </member> 13855 </member>
15548 <member name="M:OpenMetaverse.ParcelManager.RequestObjectOwners(OpenMetaverse.Simulator,System.Int32)"> 13856 <member name="M:OpenMetaverse.ParcelManager.RequestObjectOwners(OpenMetaverse.Simulator,System.Int32)">
15549 <summary> 13857 <summary>
@@ -15558,38 +13866,28 @@
15558 </summary> 13866 </summary>
15559 <param name="simulator">Simulator parcel is in</param> 13867 <param name="simulator">Simulator parcel is in</param>
15560 <param name="localID">The parcels region specific local ID</param> 13868 <param name="localID">The parcels region specific local ID</param>
15561 <param name="type">the type of objects to return, <seealso cref="T:OpenMetaverse.ObjectReturnType" /></param> 13869 <param name="type">the type of objects to return, <seealso cref="T:OpenMetaverse.ObjectReturnType"/></param>
15562 <param name="ownerIDs">A list containing object owners <seealso cref="T:OpenMetaverse.UUID" />s to return</param> 13870 <param name="ownerIDs">A list containing object owners <seealso cref="T:OpenMetaverse.UUID"/>s to return</param>
15563 </member> 13871 </member>
15564 <member name="M:OpenMetaverse.ParcelManager.ParcelSubdivide(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single)"> 13872 <member name="M:OpenMetaverse.ParcelManager.ParcelSubdivide(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single)">
15565 <summary> 13873 <summary>
15566 Subdivide (split) a parcel 13874 Subdivide (split) a parcel
15567 </summary> 13875 </summary>
15568 <param name="simulator"> 13876 <param name="simulator"></param>
15569 </param> 13877 <param name="west"></param>
15570 <param name="west"> 13878 <param name="south"></param>
15571 </param> 13879 <param name="east"></param>
15572 <param name="south"> 13880 <param name="north"></param>
15573 </param>
15574 <param name="east">
15575 </param>
15576 <param name="north">
15577 </param>
15578 </member> 13881 </member>
15579 <member name="M:OpenMetaverse.ParcelManager.ParcelJoin(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single)"> 13882 <member name="M:OpenMetaverse.ParcelManager.ParcelJoin(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single)">
15580 <summary> 13883 <summary>
15581 Join two parcels of land creating a single parcel 13884 Join two parcels of land creating a single parcel
15582 </summary> 13885 </summary>
15583 <param name="simulator"> 13886 <param name="simulator"></param>
15584 </param> 13887 <param name="west"></param>
15585 <param name="west"> 13888 <param name="south"></param>
15586 </param> 13889 <param name="east"></param>
15587 <param name="south"> 13890 <param name="north"></param>
15588 </param>
15589 <param name="east">
15590 </param>
15591 <param name="north">
15592 </param>
15593 </member> 13891 </member>
15594 <member name="M:OpenMetaverse.ParcelManager.GetParcelLocalID(OpenMetaverse.Simulator,OpenMetaverse.Vector3)"> 13892 <member name="M:OpenMetaverse.ParcelManager.GetParcelLocalID(OpenMetaverse.Simulator,OpenMetaverse.Vector3)">
15595 <summary> 13893 <summary>
@@ -15610,7 +13908,7 @@
15610 <param name="action">From Enum, Raise, Lower, Level, Smooth, Etc.</param> 13908 <param name="action">From Enum, Raise, Lower, Level, Smooth, Etc.</param>
15611 <param name="brushSize">Size of area to modify</param> 13909 <param name="brushSize">Size of area to modify</param>
15612 <returns>true on successful request sent.</returns> 13910 <returns>true on successful request sent.</returns>
15613 <remarks>Settings.STORE_LAND_PATCHES must be true, 13911 <remarks>Settings.STORE_LAND_PATCHES must be true,
15614 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks> 13912 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks>
15615 </member> 13913 </member>
15616 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize)"> 13914 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize)">
@@ -15625,7 +13923,7 @@
15625 <param name="action">From Enum, Raise, Lower, Level, Smooth, Etc.</param> 13923 <param name="action">From Enum, Raise, Lower, Level, Smooth, Etc.</param>
15626 <param name="brushSize">Size of area to modify</param> 13924 <param name="brushSize">Size of area to modify</param>
15627 <returns>true on successful request sent.</returns> 13925 <returns>true on successful request sent.</returns>
15628 <remarks>Settings.STORE_LAND_PATCHES must be true, 13926 <remarks>Settings.STORE_LAND_PATCHES must be true,
15629 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks> 13927 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks>
15630 </member> 13928 </member>
15631 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Int32,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize,System.Int32)"> 13929 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Int32,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize,System.Int32)">
@@ -15642,7 +13940,7 @@
15642 <param name="brushSize">Size of area to modify</param> 13940 <param name="brushSize">Size of area to modify</param>
15643 <param name="seconds">How many meters + or - to lower, 1 = 1 meter</param> 13941 <param name="seconds">How many meters + or - to lower, 1 = 1 meter</param>
15644 <returns>true on successful request sent.</returns> 13942 <returns>true on successful request sent.</returns>
15645 <remarks>Settings.STORE_LAND_PATCHES must be true, 13943 <remarks>Settings.STORE_LAND_PATCHES must be true,
15646 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks> 13944 Parcel information must be downloaded using <code>RequestAllSimParcels()</code></remarks>
15647 </member> 13945 </member>
15648 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Int32,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize,System.Int32,System.Single)"> 13946 <member name="M:OpenMetaverse.ParcelManager.Terraform(OpenMetaverse.Simulator,System.Int32,System.Single,System.Single,System.Single,System.Single,OpenMetaverse.TerraformAction,OpenMetaverse.TerraformBrushSize,System.Int32,System.Single)">
@@ -15666,9 +13964,9 @@
15666 </summary> 13964 </summary>
15667 <param name="localID">Simulator local ID of parcel</param> 13965 <param name="localID">Simulator local ID of parcel</param>
15668 <param name="selectType">Owners, Others, Etc</param> 13966 <param name="selectType">Owners, Others, Etc</param>
15669 <param name="ownerID">List containing keys of avatars objects to select; 13967 <param name="ownerID">List containing keys of avatars objects to select;
15670 if List is null will return Objects of type <c>selectType</c></param> 13968 if List is null will return Objects of type <c>selectType</c></param>
15671 <remarks>Response data is returned in the event <seealso cref="E:ForceSelectObjectsReply" /></remarks> 13969 <remarks>Response data is returned in the event <seealso cref="E:ForceSelectObjectsReply"/></remarks>
15672 </member> 13970 </member>
15673 <member name="M:OpenMetaverse.ParcelManager.EjectUser(OpenMetaverse.UUID,System.Boolean)"> 13971 <member name="M:OpenMetaverse.ParcelManager.EjectUser(OpenMetaverse.UUID,System.Boolean)">
15674 <summary> 13972 <summary>
@@ -15712,31 +14010,31 @@
15712 <summary>Process an incoming packet and raise the appropriate events</summary> 14010 <summary>Process an incoming packet and raise the appropriate events</summary>
15713 <param name="sender">The sender</param> 14011 <param name="sender">The sender</param>
15714 <param name="e">The EventArgs object containing the packet data</param> 14012 <param name="e">The EventArgs object containing the packet data</param>
15715 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelDwellReply" /> event</remarks> 14013 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelDwellReply"/> event</remarks>
15716 </member> 14014 </member>
15717 <member name="M:OpenMetaverse.ParcelManager.ParcelInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 14015 <member name="M:OpenMetaverse.ParcelManager.ParcelInfoReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
15718 <summary>Process an incoming packet and raise the appropriate events</summary> 14016 <summary>Process an incoming packet and raise the appropriate events</summary>
15719 <param name="sender">The sender</param> 14017 <param name="sender">The sender</param>
15720 <param name="e">The EventArgs object containing the packet data</param> 14018 <param name="e">The EventArgs object containing the packet data</param>
15721 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelInfoReply" /> event</remarks> 14019 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelInfoReply"/> event</remarks>
15722 </member> 14020 </member>
15723 <member name="M:OpenMetaverse.ParcelManager.ParcelAccessListReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 14021 <member name="M:OpenMetaverse.ParcelManager.ParcelAccessListReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
15724 <summary>Process an incoming packet and raise the appropriate events</summary> 14022 <summary>Process an incoming packet and raise the appropriate events</summary>
15725 <param name="sender">The sender</param> 14023 <param name="sender">The sender</param>
15726 <param name="e">The EventArgs object containing the packet data</param> 14024 <param name="e">The EventArgs object containing the packet data</param>
15727 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelAccessListReply" /> event</remarks> 14025 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelAccessListReply"/> event</remarks>
15728 </member> 14026 </member>
15729 <member name="M:OpenMetaverse.ParcelManager.SelectParcelObjectsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 14027 <member name="M:OpenMetaverse.ParcelManager.SelectParcelObjectsReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
15730 <summary>Process an incoming packet and raise the appropriate events</summary> 14028 <summary>Process an incoming packet and raise the appropriate events</summary>
15731 <param name="sender">The sender</param> 14029 <param name="sender">The sender</param>
15732 <param name="e">The EventArgs object containing the packet data</param> 14030 <param name="e">The EventArgs object containing the packet data</param>
15733 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ForceSelectObjectsReply" /> event</remarks> 14031 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ForceSelectObjectsReply"/> event</remarks>
15734 </member> 14032 </member>
15735 <member name="M:OpenMetaverse.ParcelManager.ParcelMediaUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 14033 <member name="M:OpenMetaverse.ParcelManager.ParcelMediaUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
15736 <summary>Process an incoming packet and raise the appropriate events</summary> 14034 <summary>Process an incoming packet and raise the appropriate events</summary>
15737 <param name="sender">The sender</param> 14035 <param name="sender">The sender</param>
15738 <param name="e">The EventArgs object containing the packet data</param> 14036 <param name="e">The EventArgs object containing the packet data</param>
15739 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelMediaUpdateReply" /> event</remarks> 14037 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelMediaUpdateReply"/> event</remarks>
15740 </member> 14038 </member>
15741 <member name="M:OpenMetaverse.ParcelManager.ParcelOverlayHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 14039 <member name="M:OpenMetaverse.ParcelManager.ParcelOverlayHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
15742 <summary>Process an incoming packet and raise the appropriate events</summary> 14040 <summary>Process an incoming packet and raise the appropriate events</summary>
@@ -15747,10 +14045,78 @@
15747 <summary>Process an incoming packet and raise the appropriate events</summary> 14045 <summary>Process an incoming packet and raise the appropriate events</summary>
15748 <param name="sender">The sender</param> 14046 <param name="sender">The sender</param>
15749 <param name="e">The EventArgs object containing the packet data</param> 14047 <param name="e">The EventArgs object containing the packet data</param>
15750 <remarks>Raises the <see cref="T:OpenMetaverse.ParcelMediaCommand" /> event</remarks> 14048 <remarks>Raises the <see cref="E:OpenMetaverse.ParcelManager.ParcelMediaCommand"/> event</remarks>
14049 </member>
14050 <member name="E:OpenMetaverse.ParcelManager.ParcelDwellReply">
14051 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestDwell(OpenMetaverse.Simulator,System.Int32)"/> request</summary>
14052 </member>
14053 <member name="E:OpenMetaverse.ParcelManager.ParcelInfoReply">
14054 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelInfo(OpenMetaverse.UUID)"/> request</summary>
14055 </member>
14056 <member name="E:OpenMetaverse.ParcelManager.ParcelProperties">
14057 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelProperties(OpenMetaverse.Simulator,System.Int32,System.Int32)"/> request</summary>
14058 </member>
14059 <member name="E:OpenMetaverse.ParcelManager.ParcelAccessListReply">
14060 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestParcelAccessList(OpenMetaverse.Simulator,System.Int32,OpenMetaverse.AccessList,System.Int32)"/> request</summary>
14061 </member>
14062 <member name="E:OpenMetaverse.ParcelManager.ParcelObjectOwnersReply">
14063 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestObjectOwners(OpenMetaverse.Simulator,System.Int32)"/> request</summary>
14064 </member>
14065 <member name="E:OpenMetaverse.ParcelManager.SimParcelsDownloaded">
14066 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.ParcelManager.RequestAllSimParcels(OpenMetaverse.Simulator)"/> request</summary>
14067 </member>
14068 <member name="E:OpenMetaverse.ParcelManager.ForceSelectObjectsReply">
14069 <summary>Raised when the simulator responds to a <see cref="!:RequestForceSelectObjects"/> request</summary>
14070 </member>
14071 <member name="E:OpenMetaverse.ParcelManager.ParcelMediaUpdateReply">
14072 <summary>Raised when the simulator responds to a Parcel Update request</summary>
14073 </member>
14074 <member name="E:OpenMetaverse.ParcelManager.ParcelMediaCommand">
14075 <summary>Raised when the parcel your agent is located sends a ParcelMediaCommand</summary>
14076 </member>
14077 <member name="T:OpenMetaverse.ParcelManager.ParcelAccessEntry">
14078 <summary>
14079 Parcel Accesslist
14080 </summary>
14081 </member>
14082 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.AgentID">
14083 <summary>Agents <seealso cref="T:OpenMetaverse.UUID"/></summary>
14084 </member>
14085 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.Time">
14086 <summary></summary>
14087 </member>
14088 <member name="F:OpenMetaverse.ParcelManager.ParcelAccessEntry.Flags">
14089 <summary>Flags for specific entry in white/black lists</summary>
14090 </member>
14091 <member name="T:OpenMetaverse.ParcelManager.ParcelPrimOwners">
14092 <summary>
14093 Owners of primitives on parcel
14094 </summary>
14095 </member>
14096 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.OwnerID">
14097 <summary>Prim Owners <seealso cref="T:OpenMetaverse.UUID"/></summary>
14098 </member>
14099 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.IsGroupOwned">
14100 <summary>True of owner is group</summary>
14101 </member>
14102 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.Count">
14103 <summary>Total count of prims owned by OwnerID</summary>
14104 </member>
14105 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.OnlineStatus">
14106 <summary>true of OwnerID is currently online and is not a group</summary>
14107 </member>
14108 <member name="F:OpenMetaverse.ParcelManager.ParcelPrimOwners.NewestPrim">
14109 <summary>The date of the most recent prim left by OwnerID</summary>
14110 </member>
14111 <member name="T:OpenMetaverse.ParcelManager.LandResourcesCallback">
14112 <summary>
14113 Called once parcel resource usage information has been collected
14114 </summary>
14115 <param name="success">Indicates if operation was successfull</param>
14116 <param name="info">Parcel resource usage information</param>
15751 </member> 14117 </member>
15752 <member name="T:OpenMetaverse.ParcelDwellReplyEventArgs"> 14118 <member name="T:OpenMetaverse.ParcelDwellReplyEventArgs">
15753 <summary>Contains a parcels dwell data returned from the simulator in response to an <see cref="!:RequestParcelDwell" /></summary> 14119 <summary>Contains a parcels dwell data returned from the simulator in response to an <see cref="!:RequestParcelDwell"/></summary>
15754 </member> 14120 </member>
15755 <member name="M:OpenMetaverse.ParcelDwellReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Int32,System.Single)"> 14121 <member name="M:OpenMetaverse.ParcelDwellReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Int32,System.Single)">
15756 <summary> 14122 <summary>
@@ -15770,29 +14136,29 @@
15770 <summary>Get the calculated dwell</summary> 14136 <summary>Get the calculated dwell</summary>
15771 </member> 14137 </member>
15772 <member name="T:OpenMetaverse.ParcelInfoReplyEventArgs"> 14138 <member name="T:OpenMetaverse.ParcelInfoReplyEventArgs">
15773 <summary>Contains basic parcel information data returned from the 14139 <summary>Contains basic parcel information data returned from the
15774 simulator in response to an <see cref="!:RequestParcelInfo" /> request</summary> 14140 simulator in response to an <see cref="!:RequestParcelInfo"/> request</summary>
15775 </member> 14141 </member>
15776 <member name="M:OpenMetaverse.ParcelInfoReplyEventArgs.#ctor(OpenMetaverse.ParcelInfo)"> 14142 <member name="M:OpenMetaverse.ParcelInfoReplyEventArgs.#ctor(OpenMetaverse.ParcelInfo)">
15777 <summary> 14143 <summary>
15778 Construct a new instance of the ParcelInfoReplyEventArgs class 14144 Construct a new instance of the ParcelInfoReplyEventArgs class
15779 </summary> 14145 </summary>
15780 <param name="parcel">The <see cref="T:OpenMetaverse.ParcelInfo" /> object containing basic parcel info</param> 14146 <param name="parcel">The <see cref="T:OpenMetaverse.ParcelInfo"/> object containing basic parcel info</param>
15781 </member> 14147 </member>
15782 <member name="P:OpenMetaverse.ParcelInfoReplyEventArgs.Parcel"> 14148 <member name="P:OpenMetaverse.ParcelInfoReplyEventArgs.Parcel">
15783 <summary>Get the <see cref="T:OpenMetaverse.ParcelInfo" /> object containing basic parcel info</summary> 14149 <summary>Get the <see cref="T:OpenMetaverse.ParcelInfo"/> object containing basic parcel info</summary>
15784 </member> 14150 </member>
15785 <member name="T:OpenMetaverse.ParcelPropertiesEventArgs"> 14151 <member name="T:OpenMetaverse.ParcelPropertiesEventArgs">
15786 <summary>Contains basic parcel information data returned from the simulator in response to an <see cref="!:RequestParcelInfo" /> request</summary> 14152 <summary>Contains basic parcel information data returned from the simulator in response to an <see cref="!:RequestParcelInfo"/> request</summary>
15787 </member> 14153 </member>
15788 <member name="M:OpenMetaverse.ParcelPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Parcel,OpenMetaverse.ParcelResult,System.Int32,System.Int32,System.Boolean)"> 14154 <member name="M:OpenMetaverse.ParcelPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Parcel,OpenMetaverse.ParcelResult,System.Int32,System.Int32,System.Boolean)">
15789 <summary> 14155 <summary>
15790 Construct a new instance of the ParcelPropertiesEventArgs class 14156 Construct a new instance of the ParcelPropertiesEventArgs class
15791 </summary> 14157 </summary>
15792 <param name="simulator">The <see cref="T:OpenMetaverse.Parcel" /> object containing the details</param> 14158 <param name="simulator">The <see cref="P:OpenMetaverse.ParcelPropertiesEventArgs.Parcel"/> object containing the details</param>
15793 <param name="parcel">The <see cref="T:OpenMetaverse.Parcel" /> object containing the details</param> 14159 <param name="parcel">The <see cref="P:OpenMetaverse.ParcelPropertiesEventArgs.Parcel"/> object containing the details</param>
15794 <param name="result">The result of the request</param> 14160 <param name="result">The result of the request</param>
15795 <param name="selectedPrims">The number of primitieves your agent is 14161 <param name="selectedPrims">The number of primitieves your agent is
15796 currently selecting and or sitting on in this parcel</param> 14162 currently selecting and or sitting on in this parcel</param>
15797 <param name="sequenceID">The user assigned ID used to correlate a request with 14163 <param name="sequenceID">The user assigned ID used to correlate a request with
15798 these results</param> 14164 these results</param>
@@ -15802,14 +14168,14 @@
15802 <summary>Get the simulator the parcel is located in</summary> 14168 <summary>Get the simulator the parcel is located in</summary>
15803 </member> 14169 </member>
15804 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.Parcel"> 14170 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.Parcel">
15805 <summary>Get the <see cref="T:OpenMetaverse.Parcel" /> object containing the details</summary> 14171 <summary>Get the <see cref="P:OpenMetaverse.ParcelPropertiesEventArgs.Parcel"/> object containing the details</summary>
15806 <remarks>If Result is NoData, this object will not contain valid data</remarks> 14172 <remarks>If Result is NoData, this object will not contain valid data</remarks>
15807 </member> 14173 </member>
15808 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.Result"> 14174 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.Result">
15809 <summary>Get the result of the request</summary> 14175 <summary>Get the result of the request</summary>
15810 </member> 14176 </member>
15811 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.SelectedPrims"> 14177 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.SelectedPrims">
15812 <summary>Get the number of primitieves your agent is 14178 <summary>Get the number of primitieves your agent is
15813 currently selecting and or sitting on in this parcel</summary> 14179 currently selecting and or sitting on in this parcel</summary>
15814 </member> 14180 </member>
15815 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.SequenceID"> 14181 <member name="P:OpenMetaverse.ParcelPropertiesEventArgs.SequenceID">
@@ -15820,7 +14186,7 @@
15820 <summary>TODO:</summary> 14186 <summary>TODO:</summary>
15821 </member> 14187 </member>
15822 <member name="T:OpenMetaverse.ParcelAccessListReplyEventArgs"> 14188 <member name="T:OpenMetaverse.ParcelAccessListReplyEventArgs">
15823 <summary>Contains blacklist and whitelist data returned from the simulator in response to an <see cref="!:RequestParcelAccesslist" /> request</summary> 14189 <summary>Contains blacklist and whitelist data returned from the simulator in response to an <see cref="!:RequestParcelAccesslist"/> request</summary>
15824 </member> 14190 </member>
15825 <member name="M:OpenMetaverse.ParcelAccessListReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Int32,System.Int32,System.UInt32,System.Collections.Generic.List{OpenMetaverse.ParcelManager.ParcelAccessEntry})"> 14191 <member name="M:OpenMetaverse.ParcelAccessListReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Int32,System.Int32,System.UInt32,System.Collections.Generic.List{OpenMetaverse.ParcelManager.ParcelAccessEntry})">
15826 <summary> 14192 <summary>
@@ -15850,8 +14216,8 @@
15850 <summary>Get the list containing the white/blacklisted agents for the parcel</summary> 14216 <summary>Get the list containing the white/blacklisted agents for the parcel</summary>
15851 </member> 14217 </member>
15852 <member name="T:OpenMetaverse.ParcelObjectOwnersReplyEventArgs"> 14218 <member name="T:OpenMetaverse.ParcelObjectOwnersReplyEventArgs">
15853 <summary>Contains blacklist and whitelist data returned from the 14219 <summary>Contains blacklist and whitelist data returned from the
15854 simulator in response to an <see cref="!:RequestParcelAccesslist" /> request</summary> 14220 simulator in response to an <see cref="!:RequestParcelAccesslist"/> request</summary>
15855 </member> 14221 </member>
15856 <member name="M:OpenMetaverse.ParcelObjectOwnersReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Collections.Generic.List{OpenMetaverse.ParcelManager.ParcelPrimOwners})"> 14222 <member name="M:OpenMetaverse.ParcelObjectOwnersReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Collections.Generic.List{OpenMetaverse.ParcelManager.ParcelPrimOwners})">
15857 <summary> 14223 <summary>
@@ -15869,7 +14235,7 @@
15869 <member name="T:OpenMetaverse.SimParcelsDownloadedEventArgs"> 14235 <member name="T:OpenMetaverse.SimParcelsDownloadedEventArgs">
15870 <summary>Contains the data returned when all parcel data has been retrieved from a simulator</summary> 14236 <summary>Contains the data returned when all parcel data has been retrieved from a simulator</summary>
15871 </member> 14237 </member>
15872 <member name="M:OpenMetaverse.SimParcelsDownloadedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.InternalDictionary{System.Int32,OpenMetaverse.Parcel},System.Int32[,])"> 14238 <member name="M:OpenMetaverse.SimParcelsDownloadedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.InternalDictionary{System.Int32,OpenMetaverse.Parcel},System.Int32[0:,0:])">
15873 <summary> 14239 <summary>
15874 Construct a new instance of the SimParcelsDownloadedEventArgs class 14240 Construct a new instance of the SimParcelsDownloadedEventArgs class
15875 </summary> 14241 </summary>
@@ -15889,7 +14255,7 @@
15889 to each 64x64 parcel's LocalID.</summary> 14255 to each 64x64 parcel's LocalID.</summary>
15890 </member> 14256 </member>
15891 <member name="T:OpenMetaverse.ForceSelectObjectsReplyEventArgs"> 14257 <member name="T:OpenMetaverse.ForceSelectObjectsReplyEventArgs">
15892 <summary>Contains the data returned when a <see cref="!:RequestForceSelectObjects" /> request</summary> 14258 <summary>Contains the data returned when a <see cref="!:RequestForceSelectObjects"/> request</summary>
15893 </member> 14259 </member>
15894 <member name="M:OpenMetaverse.ForceSelectObjectsReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},System.Boolean)"> 14260 <member name="M:OpenMetaverse.ForceSelectObjectsReplyEventArgs.#ctor(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},System.Boolean)">
15895 <summary> 14261 <summary>
@@ -15934,6724 +14300,7412 @@
15934 Construct a new instance of the ParcelMediaCommandEventArgs class 14300 Construct a new instance of the ParcelMediaCommandEventArgs class
15935 </summary> 14301 </summary>
15936 <param name="simulator">The simulator the parcel media command was issued in</param> 14302 <param name="simulator">The simulator the parcel media command was issued in</param>
15937 <param name="sequence"> 14303 <param name="sequence"></param>
15938 </param> 14304 <param name="flags"></param>
15939 <param name="flags">
15940 </param>
15941 <param name="command">The media command that was sent</param> 14305 <param name="command">The media command that was sent</param>
15942 <param name="time"> 14306 <param name="time"></param>
15943 </param>
15944 </member> 14307 </member>
15945 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Simulator"> 14308 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Simulator">
15946 <summary>Get the simulator the parcel media command was issued in</summary> 14309 <summary>Get the simulator the parcel media command was issued in</summary>
15947 </member> 14310 </member>
15948 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Sequence"> 14311 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Sequence">
15949 <summary> 14312 <summary></summary>
15950 </summary>
15951 </member> 14313 </member>
15952 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.ParcelFlags"> 14314 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.ParcelFlags">
15953 <summary> 14315 <summary></summary>
15954 </summary>
15955 </member> 14316 </member>
15956 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.MediaCommand"> 14317 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.MediaCommand">
15957 <summary>Get the media command that was sent</summary> 14318 <summary>Get the media command that was sent</summary>
15958 </member> 14319 </member>
15959 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Time"> 14320 <member name="P:OpenMetaverse.ParcelMediaCommandEventArgs.Time">
15960 <summary> 14321 <summary></summary>
15961 </summary>
15962 </member>
15963 <member name="T:OpenMetaverse.PermissionMask">
15964 <summary>
15965 </summary>
15966 </member>
15967 <member name="T:OpenMetaverse.PermissionWho">
15968 <summary>
15969 </summary>
15970 </member>
15971 <member name="F:OpenMetaverse.PermissionWho.Base">
15972 <summary>
15973 </summary>
15974 </member>
15975 <member name="F:OpenMetaverse.PermissionWho.Owner">
15976 <summary>
15977 </summary>
15978 </member>
15979 <member name="F:OpenMetaverse.PermissionWho.Group">
15980 <summary>
15981 </summary>
15982 </member>
15983 <member name="F:OpenMetaverse.PermissionWho.Everyone">
15984 <summary>
15985 </summary>
15986 </member>
15987 <member name="F:OpenMetaverse.PermissionWho.NextOwner">
15988 <summary>
15989 </summary>
15990 </member>
15991 <member name="F:OpenMetaverse.PermissionWho.All">
15992 <summary>
15993 </summary>
15994 </member> 14322 </member>
15995 <member name="T:OpenMetaverse.Permissions"> 14323 <member name="T:OpenMetaverse.NameValue">
15996 <summary>
15997 </summary>
15998 </member>
15999 <member name="T:OpenMetaverse.FieldType">
16000 <summary>
16001 </summary>
16002 </member>
16003 <member name="F:OpenMetaverse.FieldType.U8">
16004 <summary>
16005 </summary>
16006 </member>
16007 <member name="F:OpenMetaverse.FieldType.U16">
16008 <summary>
16009 </summary>
16010 </member>
16011 <member name="F:OpenMetaverse.FieldType.U32">
16012 <summary>
16013 </summary>
16014 </member>
16015 <member name="F:OpenMetaverse.FieldType.U64">
16016 <summary>
16017 </summary>
16018 </member>
16019 <member name="F:OpenMetaverse.FieldType.S8">
16020 <summary> 14324 <summary>
14325 A Name Value pair with additional settings, used in the protocol
14326 primarily to transmit avatar names and active group in object packets
16021 </summary> 14327 </summary>
16022 </member> 14328 </member>
16023 <member name="F:OpenMetaverse.FieldType.S16"> 14329 <member name="F:OpenMetaverse.NameValue.Name">
16024 <summary> 14330 <summary></summary>
16025 </summary>
16026 </member> 14331 </member>
16027 <member name="F:OpenMetaverse.FieldType.S32"> 14332 <member name="F:OpenMetaverse.NameValue.Type">
16028 <summary> 14333 <summary></summary>
16029 </summary>
16030 </member> 14334 </member>
16031 <member name="F:OpenMetaverse.FieldType.F32"> 14335 <member name="F:OpenMetaverse.NameValue.Class">
16032 <summary> 14336 <summary></summary>
16033 </summary>
16034 </member> 14337 </member>
16035 <member name="F:OpenMetaverse.FieldType.F64"> 14338 <member name="F:OpenMetaverse.NameValue.Sendto">
16036 <summary> 14339 <summary></summary>
16037 </summary>
16038 </member> 14340 </member>
16039 <member name="F:OpenMetaverse.FieldType.UUID"> 14341 <member name="F:OpenMetaverse.NameValue.Value">
16040 <summary> 14342 <summary></summary>
16041 </summary>
16042 </member> 14343 </member>
16043 <member name="F:OpenMetaverse.FieldType.BOOL"> 14344 <member name="M:OpenMetaverse.NameValue.#ctor(System.String,OpenMetaverse.NameValue.ValueType,OpenMetaverse.NameValue.ClassType,OpenMetaverse.NameValue.SendtoType,System.Object)">
16044 <summary> 14345 <summary>
14346 Constructor that takes all the fields as parameters
16045 </summary> 14347 </summary>
14348 <param name="name"></param>
14349 <param name="valueType"></param>
14350 <param name="classType"></param>
14351 <param name="sendtoType"></param>
14352 <param name="value"></param>
16046 </member> 14353 </member>
16047 <member name="F:OpenMetaverse.FieldType.Vector3"> 14354 <member name="M:OpenMetaverse.NameValue.#ctor(System.String)">
16048 <summary> 14355 <summary>
14356 Constructor that takes a single line from a NameValue field
16049 </summary> 14357 </summary>
14358 <param name="data"></param>
16050 </member> 14359 </member>
16051 <member name="F:OpenMetaverse.FieldType.Vector3d"> 14360 <member name="T:OpenMetaverse.NameValue.ValueType">
16052 <summary> 14361 <summary>Type of the value</summary>
16053 </summary>
16054 </member> 14362 </member>
16055 <member name="F:OpenMetaverse.FieldType.Vector4"> 14363 <member name="F:OpenMetaverse.NameValue.ValueType.Unknown">
16056 <summary> 14364 <summary>Unknown</summary>
16057 </summary>
16058 </member> 14365 </member>
16059 <member name="F:OpenMetaverse.FieldType.Quaternion"> 14366 <member name="F:OpenMetaverse.NameValue.ValueType.String">
16060 <summary> 14367 <summary>String value</summary>
16061 </summary>
16062 </member> 14368 </member>
16063 <member name="F:OpenMetaverse.FieldType.IPADDR"> 14369 <member name="F:OpenMetaverse.NameValue.ValueType.F32">
16064 <summary> 14370 <summary></summary>
16065 </summary>
16066 </member> 14371 </member>
16067 <member name="F:OpenMetaverse.FieldType.IPPORT"> 14372 <member name="F:OpenMetaverse.NameValue.ValueType.S32">
16068 <summary> 14373 <summary></summary>
16069 </summary>
16070 </member> 14374 </member>
16071 <member name="F:OpenMetaverse.FieldType.Variable"> 14375 <member name="F:OpenMetaverse.NameValue.ValueType.VEC3">
16072 <summary> 14376 <summary></summary>
16073 </summary>
16074 </member> 14377 </member>
16075 <member name="F:OpenMetaverse.FieldType.Fixed"> 14378 <member name="F:OpenMetaverse.NameValue.ValueType.U32">
16076 <summary> 14379 <summary></summary>
16077 </summary>
16078 </member> 14380 </member>
16079 <member name="F:OpenMetaverse.FieldType.Single"> 14381 <member name="F:OpenMetaverse.NameValue.ValueType.CAMERA">
16080 <summary> 14382 <summary>Deprecated</summary>
16081 </summary>
16082 </member> 14383 </member>
16083 <member name="F:OpenMetaverse.FieldType.Multiple"> 14384 <member name="F:OpenMetaverse.NameValue.ValueType.Asset">
16084 <summary> 14385 <summary>String value, but designated as an asset</summary>
16085 </summary>
16086 </member> 14386 </member>
16087 <member name="T:OpenMetaverse.MapField"> 14387 <member name="F:OpenMetaverse.NameValue.ValueType.U64">
16088 <summary> 14388 <summary></summary>
16089 </summary>
16090 </member> 14389 </member>
16091 <member name="F:OpenMetaverse.MapField.KeywordPosition"> 14390 <member name="T:OpenMetaverse.NameValue.ClassType">
16092 <summary> 14391 <summary>
14392
16093 </summary> 14393 </summary>
16094 </member> 14394 </member>
16095 <member name="F:OpenMetaverse.MapField.Name"> 14395 <member name="F:OpenMetaverse.NameValue.ClassType.Unknown">
16096 <summary> 14396 <summary></summary>
16097 </summary>
16098 </member> 14397 </member>
16099 <member name="F:OpenMetaverse.MapField.Type"> 14398 <member name="F:OpenMetaverse.NameValue.ClassType.ReadOnly">
16100 <summary> 14399 <summary></summary>
16101 </summary>
16102 </member> 14400 </member>
16103 <member name="F:OpenMetaverse.MapField.Count"> 14401 <member name="F:OpenMetaverse.NameValue.ClassType.ReadWrite">
16104 <summary> 14402 <summary></summary>
16105 </summary>
16106 </member> 14403 </member>
16107 <member name="M:OpenMetaverse.MapField.CompareTo(System.Object)"> 14404 <member name="F:OpenMetaverse.NameValue.ClassType.Callback">
16108 <summary> 14405 <summary></summary>
16109 </summary>
16110 <param name="obj">
16111 </param>
16112 <returns>
16113 </returns>
16114 </member> 14406 </member>
16115 <member name="T:OpenMetaverse.MapBlock"> 14407 <member name="T:OpenMetaverse.NameValue.SendtoType">
16116 <summary> 14408 <summary>
14409
16117 </summary> 14410 </summary>
16118 </member> 14411 </member>
16119 <member name="F:OpenMetaverse.MapBlock.KeywordPosition"> 14412 <member name="F:OpenMetaverse.NameValue.SendtoType.Unknown">
16120 <summary> 14413 <summary></summary>
16121 </summary>
16122 </member> 14414 </member>
16123 <member name="F:OpenMetaverse.MapBlock.Name"> 14415 <member name="F:OpenMetaverse.NameValue.SendtoType.Sim">
16124 <summary> 14416 <summary></summary>
16125 </summary>
16126 </member> 14417 </member>
16127 <member name="F:OpenMetaverse.MapBlock.Count"> 14418 <member name="F:OpenMetaverse.NameValue.SendtoType.DataSim">
16128 <summary> 14419 <summary></summary>
16129 </summary>
16130 </member> 14420 </member>
16131 <member name="F:OpenMetaverse.MapBlock.Fields"> 14421 <member name="F:OpenMetaverse.NameValue.SendtoType.SimViewer">
16132 <summary> 14422 <summary></summary>
16133 </summary>
16134 </member> 14423 </member>
16135 <member name="M:OpenMetaverse.MapBlock.CompareTo(System.Object)"> 14424 <member name="F:OpenMetaverse.NameValue.SendtoType.DataSimViewer">
16136 <summary> 14425 <summary></summary>
16137 </summary>
16138 <param name="obj">
16139 </param>
16140 <returns>
16141 </returns>
16142 </member> 14426 </member>
16143 <member name="T:OpenMetaverse.MapPacket"> 14427 <member name="T:OpenMetaverse.Rendering.LindenMesh.LODMesh">
16144 <summary> 14428 <summary>
14429 Level of Detail mesh
16145 </summary> 14430 </summary>
16146 </member> 14431 </member>
16147 <member name="F:OpenMetaverse.MapPacket.ID"> 14432 <member name="T:OpenMetaverse.Assets.TarArchiveWriter">
16148 <summary> 14433 <summary>
14434 Temporary code to produce a tar archive in tar v7 format
16149 </summary> 14435 </summary>
16150 </member> 14436 </member>
16151 <member name="F:OpenMetaverse.MapPacket.Name"> 14437 <member name="F:OpenMetaverse.Assets.TarArchiveWriter.m_bw">
16152 <summary> 14438 <summary>
14439 Binary writer for the underlying stream
16153 </summary> 14440 </summary>
16154 </member> 14441 </member>
16155 <member name="F:OpenMetaverse.MapPacket.Frequency"> 14442 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteDir(System.String)">
16156 <summary> 14443 <summary>
14444 Write a directory entry to the tar archive. We can only handle one path level right now!
16157 </summary> 14445 </summary>
14446 <param name="dirName"></param>
16158 </member> 14447 </member>
16159 <member name="F:OpenMetaverse.MapPacket.Trusted"> 14448 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteFile(System.String,System.String)">
16160 <summary> 14449 <summary>
14450 Write a file to the tar archive
16161 </summary> 14451 </summary>
14452 <param name="filePath"></param>
14453 <param name="data"></param>
16162 </member> 14454 </member>
16163 <member name="F:OpenMetaverse.MapPacket.Encoded"> 14455 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteFile(System.String,System.Byte[])">
16164 <summary> 14456 <summary>
14457 Write a file to the tar archive
16165 </summary> 14458 </summary>
14459 <param name="filePath"></param>
14460 <param name="data"></param>
16166 </member> 14461 </member>
16167 <member name="F:OpenMetaverse.MapPacket.Blocks"> 14462 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.Close">
16168 <summary> 14463 <summary>
14464 Finish writing the raw tar archive data to a stream. The stream will be closed on completion.
16169 </summary> 14465 </summary>
16170 </member> 14466 </member>
16171 <member name="T:OpenMetaverse.ProtocolManager"> 14467 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteEntry(System.String,System.Byte[],System.Char)">
16172 <summary> 14468 <summary>
14469 Write a particular entry
16173 </summary> 14470 </summary>
14471 <param name="filePath"></param>
14472 <param name="data"></param>
14473 <param name="fileType"></param>
16174 </member> 14474 </member>
16175 <member name="M:OpenMetaverse.ProtocolManager.#ctor(System.String,OpenMetaverse.GridClient)"> 14475 <member name="T:OpenMetaverse.Assets.TarArchiveReader">
16176 <summary> 14476 <summary>
14477 Temporary code to do the bare minimum required to read a tar archive for our purposes
16177 </summary> 14478 </summary>
16178 <param name="mapFile">
16179 </param>
16180 <param name="client">
16181 </param>
16182 </member> 14479 </member>
16183 <member name="F:OpenMetaverse.ProtocolManager.TypeSizes"> 14480 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_br">
16184 <summary> 14481 <summary>
14482 Binary reader for the underlying stream
16185 </summary> 14483 </summary>
16186 </member> 14484 </member>
16187 <member name="F:OpenMetaverse.ProtocolManager.KeywordPositions"> 14485 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_nullCharArray">
16188 <summary> 14486 <summary>
14487 Used to trim off null chars
16189 </summary> 14488 </summary>
16190 </member> 14489 </member>
16191 <member name="F:OpenMetaverse.ProtocolManager.LowMaps"> 14490 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_spaceCharArray">
16192 <summary> 14491 <summary>
14492 Used to trim off space chars
16193 </summary> 14493 </summary>
16194 </member> 14494 </member>
16195 <member name="F:OpenMetaverse.ProtocolManager.MediumMaps"> 14495 <member name="M:OpenMetaverse.Assets.TarArchiveReader.#ctor(System.IO.Stream)">
16196 <summary> 14496 <summary>
14497 Generate a tar reader which reads from the given stream.
16197 </summary> 14498 </summary>
14499 <param name="s"></param>
16198 </member> 14500 </member>
16199 <member name="F:OpenMetaverse.ProtocolManager.HighMaps"> 14501 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadEntry(System.String@,OpenMetaverse.Assets.TarArchiveReader.TarEntryType@)">
16200 <summary> 14502 <summary>
14503 Read the next entry in the tar file.
16201 </summary> 14504 </summary>
14505 <param name="filePath"></param>
14506 <param name="entryType"></param>
14507 <returns>the data for the entry. Returns null if there are no more entries</returns>
16202 </member> 14508 </member>
16203 <member name="M:OpenMetaverse.ProtocolManager.Command(System.String)"> 14509 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadHeader">
16204 <summary> 14510 <summary>
14511 Read the next 512 byte chunk of data as a tar header.
16205 </summary> 14512 </summary>
16206 <param name="command"> 14513 <returns>A tar header struct. null if we have reached the end of the archive.</returns>
16207 </param>
16208 <returns>
16209 </returns>
16210 </member> 14514 </member>
16211 <member name="M:OpenMetaverse.ProtocolManager.Command(System.Byte[])"> 14515 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadData(System.Int32)">
16212 <summary> 14516 <summary>
14517 Read data following a header
16213 </summary> 14518 </summary>
16214 <param name="data"> 14519 <param name="fileSize"></param>
16215 </param> 14520 <returns></returns>
16216 <returns>
16217 </returns>
16218 </member> 14521 </member>
16219 <member name="M:OpenMetaverse.ProtocolManager.Command(System.UInt16,OpenMetaverse.PacketFrequency)"> 14522 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ConvertOctalBytesToDecimal(System.Byte[],System.Int32,System.Int32)">
16220 <summary> 14523 <summary>
14524 Convert octal bytes to a decimal representation
16221 </summary> 14525 </summary>
16222 <param name="command"> 14526 <param name="bytes"></param>
16223 </param> 14527 <param name="count"></param>
16224 <param name="frequency"> 14528 <param name="startIndex"></param>
16225 </param> 14529 <returns></returns>
16226 <returns>
16227 </returns>
16228 </member> 14530 </member>
16229 <member name="M:OpenMetaverse.ProtocolManager.PrintMap"> 14531 <member name="T:OpenMetaverse.VisualColorOperation">
16230 <summary> 14532 <summary>
14533 Operation to apply when applying color to texture
16231 </summary> 14534 </summary>
16232 </member> 14535 </member>
16233 <member name="M:OpenMetaverse.ProtocolManager.PrintOneMap(OpenMetaverse.MapPacket[],System.String)"> 14536 <member name="T:OpenMetaverse.VisualColorParam">
16234 <summary> 14537 <summary>
14538 Information needed to translate visual param value to RGBA color
16235 </summary> 14539 </summary>
16236 <param name="map">
16237 </param>
16238 <param name="frequency">
16239 </param>
16240 </member> 14540 </member>
16241 <member name="M:OpenMetaverse.ProtocolManager.DecodeMapFile(System.String,System.String)"> 14541 <member name="M:OpenMetaverse.VisualColorParam.#ctor(OpenMetaverse.VisualColorOperation,OpenMetaverse.Color4[])">
16242 <summary> 14542 <summary>
14543 Construct VisualColorParam
16243 </summary> 14544 </summary>
16244 <param name="mapFile"> 14545 <param name="operation">Operation to apply when applying color to texture</param>
16245 </param> 14546 <param name="colors">Colors</param>
16246 <param name="outputFile">
16247 </param>
16248 </member> 14547 </member>
16249 <member name="M:OpenMetaverse.ProtocolManager.LoadMapFile(System.String)"> 14548 <member name="T:OpenMetaverse.VisualAlphaParam">
16250 <summary> 14549 <summary>
14550 Represents alpha blending and bump infor for a visual parameter
14551 such as sleive length
16251 </summary> 14552 </summary>
16252 <param name="mapFile">
16253 </param>
16254 </member> 14553 </member>
16255 <member name="T:OpenMetaverse.Settings"> 14554 <member name="F:OpenMetaverse.VisualAlphaParam.Domain">
16256 <summary> 14555 <summary>Stregth of the alpha to apply</summary>
16257 Class for controlling various system settings.
16258 </summary>
16259 <remarks>Some values are readonly because they affect things that
16260 happen when the GridClient object is initialized, so changing them at
16261 runtime won't do any good. Non-readonly values may affect things that
16262 happen at login or dynamically</remarks>
16263 </member> 14556 </member>
16264 <member name="M:OpenMetaverse.Settings.#ctor(OpenMetaverse.GridClient)"> 14557 <member name="F:OpenMetaverse.VisualAlphaParam.TGAFile">
16265 <summary>Constructor</summary> 14558 <summary>File containing the alpha channel</summary>
16266 <param name="client">Reference to a GridClient object</param>
16267 </member> 14559 </member>
16268 <member name="F:OpenMetaverse.Settings.AGNI_LOGIN_SERVER"> 14560 <member name="F:OpenMetaverse.VisualAlphaParam.SkipIfZero">
16269 <summary>Main grid login server</summary> 14561 <summary>Skip blending if parameter value is 0</summary>
16270 </member> 14562 </member>
16271 <member name="F:OpenMetaverse.Settings.ADITI_LOGIN_SERVER"> 14563 <member name="F:OpenMetaverse.VisualAlphaParam.MultiplyBlend">
16272 <summary>Beta grid login server</summary> 14564 <summary>Use miltiply insted of alpha blending</summary>
16273 </member> 14565 </member>
16274 <member name="F:OpenMetaverse.Settings.ENABLE_INVENTORY_STORE"> 14566 <member name="M:OpenMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)">
16275 <summary> 14567 <summary>
16276 InventoryManager requests inventory information on login, 14568 Create new alhpa information for a visual param
16277 GridClient initializes an Inventory store for main inventory.
16278 </summary> 14569 </summary>
14570 <param name="domain">Stregth of the alpha to apply</param>
14571 <param name="tgaFile">File containing the alpha channel</param>
14572 <param name="skipIfZero">Skip blending if parameter value is 0</param>
14573 <param name="multiplyBlend">Use miltiply insted of alpha blending</param>
16279 </member> 14574 </member>
16280 <member name="F:OpenMetaverse.Settings.ENABLE_LIBRARY_STORE"> 14575 <member name="T:OpenMetaverse.VisualParam">
16281 <summary> 14576 <summary>
16282 InventoryManager requests library information on login, 14577 A single visual characteristic of an avatar mesh, such as eyebrow height
16283 GridClient initializes an Inventory store for the library.
16284 </summary> 14578 </summary>
16285 </member> 14579 </member>
16286 <member name="F:OpenMetaverse.Settings.PING_INTERVAL"> 14580 <member name="F:OpenMetaverse.VisualParam.ParamID">
16287 <summary>Number of milliseconds between sending pings to each sim</summary> 14581 <summary>Index of this visual param</summary>
16288 </member>
16289 <member name="F:OpenMetaverse.Settings.DEFAULT_AGENT_UPDATE_INTERVAL">
16290 <summary>Number of milliseconds between sending camera updates</summary>
16291 </member>
16292 <member name="F:OpenMetaverse.Settings.INTERPOLATION_INTERVAL">
16293 <summary>Number of milliseconds between updating the current
16294 positions of moving, non-accelerating and non-colliding objects</summary>
16295 </member>
16296 <member name="F:OpenMetaverse.Settings.NETWORK_TICK_INTERVAL">
16297 <summary>Millisecond interval between ticks, where all ACKs are
16298 sent out and the age of unACKed packets is checked</summary>
16299 </member>
16300 <member name="F:OpenMetaverse.Settings.PACKET_INBOX_SIZE">
16301 <summary>The initial size of the packet inbox, where packets are
16302 stored before processing</summary>
16303 </member>
16304 <member name="F:OpenMetaverse.Settings.MAX_PACKET_SIZE">
16305 <summary>Maximum size of packet that we want to send over the wire</summary>
16306 </member>
16307 <member name="F:OpenMetaverse.Settings.MAX_SEQUENCE">
16308 <summary>The maximum value of a packet sequence number before it
16309 rolls over back to one</summary>
16310 </member>
16311 <member name="F:OpenMetaverse.Settings.PACKET_ARCHIVE_SIZE">
16312 <summary>The maximum size of the sequence number archive, used to
16313 check for resent and/or duplicate packets</summary>
16314 </member>
16315 <member name="F:OpenMetaverse.Settings.RESOURCE_DIR">
16316 <summary>The relative directory where external resources are kept</summary>
16317 </member>
16318 <member name="F:OpenMetaverse.Settings.LOGIN_SERVER">
16319 <summary>Login server to connect to</summary>
16320 </member>
16321 <member name="F:OpenMetaverse.Settings.BIND_ADDR">
16322 <summary>IP Address the client will bind to</summary>
16323 </member>
16324 <member name="F:OpenMetaverse.Settings.USE_LLSD_LOGIN">
16325 <summary>Use XML-RPC Login or LLSD Login, default is XML-RPC Login</summary>
16326 </member>
16327 <member name="F:OpenMetaverse.Settings.TRANSFER_TIMEOUT">
16328 <summary>Number of milliseconds before an asset transfer will time
16329 out</summary>
16330 </member>
16331 <member name="F:OpenMetaverse.Settings.TELEPORT_TIMEOUT">
16332 <summary>Number of milliseconds before a teleport attempt will time
16333 out</summary>
16334 </member>
16335 <member name="F:OpenMetaverse.Settings.LOGOUT_TIMEOUT">
16336 <summary>Number of milliseconds before NetworkManager.Logout() will
16337 time out</summary>
16338 </member>
16339 <member name="F:OpenMetaverse.Settings.CAPS_TIMEOUT">
16340 <summary>Number of milliseconds before a CAPS call will time out</summary>
16341 <remarks>Setting this too low will cause web requests time out and
16342 possibly retry repeatedly</remarks>
16343 </member>
16344 <member name="F:OpenMetaverse.Settings.LOGIN_TIMEOUT">
16345 <summary>Number of milliseconds for xml-rpc to timeout</summary>
16346 </member>
16347 <member name="F:OpenMetaverse.Settings.RESEND_TIMEOUT">
16348 <summary>Milliseconds before a packet is assumed lost and resent</summary>
16349 </member>
16350 <member name="F:OpenMetaverse.Settings.SIMULATOR_TIMEOUT">
16351 <summary>Milliseconds without receiving a packet before the
16352 connection to a simulator is assumed lost</summary>
16353 </member>
16354 <member name="F:OpenMetaverse.Settings.MAP_REQUEST_TIMEOUT">
16355 <summary>Milliseconds to wait for a simulator info request through
16356 the grid interface</summary>
16357 </member>
16358 <member name="F:OpenMetaverse.Settings.MAX_PENDING_ACKS">
16359 <summary>Maximum number of queued ACKs to be sent before SendAcks()
16360 is forced</summary>
16361 </member>
16362 <member name="F:OpenMetaverse.Settings.STATS_QUEUE_SIZE">
16363 <summary>Network stats queue length (seconds)</summary>
16364 </member>
16365 <member name="F:OpenMetaverse.Settings.STORE_LAND_PATCHES">
16366 <summary>Enable/disable storing terrain heightmaps in the
16367 TerrainManager</summary>
16368 </member>
16369 <member name="F:OpenMetaverse.Settings.SEND_AGENT_UPDATES">
16370 <summary>Enable/disable sending periodic camera updates</summary>
16371 </member>
16372 <member name="F:OpenMetaverse.Settings.SEND_AGENT_APPEARANCE">
16373 <summary>Enable/disable automatically setting agent appearance at
16374 login and after sim crossing</summary>
16375 </member>
16376 <member name="F:OpenMetaverse.Settings.SEND_AGENT_THROTTLE">
16377 <summary>Enable/disable automatically setting the bandwidth throttle
16378 after connecting to each simulator</summary>
16379 <remarks>The default throttle uses the equivalent of the maximum
16380 bandwidth setting in the official client. If you do not set a
16381 throttle your connection will by default be throttled well below
16382 the minimum values and you may experience connection problems</remarks>
16383 </member>
16384 <member name="F:OpenMetaverse.Settings.SEND_PINGS">
16385 <summary>Enable/disable the sending of pings to monitor lag and
16386 packet loss</summary>
16387 </member> 14582 </member>
16388 <member name="F:OpenMetaverse.Settings.MULTIPLE_SIMS"> 14583 <member name="F:OpenMetaverse.VisualParam.Name">
16389 <summary>Should we connect to multiple sims? This will allow 14584 <summary>Internal name</summary>
16390 viewing in to neighboring simulators and sim crossings
16391 (Experimental)</summary>
16392 </member> 14585 </member>
16393 <member name="F:OpenMetaverse.Settings.ALWAYS_DECODE_OBJECTS"> 14586 <member name="F:OpenMetaverse.VisualParam.Group">
16394 <summary>If true, all object update packets will be decoded in to 14587 <summary>Group ID this parameter belongs to</summary>
16395 native objects. If false, only updates for our own agent will be
16396 decoded. Registering an event handler will force objects for that
16397 type to always be decoded. If this is disabled the object tracking
16398 will have missing or partial prim and avatar information</summary>
16399 </member> 14588 </member>
16400 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_OBJECTS"> 14589 <member name="F:OpenMetaverse.VisualParam.Wearable">
16401 <summary>If true, when a cached object check is received from the 14590 <summary>Name of the wearable this parameter belongs to</summary>
16402 server the full object info will automatically be requested</summary>
16403 </member> 14591 </member>
16404 <member name="F:OpenMetaverse.Settings.ENABLE_CAPS"> 14592 <member name="F:OpenMetaverse.VisualParam.Label">
16405 <summary>Whether to establish connections to HTTP capabilities 14593 <summary>Displayable label of this characteristic</summary>
16406 servers for simulators</summary>
16407 </member> 14594 </member>
16408 <member name="F:OpenMetaverse.Settings.ENABLE_SIMSTATS"> 14595 <member name="F:OpenMetaverse.VisualParam.LabelMin">
16409 <summary>Whether to decode sim stats</summary> 14596 <summary>Displayable label for the minimum value of this characteristic</summary>
16410 </member> 14597 </member>
16411 <member name="F:OpenMetaverse.Settings.LOG_ALL_CAPS_ERRORS"> 14598 <member name="F:OpenMetaverse.VisualParam.LabelMax">
16412 <summary>The capabilities servers are currently designed to 14599 <summary>Displayable label for the maximum value of this characteristic</summary>
16413 periodically return a 502 error which signals for the client to
16414 re-establish a connection. Set this to true to log those 502 errors</summary>
16415 </member> 14600 </member>
16416 <member name="F:OpenMetaverse.Settings.FETCH_MISSING_INVENTORY"> 14601 <member name="F:OpenMetaverse.VisualParam.DefaultValue">
16417 <summary>If true, any reference received for a folder or item 14602 <summary>Default value</summary>
16418 the library is not aware of will automatically be fetched</summary>
16419 </member> 14603 </member>
16420 <member name="F:OpenMetaverse.Settings.DISABLE_AGENT_UPDATE_DUPLICATE_CHECK"> 14604 <member name="F:OpenMetaverse.VisualParam.MinValue">
16421 <summary>If true, and <code>SEND_AGENT_UPDATES</code> is true, 14605 <summary>Minimum value</summary>
16422 AgentUpdate packets will continuously be sent out to give the bot
16423 smoother movement and autopiloting</summary>
16424 </member> 14606 </member>
16425 <member name="F:OpenMetaverse.Settings.AVATAR_TRACKING"> 14607 <member name="F:OpenMetaverse.VisualParam.MaxValue">
16426 <summary>If true, currently visible avatars will be stored 14608 <summary>Maximum value</summary>
16427 in dictionaries inside <code>Simulator.ObjectAvatars</code>.
16428 If false, a new Avatar or Primitive object will be created
16429 each time an object update packet is received</summary>
16430 </member> 14609 </member>
16431 <member name="F:OpenMetaverse.Settings.OBJECT_TRACKING"> 14610 <member name="F:OpenMetaverse.VisualParam.IsBumpAttribute">
16432 <summary>If true, currently visible avatars will be stored 14611 <summary>Is this param used for creation of bump layer?</summary>
16433 in dictionaries inside <code>Simulator.ObjectPrimitives</code>.
16434 If false, a new Avatar or Primitive object will be created
16435 each time an object update packet is received</summary>
16436 </member> 14612 </member>
16437 <member name="F:OpenMetaverse.Settings.USE_INTERPOLATION_TIMER"> 14613 <member name="F:OpenMetaverse.VisualParam.AlphaParams">
16438 <summary>If true, position and velocity will periodically be 14614 <summary>Alpha blending/bump info</summary>
16439 interpolated (extrapolated, technically) for objects and
16440 avatars that are being tracked by the library. This is
16441 necessary to increase the accuracy of speed and position
16442 estimates for simulated objects</summary>
16443 </member> 14615 </member>
16444 <member name="F:OpenMetaverse.Settings.TRACK_UTILIZATION"> 14616 <member name="F:OpenMetaverse.VisualParam.ColorParams">
16445 <summary> 14617 <summary>Color information</summary>
16446 If true, utilization statistics will be tracked. There is a minor penalty
16447 in CPU time for enabling this option.
16448 </summary>
16449 </member> 14618 </member>
16450 <member name="F:OpenMetaverse.Settings.PARCEL_TRACKING"> 14619 <member name="F:OpenMetaverse.VisualParam.Drivers">
16451 <summary>If true, parcel details will be stored in the 14620 <summary>Array of param IDs that are drivers for this parameter</summary>
16452 <code>Simulator.Parcels</code> dictionary as they are received</summary>
16453 </member> 14621 </member>
16454 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_PARCEL_ACL"> 14622 <member name="M:OpenMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{OpenMetaverse.VisualAlphaParam},System.Nullable{OpenMetaverse.VisualColorParam})">
16455 <summary> 14623 <summary>
16456 If true, an incoming parcel properties reply will automatically send 14624 Set all the values through the constructor
16457 a request for the parcel access list
16458 </summary> 14625 </summary>
14626 <param name="paramID">Index of this visual param</param>
14627 <param name="name">Internal name</param>
14628 <param name="group"></param>
14629 <param name="wearable"></param>
14630 <param name="label">Displayable label of this characteristic</param>
14631 <param name="labelMin">Displayable label for the minimum value of this characteristic</param>
14632 <param name="labelMax">Displayable label for the maximum value of this characteristic</param>
14633 <param name="def">Default value</param>
14634 <param name="min">Minimum value</param>
14635 <param name="max">Maximum value</param>
14636 <param name="isBumpAttribute">Is this param used for creation of bump layer?</param>
14637 <param name="drivers">Array of param IDs that are drivers for this parameter</param>
14638 <param name="alpha">Alpha blending/bump info</param>
14639 <param name="colorParams">Color information</param>
16459 </member> 14640 </member>
16460 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_PARCEL_DWELL"> 14641 <member name="T:OpenMetaverse.VisualParams">
16461 <summary> 14642 <summary>
16462 if true, an incoming parcel properties reply will automatically send 14643 Holds the Params array of all the avatar appearance parameters
16463 a request for the traffic count.
16464 </summary> 14644 </summary>
16465 </member> 14645 </member>
16466 <member name="F:OpenMetaverse.Settings.USE_ASSET_CACHE"> 14646 <member name="T:OpenMetaverse.UDPBase">
16467 <summary> 14647 <summary>
16468 If true, images, and other assets downloaded from the server 14648
16469 will be cached in a local directory
16470 </summary> 14649 </summary>
16471 </member> 14650 </member>
16472 <member name="F:OpenMetaverse.Settings.ASSET_CACHE_DIR"> 14651 <member name="M:OpenMetaverse.UDPBase.#ctor(System.Int32)">
16473 <summary>Path to store cached texture data</summary>
16474 </member>
16475 <member name="F:OpenMetaverse.Settings.ASSET_CACHE_MAX_SIZE">
16476 <summary>Maximum size cached files are allowed to take on disk (bytes)</summary>
16477 </member>
16478 <member name="F:OpenMetaverse.Settings.DEFAULT_EFFECT_COLOR">
16479 <summary>Default color used for viewer particle effects</summary>
16480 </member>
16481 <member name="F:OpenMetaverse.Settings.MAX_RESEND_COUNT">
16482 <summary>Maximum number of times to resend a failed packet</summary>
16483 </member>
16484 <member name="F:OpenMetaverse.Settings.THROTTLE_OUTGOING_PACKETS">
16485 <summary>Throttle outgoing packet rate</summary>
16486 </member>
16487 <member name="F:OpenMetaverse.Settings.CLIENT_IDENTIFICATION_TAG">
16488 <summary>UUID of a texture used by some viewers to indentify type of client used</summary>
16489 </member>
16490 <member name="F:OpenMetaverse.Settings.USE_HTTP_TEXTURES">
16491 <summary> 14652 <summary>
16492 Download textures using GetTexture capability when available 14653 Initialize the UDP packet handler in server mode
16493 </summary> 14654 </summary>
14655 <param name="port">Port to listening for incoming UDP packets on</param>
16494 </member> 14656 </member>
16495 <member name="F:OpenMetaverse.Settings.MAX_CONCURRENT_TEXTURE_DOWNLOADS"> 14657 <member name="M:OpenMetaverse.UDPBase.#ctor(System.Net.IPEndPoint)">
16496 <summary>The maximum number of concurrent texture downloads allowed</summary>
16497 <remarks>Increasing this number will not necessarily increase texture retrieval times due to
16498 simulator throttles</remarks>
16499 </member>
16500 <member name="F:OpenMetaverse.Settings.PIPELINE_REFRESH_INTERVAL">
16501 <summary> 14658 <summary>
16502 The Refresh timer inteval is used to set the delay between checks for stalled texture downloads 14659 Initialize the UDP packet handler in client mode
16503 </summary> 14660 </summary>
16504 <remarks>This is a static variable which applies to all instances</remarks> 14661 <param name="endPoint">Remote UDP server to connect to</param>
16505 </member> 14662 </member>
16506 <member name="F:OpenMetaverse.Settings.PIPELINE_REQUEST_TIMEOUT"> 14663 <member name="M:OpenMetaverse.UDPBase.Start">
16507 <summary> 14664 <summary>
16508 Textures taking longer than this value will be flagged as timed out and removed from the pipeline 14665
16509 </summary> 14666 </summary>
16510 </member> 14667 </member>
16511 <member name="F:OpenMetaverse.Settings.LOG_LEVEL"> 14668 <member name="M:OpenMetaverse.UDPBase.Stop">
16512 <summary> 14669 <summary>
16513 Get or set the minimum log level to output to the console by default 14670
16514 If the library is not compiled with DEBUG defined and this level is set to DEBUG
16515 You will get no output on the console. This behavior can be overriden by creating
16516 a logger configuration file for log4net
16517 </summary> 14671 </summary>
16518 </member> 14672 </member>
16519 <member name="F:OpenMetaverse.Settings.LOG_NAMES"> 14673 <member name="P:OpenMetaverse.UDPBase.IsRunning">
16520 <summary>Attach avatar names to log messages</summary>
16521 </member>
16522 <member name="F:OpenMetaverse.Settings.LOG_RESENDS">
16523 <summary>Log packet retransmission info</summary>
16524 </member>
16525 <member name="P:OpenMetaverse.Settings.UPLOAD_COST">
16526 <summary>Cost of uploading an asset</summary>
16527 <remarks>Read-only since this value is dynamically fetched at login</remarks>
16528 </member>
16529 <member name="M:OpenMetaverse.Settings.EconomyDataHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
16530 <summary>Process an incoming packet and raise the appropriate events</summary>
16531 <param name="sender">The sender</param>
16532 <param name="e">The EventArgs object containing the packet data</param>
16533 </member>
16534 <member name="T:OpenMetaverse.RegionFlags">
16535 <summary> 14674 <summary>
16536 Simulator (region) properties 14675
16537 </summary> 14676 </summary>
16538 </member> 14677 </member>
16539 <member name="F:OpenMetaverse.RegionFlags.None"> 14678 <member name="T:OpenMetaverse.Helpers">
16540 <summary>No flags set</summary>
16541 </member>
16542 <member name="F:OpenMetaverse.RegionFlags.AllowDamage">
16543 <summary>Agents can take damage and be killed</summary>
16544 </member>
16545 <member name="F:OpenMetaverse.RegionFlags.AllowLandmark">
16546 <summary>Landmarks can be created here</summary>
16547 </member>
16548 <member name="F:OpenMetaverse.RegionFlags.AllowSetHome">
16549 <summary>Home position can be set in this sim</summary>
16550 </member>
16551 <member name="F:OpenMetaverse.RegionFlags.ResetHomeOnTeleport">
16552 <summary>Home position is reset when an agent teleports away</summary>
16553 </member>
16554 <member name="F:OpenMetaverse.RegionFlags.SunFixed">
16555 <summary>Sun does not move</summary>
16556 </member>
16557 <member name="F:OpenMetaverse.RegionFlags.TaxFree">
16558 <summary>No object, land, etc. taxes</summary>
16559 </member>
16560 <member name="F:OpenMetaverse.RegionFlags.BlockTerraform">
16561 <summary>Disable heightmap alterations (agents can still plant
16562 foliage)</summary>
16563 </member>
16564 <member name="F:OpenMetaverse.RegionFlags.BlockLandResell">
16565 <summary>Land cannot be released, sold, or purchased</summary>
16566 </member>
16567 <member name="F:OpenMetaverse.RegionFlags.Sandbox">
16568 <summary>All content is wiped nightly</summary>
16569 </member>
16570 <member name="F:OpenMetaverse.RegionFlags.NullLayer">
16571 <summary>Unknown: Related to the availability of an overview world map tile.(Think mainland images when zoomed out.)</summary>
16572 </member>
16573 <member name="F:OpenMetaverse.RegionFlags.SkipAgentAction">
16574 <summary>Unknown: Related to region debug flags. Possibly to skip processing of agent interaction with world. </summary>
16575 </member>
16576 <member name="F:OpenMetaverse.RegionFlags.SkipUpdateInterestList">
16577 <summary>Region does not update agent prim interest lists. Internal debugging option.</summary>
16578 </member>
16579 <member name="F:OpenMetaverse.RegionFlags.SkipCollisions">
16580 <summary>No collision detection for non-agent objects</summary>
16581 </member>
16582 <member name="F:OpenMetaverse.RegionFlags.SkipScripts">
16583 <summary>No scripts are ran</summary>
16584 </member>
16585 <member name="F:OpenMetaverse.RegionFlags.SkipPhysics">
16586 <summary>All physics processing is turned off</summary>
16587 </member>
16588 <member name="F:OpenMetaverse.RegionFlags.ExternallyVisible">
16589 <summary>Region can be seen from other regions on world map. (Legacy world map option?) </summary>
16590 </member>
16591 <member name="F:OpenMetaverse.RegionFlags.MainlandVisible">
16592 <summary>Region can be seen from mainland on world map. (Legacy world map option?) </summary>
16593 </member>
16594 <member name="F:OpenMetaverse.RegionFlags.PublicAllowed">
16595 <summary>Agents not explicitly on the access list can visit the region. </summary>
16596 </member>
16597 <member name="F:OpenMetaverse.RegionFlags.BlockDwell">
16598 <summary>Traffic calculations are not run across entire region, overrides parcel settings. </summary>
16599 </member>
16600 <member name="F:OpenMetaverse.RegionFlags.NoFly">
16601 <summary>Flight is disabled (not currently enforced by the sim)</summary>
16602 </member>
16603 <member name="F:OpenMetaverse.RegionFlags.AllowDirectTeleport">
16604 <summary>Allow direct (p2p) teleporting</summary>
16605 </member>
16606 <member name="F:OpenMetaverse.RegionFlags.EstateSkipScripts">
16607 <summary>Estate owner has temporarily disabled scripting</summary>
16608 </member>
16609 <member name="F:OpenMetaverse.RegionFlags.RestrictPushObject">
16610 <summary>Restricts the usage of the LSL llPushObject function, applies to whole region.</summary>
16611 </member>
16612 <member name="F:OpenMetaverse.RegionFlags.DenyAnonymous">
16613 <summary>Deny agents with no payment info on file</summary>
16614 </member>
16615 <member name="F:OpenMetaverse.RegionFlags.DenyIdentified">
16616 <summary>Deny agents with payment info on file</summary>
16617 </member>
16618 <member name="F:OpenMetaverse.RegionFlags.DenyTransacted">
16619 <summary>Deny agents who have made a monetary transaction</summary>
16620 </member>
16621 <member name="F:OpenMetaverse.RegionFlags.AllowParcelChanges">
16622 <summary>Parcels within the region may be joined or divided by anyone, not just estate owners/managers. </summary>
16623 </member>
16624 <member name="F:OpenMetaverse.RegionFlags.AbuseEmailToEstateOwner">
16625 <summary>Abuse reports sent from within this region are sent to the estate owner defined email. </summary>
16626 </member>
16627 <member name="F:OpenMetaverse.RegionFlags.AllowVoice">
16628 <summary>Region is Voice Enabled</summary>
16629 </member>
16630 <member name="F:OpenMetaverse.RegionFlags.BlockParcelSearch">
16631 <summary>Removes the ability from parcel owners to set their parcels to show in search.</summary>
16632 </member>
16633 <member name="F:OpenMetaverse.RegionFlags.DenyAgeUnverified">
16634 <summary>Deny agents who have not been age verified from entering the region.</summary>
16635 </member>
16636 <member name="T:OpenMetaverse.SimAccess">
16637 <summary> 14679 <summary>
16638 Access level for a simulator 14680 Static helper functions and global variables
16639 </summary> 14681 </summary>
16640 </member> 14682 </member>
16641 <member name="F:OpenMetaverse.SimAccess.Unknown"> 14683 <member name="F:OpenMetaverse.Helpers.MSG_APPENDED_ACKS">
16642 <summary>Unknown or invalid access level</summary> 14684 <summary>This header flag signals that ACKs are appended to the packet</summary>
16643 </member>
16644 <member name="F:OpenMetaverse.SimAccess.Trial">
16645 <summary>Trial accounts allowed</summary>
16646 </member>
16647 <member name="F:OpenMetaverse.SimAccess.PG">
16648 <summary>PG rating</summary>
16649 </member>
16650 <member name="F:OpenMetaverse.SimAccess.Mature">
16651 <summary>Mature rating</summary>
16652 </member>
16653 <member name="F:OpenMetaverse.SimAccess.Adult">
16654 <summary>Adult rating</summary>
16655 </member> 14685 </member>
16656 <member name="F:OpenMetaverse.SimAccess.Down"> 14686 <member name="F:OpenMetaverse.Helpers.MSG_RESENT">
16657 <summary>Simulator is offline</summary> 14687 <summary>This header flag signals that this packet has been sent before</summary>
16658 </member> 14688 </member>
16659 <member name="F:OpenMetaverse.SimAccess.NonExistent"> 14689 <member name="F:OpenMetaverse.Helpers.MSG_RELIABLE">
16660 <summary>Simulator does not exist</summary> 14690 <summary>This header flags signals that an ACK is expected for this packet</summary>
16661 </member> 14691 </member>
16662 <member name="T:OpenMetaverse.Simulator"> 14692 <member name="F:OpenMetaverse.Helpers.MSG_ZEROCODED">
16663 <summary> 14693 <summary>This header flag signals that the message is compressed using zerocoding</summary>
16664 </summary>
16665 </member> 14694 </member>
16666 <member name="M:OpenMetaverse.Simulator.#ctor(OpenMetaverse.GridClient,System.Net.IPEndPoint,System.UInt64)"> 14695 <member name="M:OpenMetaverse.Helpers.TEOffsetShort(System.Single)">
16667 <summary> 14696 <summary>
14697
16668 </summary> 14698 </summary>
16669 <param name="client">Reference to the GridClient object</param> 14699 <param name="offset"></param>
16670 <param name="address">IPEndPoint of the simulator</param> 14700 <returns></returns>
16671 <param name="handle">handle of the simulator</param>
16672 </member> 14701 </member>
16673 <member name="T:OpenMetaverse.Simulator.SimStats"> 14702 <member name="M:OpenMetaverse.Helpers.TEOffsetFloat(System.Byte[],System.Int32)">
16674 <summary> 14703 <summary>
16675 Simulator Statistics 14704
16676 </summary> 14705 </summary>
14706 <param name="bytes"></param>
14707 <param name="pos"></param>
14708 <returns></returns>
16677 </member> 14709 </member>
16678 <member name="F:OpenMetaverse.Simulator.SimStats.SentPackets"> 14710 <member name="M:OpenMetaverse.Helpers.TERotationShort(System.Single)">
16679 <summary>Total number of packets sent by this simulator to this agent</summary>
16680 </member>
16681 <member name="F:OpenMetaverse.Simulator.SimStats.RecvPackets">
16682 <summary>Total number of packets received by this simulator to this agent</summary>
16683 </member>
16684 <member name="F:OpenMetaverse.Simulator.SimStats.SentBytes">
16685 <summary>Total number of bytes sent by this simulator to this agent</summary>
16686 </member>
16687 <member name="F:OpenMetaverse.Simulator.SimStats.RecvBytes">
16688 <summary>Total number of bytes received by this simulator to this agent</summary>
16689 </member>
16690 <member name="F:OpenMetaverse.Simulator.SimStats.ConnectTime">
16691 <summary>Time in seconds agent has been connected to simulator</summary>
16692 </member>
16693 <member name="F:OpenMetaverse.Simulator.SimStats.ResentPackets">
16694 <summary>Total number of packets that have been resent</summary>
16695 </member>
16696 <member name="F:OpenMetaverse.Simulator.SimStats.ReceivedResends">
16697 <summary>Total number of resent packets recieved</summary>
16698 </member>
16699 <member name="F:OpenMetaverse.Simulator.SimStats.SentPings">
16700 <summary>Total number of pings sent to this simulator by this agent</summary>
16701 </member>
16702 <member name="F:OpenMetaverse.Simulator.SimStats.ReceivedPongs">
16703 <summary>Total number of ping replies sent to this agent by this simulator</summary>
16704 </member>
16705 <member name="F:OpenMetaverse.Simulator.SimStats.IncomingBPS">
16706 <summary> 14711 <summary>
16707 Incoming bytes per second 14712
16708 </summary> 14713 </summary>
16709 <remarks>It would be nice to have this claculated on the fly, but 14714 <param name="rotation"></param>
16710 this is far, far easier</remarks> 14715 <returns></returns>
16711 </member> 14716 </member>
16712 <member name="F:OpenMetaverse.Simulator.SimStats.OutgoingBPS"> 14717 <member name="M:OpenMetaverse.Helpers.TERotationFloat(System.Byte[],System.Int32)">
16713 <summary> 14718 <summary>
16714 Outgoing bytes per second 14719
16715 </summary> 14720 </summary>
16716 <remarks>It would be nice to have this claculated on the fly, but 14721 <param name="bytes"></param>
16717 this is far, far easier</remarks> 14722 <param name="pos"></param>
14723 <returns></returns>
16718 </member> 14724 </member>
16719 <member name="F:OpenMetaverse.Simulator.SimStats.LastPingSent"> 14725 <member name="M:OpenMetaverse.Helpers.GlobalPosToRegionHandle(System.Single,System.Single,System.Single@,System.Single@)">
16720 <summary>Time last ping was sent</summary>
16721 </member>
16722 <member name="F:OpenMetaverse.Simulator.SimStats.LastPingID">
16723 <summary>ID of last Ping sent</summary>
16724 </member>
16725 <member name="F:OpenMetaverse.Simulator.SimStats.LastLag">
16726 <summary> 14726 <summary>
14727 Given an X/Y location in absolute (grid-relative) terms, a region
14728 handle is returned along with the local X/Y location in that region
16727 </summary> 14729 </summary>
14730 <param name="globalX">The absolute X location, a number such as
14731 255360.35</param>
14732 <param name="globalY">The absolute Y location, a number such as
14733 255360.35</param>
14734 <param name="localX">The sim-local X position of the global X
14735 position, a value from 0.0 to 256.0</param>
14736 <param name="localY">The sim-local Y position of the global Y
14737 position, a value from 0.0 to 256.0</param>
14738 <returns>A 64-bit region handle that can be used to teleport to</returns>
16728 </member> 14739 </member>
16729 <member name="F:OpenMetaverse.Simulator.SimStats.MissedPings"> 14740 <member name="M:OpenMetaverse.Helpers.FloatToTerseString(System.Single)">
16730 <summary> 14741 <summary>
14742 Converts a floating point number to a terse string format used for
14743 transmitting numbers in wearable asset files
16731 </summary> 14744 </summary>
14745 <param name="val">Floating point number to convert to a string</param>
14746 <returns>A terse string representation of the input number</returns>
16732 </member> 14747 </member>
16733 <member name="F:OpenMetaverse.Simulator.SimStats.Dilation"> 14748 <member name="M:OpenMetaverse.Helpers.FieldToString(System.Text.StringBuilder,System.Byte[],System.String)">
16734 <summary>Current time dilation of this simulator</summary>
16735 </member>
16736 <member name="F:OpenMetaverse.Simulator.SimStats.FPS">
16737 <summary>Current Frames per second of simulator</summary>
16738 </member>
16739 <member name="F:OpenMetaverse.Simulator.SimStats.PhysicsFPS">
16740 <summary>Current Physics frames per second of simulator</summary>
16741 </member>
16742 <member name="F:OpenMetaverse.Simulator.SimStats.AgentUpdates">
16743 <summary> 14749 <summary>
14750 Convert a variable length field (byte array) to a string, with a
14751 field name prepended to each line of the output
16744 </summary> 14752 </summary>
14753 <remarks>If the byte array has unprintable characters in it, a
14754 hex dump will be written instead</remarks>
14755 <param name="output">The StringBuilder object to write to</param>
14756 <param name="bytes">The byte array to convert to a string</param>
14757 <param name="fieldName">A field name to prepend to each line of output</param>
16745 </member> 14758 </member>
16746 <member name="F:OpenMetaverse.Simulator.SimStats.FrameTime"> 14759 <member name="M:OpenMetaverse.Helpers.ZeroDecode(System.Byte[],System.Int32,System.Byte[])">
16747 <summary> 14760 <summary>
14761 Decode a zerocoded byte array, used to decompress packets marked
14762 with the zerocoded flag
16748 </summary> 14763 </summary>
14764 <remarks>Any time a zero is encountered, the next byte is a count
14765 of how many zeroes to expand. One zero is encoded with 0x00 0x01,
14766 two zeroes is 0x00 0x02, three zeroes is 0x00 0x03, etc. The
14767 first four bytes are copied directly to the output buffer.
14768 </remarks>
14769 <param name="src">The byte array to decode</param>
14770 <param name="srclen">The length of the byte array to decode. This
14771 would be the length of the packet up to (but not including) any
14772 appended ACKs</param>
14773 <param name="dest">The output byte array to decode to</param>
14774 <returns>The length of the output buffer</returns>
16749 </member> 14775 </member>
16750 <member name="F:OpenMetaverse.Simulator.SimStats.NetTime"> 14776 <member name="M:OpenMetaverse.Helpers.ZeroEncode(System.Byte[],System.Int32,System.Byte[])">
16751 <summary> 14777 <summary>
14778 Encode a byte array with zerocoding. Used to compress packets marked
14779 with the zerocoded flag. Any zeroes in the array are compressed down
14780 to a single zero byte followed by a count of how many zeroes to expand
14781 out. A single zero becomes 0x00 0x01, two zeroes becomes 0x00 0x02,
14782 three zeroes becomes 0x00 0x03, etc. The first four bytes are copied
14783 directly to the output buffer.
16752 </summary> 14784 </summary>
14785 <param name="src">The byte array to encode</param>
14786 <param name="srclen">The length of the byte array to encode</param>
14787 <param name="dest">The output byte array to encode to</param>
14788 <returns>The length of the output buffer</returns>
16753 </member> 14789 </member>
16754 <member name="F:OpenMetaverse.Simulator.SimStats.PhysicsTime"> 14790 <member name="M:OpenMetaverse.Helpers.InventoryCRC(System.Int32,System.Byte,System.SByte,System.SByte,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Int32,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32)">
16755 <summary> 14791 <summary>
14792 Calculates the CRC (cyclic redundancy check) needed to upload inventory.
16756 </summary> 14793 </summary>
14794 <param name="creationDate">Creation date</param>
14795 <param name="saleType">Sale type</param>
14796 <param name="invType">Inventory type</param>
14797 <param name="type">Type</param>
14798 <param name="assetID">Asset ID</param>
14799 <param name="groupID">Group ID</param>
14800 <param name="salePrice">Sale price</param>
14801 <param name="ownerID">Owner ID</param>
14802 <param name="creatorID">Creator ID</param>
14803 <param name="itemID">Item ID</param>
14804 <param name="folderID">Folder ID</param>
14805 <param name="everyoneMask">Everyone mask (permissions)</param>
14806 <param name="flags">Flags</param>
14807 <param name="nextOwnerMask">Next owner mask (permissions)</param>
14808 <param name="groupMask">Group mask (permissions)</param>
14809 <param name="ownerMask">Owner mask (permissions)</param>
14810 <returns>The calculated CRC</returns>
16757 </member> 14811 </member>
16758 <member name="F:OpenMetaverse.Simulator.SimStats.ImageTime"> 14812 <member name="M:OpenMetaverse.Helpers.GetResourceStream(System.String)">
16759 <summary> 14813 <summary>
14814 Attempts to load a file embedded in the assembly
16760 </summary> 14815 </summary>
14816 <param name="resourceName">The filename of the resource to load</param>
14817 <returns>A Stream for the requested file, or null if the resource
14818 was not successfully loaded</returns>
16761 </member> 14819 </member>
16762 <member name="F:OpenMetaverse.Simulator.SimStats.ScriptTime"> 14820 <member name="M:OpenMetaverse.Helpers.GetResourceStream(System.String,System.String)">
16763 <summary> 14821 <summary>
14822 Attempts to load a file either embedded in the assembly or found in
14823 a given search path
16764 </summary> 14824 </summary>
14825 <param name="resourceName">The filename of the resource to load</param>
14826 <param name="searchPath">An optional path that will be searched if
14827 the asset is not found embedded in the assembly</param>
14828 <returns>A Stream for the requested file, or null if the resource
14829 was not successfully loaded</returns>
16765 </member> 14830 </member>
16766 <member name="F:OpenMetaverse.Simulator.SimStats.AgentTime"> 14831 <member name="M:OpenMetaverse.Helpers.PrimListToOSD(System.Collections.Generic.List{OpenMetaverse.Primitive})">
16767 <summary> 14832 <summary>
14833 Converts a list of primitives to an object that can be serialized
14834 with the LLSD system
16768 </summary> 14835 </summary>
14836 <param name="prims">Primitives to convert to a serializable object</param>
14837 <returns>An object that can be serialized with LLSD</returns>
16769 </member> 14838 </member>
16770 <member name="F:OpenMetaverse.Simulator.SimStats.OtherTime"> 14839 <member name="M:OpenMetaverse.Helpers.OSDToPrimList(OpenMetaverse.StructuredData.OSD)">
16771 <summary> 14840 <summary>
14841 Deserializes OSD in to a list of primitives
16772 </summary> 14842 </summary>
14843 <param name="osd">Structure holding the serialized primitive list,
14844 must be of the SDMap type</param>
14845 <returns>A list of deserialized primitives</returns>
16773 </member> 14846 </member>
16774 <member name="F:OpenMetaverse.Simulator.SimStats.Objects"> 14847 <member name="M:OpenMetaverse.Helpers.StructToString(System.Object)">
16775 <summary>Total number of objects Simulator is simulating</summary> 14848 <summary>
16776 </member> 14849 Converts a struct or class object containing fields only into a key value separated string
16777 <member name="F:OpenMetaverse.Simulator.SimStats.ScriptedObjects"> 14850 </summary>
16778 <summary>Total number of Active (Scripted) objects running</summary> 14851 <param name="t">The struct object</param>
16779 </member> 14852 <returns>A string containing the struct fields as the keys, and the field value as the value separated</returns>
16780 <member name="F:OpenMetaverse.Simulator.SimStats.Agents"> 14853 <example>
16781 <summary>Number of agents currently in this simulator</summary> 14854 <code>
16782 </member> 14855 // Add the following code to any struct or class containing only fields to override the ToString()
16783 <member name="F:OpenMetaverse.Simulator.SimStats.ChildAgents"> 14856 // method to display the values of the passed object
16784 <summary>Number of agents in neighbor simulators</summary> 14857
16785 </member> 14858 /// <summary>Print the struct data as a string</summary>
16786 <member name="F:OpenMetaverse.Simulator.SimStats.ActiveScripts"> 14859 ///<returns>A string containing the field name, and field value</returns>
16787 <summary>Number of Active scripts running in this simulator</summary> 14860 public override string ToString()
16788 </member> 14861 {
16789 <member name="F:OpenMetaverse.Simulator.SimStats.LSLIPS"> 14862 return Helpers.StructToString(this);
16790 <summary> 14863 }
16791 </summary> 14864 </code>
14865 </example>
16792 </member> 14866 </member>
16793 <member name="F:OpenMetaverse.Simulator.SimStats.INPPS"> 14867 <member name="T:OpenMetaverse.Helpers.LogLevel">
16794 <summary> 14868 <summary>
14869 Passed to Logger.Log() to identify the severity of a log entry
16795 </summary> 14870 </summary>
16796 </member> 14871 </member>
16797 <member name="F:OpenMetaverse.Simulator.SimStats.OUTPPS"> 14872 <member name="F:OpenMetaverse.Helpers.LogLevel.None">
16798 <summary> 14873 <summary>No logging information will be output</summary>
16799 </summary>
16800 </member> 14874 </member>
16801 <member name="F:OpenMetaverse.Simulator.SimStats.PendingDownloads"> 14875 <member name="F:OpenMetaverse.Helpers.LogLevel.Info">
16802 <summary>Number of downloads pending</summary> 14876 <summary>Non-noisy useful information, may be helpful in
14877 debugging a problem</summary>
16803 </member> 14878 </member>
16804 <member name="F:OpenMetaverse.Simulator.SimStats.PendingUploads"> 14879 <member name="F:OpenMetaverse.Helpers.LogLevel.Warning">
16805 <summary>Number of uploads pending</summary> 14880 <summary>A non-critical error occurred. A warning will not
14881 prevent the rest of the library from operating as usual,
14882 although it may be indicative of an underlying issue</summary>
16806 </member> 14883 </member>
16807 <member name="F:OpenMetaverse.Simulator.SimStats.VirtualSize"> 14884 <member name="F:OpenMetaverse.Helpers.LogLevel.Error">
16808 <summary> 14885 <summary>A critical error has occurred. Generally this will
16809 </summary> 14886 be followed by the network layer shutting down, although the
14887 stability of the library after an error is uncertain</summary>
16810 </member> 14888 </member>
16811 <member name="F:OpenMetaverse.Simulator.SimStats.ResidentSize"> 14889 <member name="F:OpenMetaverse.Helpers.LogLevel.Debug">
16812 <summary> 14890 <summary>Used for internal testing, this logging level can
14891 generate very noisy (long and/or repetitive) messages. Don't
14892 pass this to the Log() function, use DebugLog() instead.
16813 </summary> 14893 </summary>
16814 </member> 14894 </member>
16815 <member name="F:OpenMetaverse.Simulator.SimStats.PendingLocalUploads"> 14895 <member name="F:OpenMetaverse.Http.EventQueueClient.REQUEST_TIMEOUT">
16816 <summary>Number of local uploads pending</summary> 14896 <summary>=</summary>
16817 </member>
16818 <member name="F:OpenMetaverse.Simulator.SimStats.UnackedBytes">
16819 <summary>Unacknowledged bytes in queue</summary>
16820 </member>
16821 <member name="F:OpenMetaverse.Simulator.Client">
16822 <summary>A public reference to the client that this Simulator object
16823 is attached to</summary>
16824 </member>
16825 <member name="F:OpenMetaverse.Simulator.ID">
16826 <summary>A Unique Cache identifier for this simulator</summary>
16827 </member>
16828 <member name="F:OpenMetaverse.Simulator.Caps">
16829 <summary>The capabilities for this simulator</summary>
16830 </member> 14897 </member>
16831 <member name="F:OpenMetaverse.Simulator.Handle"> 14898 <member name="F:OpenMetaverse.Http.EventQueueClient._errorCount">
16832 <summary> 14899 <summary>Number of times we've received an unknown CAPS exception in series.</summary>
16833 </summary>
16834 </member> 14900 </member>
16835 <member name="F:OpenMetaverse.Simulator.SimVersion"> 14901 <member name="F:OpenMetaverse.Http.EventQueueClient._random">
16836 <summary>The current version of software this simulator is running</summary> 14902 <summary>For exponential backoff on error.</summary>
16837 </member> 14903 </member>
16838 <member name="F:OpenMetaverse.Simulator.Name"> 14904 <member name="T:OpenMetaverse.Bumpiness">
16839 <summary> 14905 <summary>
14906 The type of bump-mapping applied to a face
16840 </summary> 14907 </summary>
16841 </member> 14908 </member>
16842 <member name="F:OpenMetaverse.Simulator.ParcelOverlay"> 14909 <member name="F:OpenMetaverse.Bumpiness.None">
16843 <summary>A 64x64 grid of parcel coloring values. The values stored 14910 <summary></summary>
16844 in this array are of the <seealso cref="!:ParcelArrayType" /> type</summary>
16845 </member> 14911 </member>
16846 <member name="F:OpenMetaverse.Simulator.ParcelOverlaysReceived"> 14912 <member name="F:OpenMetaverse.Bumpiness.Brightness">
16847 <summary> 14913 <summary></summary>
16848 </summary>
16849 </member> 14914 </member>
16850 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange00"> 14915 <member name="F:OpenMetaverse.Bumpiness.Darkness">
16851 <summary> 14916 <summary></summary>
16852 </summary>
16853 </member> 14917 </member>
16854 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange01"> 14918 <member name="F:OpenMetaverse.Bumpiness.Woodgrain">
16855 <summary> 14919 <summary></summary>
16856 </summary>
16857 </member> 14920 </member>
16858 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange10"> 14921 <member name="F:OpenMetaverse.Bumpiness.Bark">
16859 <summary> 14922 <summary></summary>
16860 </summary>
16861 </member> 14923 </member>
16862 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange11"> 14924 <member name="F:OpenMetaverse.Bumpiness.Bricks">
16863 <summary> 14925 <summary></summary>
16864 </summary>
16865 </member> 14926 </member>
16866 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight00"> 14927 <member name="F:OpenMetaverse.Bumpiness.Checker">
16867 <summary> 14928 <summary></summary>
16868 </summary>
16869 </member> 14929 </member>
16870 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight01"> 14930 <member name="F:OpenMetaverse.Bumpiness.Concrete">
16871 <summary> 14931 <summary></summary>
16872 </summary>
16873 </member> 14932 </member>
16874 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight10"> 14933 <member name="F:OpenMetaverse.Bumpiness.Crustytile">
16875 <summary> 14934 <summary></summary>
16876 </summary>
16877 </member> 14935 </member>
16878 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight11"> 14936 <member name="F:OpenMetaverse.Bumpiness.Cutstone">
16879 <summary> 14937 <summary></summary>
16880 </summary>
16881 </member> 14938 </member>
16882 <member name="F:OpenMetaverse.Simulator.WaterHeight"> 14939 <member name="F:OpenMetaverse.Bumpiness.Discs">
16883 <summary> 14940 <summary></summary>
16884 </summary>
16885 </member> 14941 </member>
16886 <member name="F:OpenMetaverse.Simulator.SimOwner"> 14942 <member name="F:OpenMetaverse.Bumpiness.Gravel">
16887 <summary> 14943 <summary></summary>
16888 </summary>
16889 </member> 14944 </member>
16890 <member name="F:OpenMetaverse.Simulator.TerrainBase0"> 14945 <member name="F:OpenMetaverse.Bumpiness.Petridish">
16891 <summary> 14946 <summary></summary>
16892 </summary>
16893 </member> 14947 </member>
16894 <member name="F:OpenMetaverse.Simulator.TerrainBase1"> 14948 <member name="F:OpenMetaverse.Bumpiness.Siding">
16895 <summary> 14949 <summary></summary>
16896 </summary>
16897 </member> 14950 </member>
16898 <member name="F:OpenMetaverse.Simulator.TerrainBase2"> 14951 <member name="F:OpenMetaverse.Bumpiness.Stonetile">
16899 <summary> 14952 <summary></summary>
16900 </summary>
16901 </member> 14953 </member>
16902 <member name="F:OpenMetaverse.Simulator.TerrainBase3"> 14954 <member name="F:OpenMetaverse.Bumpiness.Stucco">
16903 <summary> 14955 <summary></summary>
16904 </summary>
16905 </member> 14956 </member>
16906 <member name="F:OpenMetaverse.Simulator.TerrainDetail0"> 14957 <member name="F:OpenMetaverse.Bumpiness.Suction">
16907 <summary> 14958 <summary></summary>
16908 </summary>
16909 </member> 14959 </member>
16910 <member name="F:OpenMetaverse.Simulator.TerrainDetail1"> 14960 <member name="F:OpenMetaverse.Bumpiness.Weave">
16911 <summary> 14961 <summary></summary>
16912 </summary>
16913 </member> 14962 </member>
16914 <member name="F:OpenMetaverse.Simulator.TerrainDetail2"> 14963 <member name="T:OpenMetaverse.Shininess">
16915 <summary> 14964 <summary>
14965 The level of shininess applied to a face
16916 </summary> 14966 </summary>
16917 </member> 14967 </member>
16918 <member name="F:OpenMetaverse.Simulator.TerrainDetail3"> 14968 <member name="F:OpenMetaverse.Shininess.None">
16919 <summary> 14969 <summary></summary>
16920 </summary>
16921 </member> 14970 </member>
16922 <member name="F:OpenMetaverse.Simulator.IsEstateManager"> 14971 <member name="F:OpenMetaverse.Shininess.Low">
16923 <summary>true if your agent has Estate Manager rights on this region</summary> 14972 <summary></summary>
16924 </member> 14973 </member>
16925 <member name="F:OpenMetaverse.Simulator.Flags"> 14974 <member name="F:OpenMetaverse.Shininess.Medium">
16926 <summary> 14975 <summary></summary>
16927 </summary>
16928 </member> 14976 </member>
16929 <member name="F:OpenMetaverse.Simulator.Access"> 14977 <member name="F:OpenMetaverse.Shininess.High">
16930 <summary> 14978 <summary></summary>
16931 </summary>
16932 </member> 14979 </member>
16933 <member name="F:OpenMetaverse.Simulator.BillableFactor"> 14980 <member name="T:OpenMetaverse.MappingType">
16934 <summary> 14981 <summary>
14982 The texture mapping style used for a face
16935 </summary> 14983 </summary>
16936 </member> 14984 </member>
16937 <member name="F:OpenMetaverse.Simulator.Stats"> 14985 <member name="F:OpenMetaverse.MappingType.Default">
16938 <summary>Statistics information for this simulator and the 14986 <summary></summary>
16939 connection to the simulator, calculated by the simulator itself
16940 and the library</summary>
16941 </member>
16942 <member name="F:OpenMetaverse.Simulator.RegionID">
16943 <summary>The regions Unique ID</summary>
16944 </member>
16945 <member name="F:OpenMetaverse.Simulator.ColoLocation">
16946 <summary>The physical data center the simulator is located</summary>
16947 <remarks>Known values are:
16948 <list type="table"><item>Dallas</item><item>Chandler</item><item>SF</item></list></remarks>
16949 </member>
16950 <member name="F:OpenMetaverse.Simulator.CPUClass">
16951 <summary>The CPU Class of the simulator</summary>
16952 <remarks>Most full mainland/estate sims appear to be 5,
16953 Homesteads and Openspace appear to be 501</remarks>
16954 </member>
16955 <member name="F:OpenMetaverse.Simulator.CPURatio">
16956 <summary>The number of regions sharing the same CPU as this one</summary>
16957 <remarks>"Full Sims" appear to be 1, Homesteads appear to be 4</remarks>
16958 </member>
16959 <member name="F:OpenMetaverse.Simulator.ProductName">
16960 <summary>The billing product name</summary>
16961 <remarks>Known values are:
16962 <list type="table"><item>Mainland / Full Region (Sku: 023)</item><item>Estate / Full Region (Sku: 024)</item><item>Estate / Openspace (Sku: 027)</item><item>Estate / Homestead (Sku: 029)</item><item>Mainland / Homestead (Sku: 129) (Linden Owned)</item><item>Mainland / Linden Homes (Sku: 131)</item></list></remarks>
16963 </member>
16964 <member name="F:OpenMetaverse.Simulator.ProductSku">
16965 <summary>The billing product SKU</summary>
16966 <remarks>Known values are:
16967 <list type="table"><item>023 Mainland / Full Region</item><item>024 Estate / Full Region</item><item>027 Estate / Openspace</item><item>029 Estate / Homestead</item><item>129 Mainland / Homestead (Linden Owned)</item><item>131 Linden Homes / Full Region</item></list></remarks>
16968 </member>
16969 <member name="F:OpenMetaverse.Simulator.Sequence">
16970 <summary>The current sequence number for packets sent to this
16971 simulator. Must be Interlocked before modifying. Only
16972 useful for applications manipulating sequence numbers</summary>
16973 </member> 14987 </member>
16974 <member name="F:OpenMetaverse.Simulator.ObjectsAvatars"> 14988 <member name="F:OpenMetaverse.MappingType.Planar">
16975 <summary> 14989 <summary></summary>
16976 A thread-safe dictionary containing avatars in a simulator
16977 </summary>
16978 </member> 14990 </member>
16979 <member name="F:OpenMetaverse.Simulator.ObjectsPrimitives"> 14991 <member name="F:OpenMetaverse.MappingType.Spherical">
16980 <summary> 14992 <summary></summary>
16981 A thread-safe dictionary containing primitives in a simulator
16982 </summary>
16983 </member> 14993 </member>
16984 <member name="F:OpenMetaverse.Simulator.Parcels"> 14994 <member name="F:OpenMetaverse.MappingType.Cylindrical">
16985 <summary> 14995 <summary></summary>
16986 Provides access to an internal thread-safe dictionary containing parcel
16987 information found in this simulator
16988 </summary>
16989 </member> 14996 </member>
16990 <member name="F:OpenMetaverse.Simulator.AgentMovementComplete"> 14997 <member name="T:OpenMetaverse.TextureAttributes">
16991 <summary> 14998 <summary>
16992 Is it safe to send agent updates to this sim 14999 Flags in the TextureEntry block that describe which properties are
16993 AgentMovementComplete message received 15000 set
16994 </summary> 15001 </summary>
16995 </member> 15002 </member>
16996 <member name="F:OpenMetaverse.Simulator.DisconnectCandidate"> 15003 <member name="F:OpenMetaverse.TextureAttributes.None">
16997 <summary>Used internally to track sim disconnections</summary> 15004 <summary></summary>
16998 </member>
16999 <member name="F:OpenMetaverse.Simulator.ConnectedEvent">
17000 <summary>Event that is triggered when the simulator successfully
17001 establishes a connection</summary>
17002 </member>
17003 <member name="F:OpenMetaverse.Simulator.connected">
17004 <summary>Whether this sim is currently connected or not. Hooked up
17005 to the property Connected</summary>
17006 </member>
17007 <member name="F:OpenMetaverse.Simulator.avatarPositions">
17008 <summary>Coarse locations of avatars in this simulator</summary>
17009 </member>
17010 <member name="F:OpenMetaverse.Simulator.preyID">
17011 <summary>AvatarPositions key representing TrackAgent target</summary>
17012 </member> 15005 </member>
17013 <member name="F:OpenMetaverse.Simulator.PacketArchive"> 15006 <member name="F:OpenMetaverse.TextureAttributes.TextureID">
17014 <summary>Sequence numbers of packets we've received 15007 <summary></summary>
17015 (for duplicate checking)</summary>
17016 </member> 15008 </member>
17017 <member name="F:OpenMetaverse.Simulator.NeedAck"> 15009 <member name="F:OpenMetaverse.TextureAttributes.RGBA">
17018 <summary>Packets we sent out that need ACKs from the simulator</summary> 15010 <summary></summary>
17019 </member> 15011 </member>
17020 <member name="F:OpenMetaverse.Simulator.pauseSerial"> 15012 <member name="F:OpenMetaverse.TextureAttributes.RepeatU">
17021 <summary>Sequence number for pause/resume</summary> 15013 <summary></summary>
17022 </member> 15014 </member>
17023 <member name="F:OpenMetaverse.Simulator.handshakeComplete"> 15015 <member name="F:OpenMetaverse.TextureAttributes.RepeatV">
17024 <summary>Indicates if UDP connection to the sim is fully established</summary> 15016 <summary></summary>
17025 </member> 15017 </member>
17026 <member name="P:OpenMetaverse.Simulator.ParcelMap"> 15018 <member name="F:OpenMetaverse.TextureAttributes.OffsetU">
17027 <summary> 15019 <summary></summary>
17028 Provides access to an internal thread-safe multidimensional array containing a x,y grid mapped
17029 to each 64x64 parcel's LocalID.
17030 </summary>
17031 </member> 15020 </member>
17032 <member name="P:OpenMetaverse.Simulator.IPEndPoint"> 15021 <member name="F:OpenMetaverse.TextureAttributes.OffsetV">
17033 <summary>The IP address and port of the server</summary> 15022 <summary></summary>
17034 </member> 15023 </member>
17035 <member name="P:OpenMetaverse.Simulator.Connected"> 15024 <member name="F:OpenMetaverse.TextureAttributes.Rotation">
17036 <summary>Whether there is a working connection to the simulator or 15025 <summary></summary>
17037 not</summary>
17038 </member> 15026 </member>
17039 <member name="P:OpenMetaverse.Simulator.AvatarPositions"> 15027 <member name="F:OpenMetaverse.TextureAttributes.Material">
17040 <summary>Coarse locations of avatars in this simulator</summary> 15028 <summary></summary>
17041 </member> 15029 </member>
17042 <member name="P:OpenMetaverse.Simulator.PreyID"> 15030 <member name="F:OpenMetaverse.TextureAttributes.Media">
17043 <summary>AvatarPositions key representing TrackAgent target</summary> 15031 <summary></summary>
17044 </member> 15032 </member>
17045 <member name="P:OpenMetaverse.Simulator.HandshakeComplete"> 15033 <member name="F:OpenMetaverse.TextureAttributes.Glow">
17046 <summary>Indicates if UDP connection to the sim is fully established</summary> 15034 <summary></summary>
17047 </member> 15035 </member>
17048 <member name="M:OpenMetaverse.Simulator.IsParcelMapFull"> 15036 <member name="F:OpenMetaverse.TextureAttributes.MaterialID">
17049 <summary> 15037 <summary></summary>
17050 Checks simulator parcel map to make sure it has downloaded all data successfully
17051 </summary>
17052 <returns>true if map is full (contains no 0's)</returns>
17053 </member> 15038 </member>
17054 <member name="M:OpenMetaverse.Simulator.Dispose"> 15039 <member name="F:OpenMetaverse.TextureAttributes.All">
17055 <summary> 15040 <summary></summary>
17056 Called when this Simulator object is being destroyed
17057 </summary>
17058 </member> 15041 </member>
17059 <member name="M:OpenMetaverse.Simulator.Connect(System.Boolean)"> 15042 <member name="T:OpenMetaverse.BitPack">
17060 <summary> 15043 <summary>
17061 Attempt to connect to this simulator 15044 Wrapper around a byte array that allows bit to be packed and unpacked
15045 one at a time or by a variable amount. Useful for very tightly packed
15046 data like LayerData packets
17062 </summary> 15047 </summary>
17063 <param name="moveToSim">Whether to move our agent in to this sim or not</param>
17064 <returns>True if the connection succeeded or connection status is
17065 unknown, false if there was a failure</returns>
17066 </member> 15048 </member>
17067 <member name="M:OpenMetaverse.Simulator.UseCircuitCode(System.Boolean)"> 15049 <member name="F:OpenMetaverse.BitPack.Data">
17068 <summary> 15050 <summary></summary>
17069 Initiates connection to the simulator
17070 </summary>
17071 <param name="waitForAck">Should we block until ack for this packet is recieved</param>
17072 </member> 15051 </member>
17073 <member name="M:OpenMetaverse.Simulator.Disconnect(System.Boolean)"> 15052 <member name="M:OpenMetaverse.BitPack.#ctor(System.Byte[],System.Int32)">
17074 <summary> 15053 <summary>
17075 Disconnect from this simulator 15054 Default constructor, initialize the bit packer / bit unpacker
15055 with a byte array and starting position
17076 </summary> 15056 </summary>
15057 <param name="data">Byte array to pack bits in to or unpack from</param>
15058 <param name="pos">Starting position in the byte array</param>
17077 </member> 15059 </member>
17078 <member name="M:OpenMetaverse.Simulator.Pause"> 15060 <member name="M:OpenMetaverse.BitPack.PackFloat(System.Single)">
17079 <summary> 15061 <summary>
17080 Instructs the simulator to stop sending update (and possibly other) packets 15062 Pack a floating point value in to the data
17081 </summary> 15063 </summary>
15064 <param name="data">Floating point value to pack</param>
17082 </member> 15065 </member>
17083 <member name="M:OpenMetaverse.Simulator.Resume"> 15066 <member name="M:OpenMetaverse.BitPack.PackBits(System.Int32,System.Int32)">
17084 <summary> 15067 <summary>
17085 Instructs the simulator to resume sending update packets (unpause) 15068 Pack part or all of an integer in to the data
17086 </summary> 15069 </summary>
15070 <param name="data">Integer containing the data to pack</param>
15071 <param name="totalCount">Number of bits of the integer to pack</param>
17087 </member> 15072 </member>
17088 <member name="M:OpenMetaverse.Simulator.TerrainHeightAtPoint(System.Int32,System.Int32,System.Single@)"> 15073 <member name="M:OpenMetaverse.BitPack.PackBits(System.UInt32,System.Int32)">
17089 <summary> 15074 <summary>
17090 Retrieve the terrain height at a given coordinate 15075 Pack part or all of an unsigned integer in to the data
17091 </summary> 15076 </summary>
17092 <param name="x">Sim X coordinate, valid range is from 0 to 255</param> 15077 <param name="data">Unsigned integer containing the data to pack</param>
17093 <param name="y">Sim Y coordinate, valid range is from 0 to 255</param> 15078 <param name="totalCount">Number of bits of the integer to pack</param>
17094 <param name="height">The terrain height at the given point if the
17095 lookup was successful, otherwise 0.0f</param>
17096 <returns>True if the lookup was successful, otherwise false</returns>
17097 </member> 15079 </member>
17098 <member name="M:OpenMetaverse.Simulator.SendPacket(OpenMetaverse.Packets.Packet)"> 15080 <member name="M:OpenMetaverse.BitPack.PackBit(System.Boolean)">
17099 <summary> 15081 <summary>
17100 Sends a packet 15082 Pack a single bit in to the data
17101 </summary> 15083 </summary>
17102 <param name="packet">Packet to be sent</param> 15084 <param name="bit">Bit to pack</param>
17103 </member> 15085 </member>
17104 <member name="M:OpenMetaverse.Simulator.SendPing"> 15086 <member name="M:OpenMetaverse.BitPack.PackFixed(System.Single,System.Boolean,System.Int32,System.Int32)">
17105 <summary> 15087 <summary>
15088
17106 </summary> 15089 </summary>
15090 <param name="data"></param>
15091 <param name="isSigned"></param>
15092 <param name="intBits"></param>
15093 <param name="fracBits"></param>
17107 </member> 15094 </member>
17108 <member name="M:OpenMetaverse.Simulator.ToString"> 15095 <member name="M:OpenMetaverse.BitPack.PackUUID(OpenMetaverse.UUID)">
17109 <summary> 15096 <summary>
17110 Returns Simulator Name as a String 15097
17111 </summary> 15098 </summary>
17112 <returns> 15099 <param name="data"></param>
17113 </returns>
17114 </member> 15100 </member>
17115 <member name="M:OpenMetaverse.Simulator.GetHashCode"> 15101 <member name="M:OpenMetaverse.BitPack.PackColor(OpenMetaverse.Color4)">
17116 <summary> 15102 <summary>
15103
17117 </summary> 15104 </summary>
17118 <returns> 15105 <param name="data"></param>
17119 </returns>
17120 </member> 15106 </member>
17121 <member name="M:OpenMetaverse.Simulator.Equals(System.Object)"> 15107 <member name="M:OpenMetaverse.BitPack.UnpackFloat">
17122 <summary> 15108 <summary>
15109 Unpacking a floating point value from the data
17123 </summary> 15110 </summary>
17124 <param name="obj"> 15111 <returns>Unpacked floating point value</returns>
17125 </param>
17126 <returns>
17127 </returns>
17128 </member> 15112 </member>
17129 <member name="M:OpenMetaverse.Simulator.SendAcks"> 15113 <member name="M:OpenMetaverse.BitPack.UnpackBits(System.Int32)">
17130 <summary> 15114 <summary>
17131 Sends out pending acknowledgements 15115 Unpack a variable number of bits from the data in to integer format
17132 </summary> 15116 </summary>
17133 <returns>Number of ACKs sent</returns> 15117 <param name="totalCount">Number of bits to unpack</param>
15118 <returns>An integer containing the unpacked bits</returns>
15119 <remarks>This function is only useful up to 32 bits</remarks>
17134 </member> 15120 </member>
17135 <member name="M:OpenMetaverse.Simulator.ResendUnacked"> 15121 <member name="M:OpenMetaverse.BitPack.UnpackUBits(System.Int32)">
17136 <summary> 15122 <summary>
17137 Resend unacknowledged packets 15123 Unpack a variable number of bits from the data in to unsigned
15124 integer format
17138 </summary> 15125 </summary>
15126 <param name="totalCount">Number of bits to unpack</param>
15127 <returns>An unsigned integer containing the unpacked bits</returns>
15128 <remarks>This function is only useful up to 32 bits</remarks>
17139 </member> 15129 </member>
17140 <member name="T:OpenMetaverse.SoundManager"> 15130 <member name="M:OpenMetaverse.BitPack.UnpackShort">
17141 <summary> 15131 <summary>
15132 Unpack a 16-bit signed integer
17142 </summary> 15133 </summary>
15134 <returns>16-bit signed integer</returns>
17143 </member> 15135 </member>
17144 <member name="M:OpenMetaverse.SoundManager.#ctor(OpenMetaverse.GridClient)"> 15136 <member name="M:OpenMetaverse.BitPack.UnpackUShort">
17145 <summary> 15137 <summary>
17146 Construct a new instance of the SoundManager class, used for playing and receiving 15138 Unpack a 16-bit unsigned integer
17147 sound assets
17148 </summary> 15139 </summary>
17149 <param name="client">A reference to the current GridClient instance</param> 15140 <returns>16-bit unsigned integer</returns>
17150 </member>
17151 <member name="F:OpenMetaverse.SoundManager.m_AttachedSound">
17152 <summary>The event subscribers, null of no subscribers</summary>
17153 </member>
17154 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundLock">
17155 <summary>Thread sync lock object</summary>
17156 </member>
17157 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundGainChange">
17158 <summary>The event subscribers, null of no subscribers</summary>
17159 </member>
17160 <member name="F:OpenMetaverse.SoundManager.m_AttachedSoundGainChangeLock">
17161 <summary>Thread sync lock object</summary>
17162 </member>
17163 <member name="F:OpenMetaverse.SoundManager.m_SoundTrigger">
17164 <summary>The event subscribers, null of no subscribers</summary>
17165 </member>
17166 <member name="F:OpenMetaverse.SoundManager.m_SoundTriggerLock">
17167 <summary>Thread sync lock object</summary>
17168 </member>
17169 <member name="F:OpenMetaverse.SoundManager.m_PreloadSound">
17170 <summary>The event subscribers, null of no subscribers</summary>
17171 </member>
17172 <member name="F:OpenMetaverse.SoundManager.m_PreloadSoundLock">
17173 <summary>Thread sync lock object</summary>
17174 </member>
17175 <member name="E:OpenMetaverse.SoundManager.AttachedSound">
17176 <summary>Raised when the simulator sends us data containing
17177 sound</summary>
17178 </member>
17179 <member name="E:OpenMetaverse.SoundManager.AttachedSoundGainChange">
17180 <summary>Raised when the simulator sends us data containing
17181 ...</summary>
17182 </member>
17183 <member name="E:OpenMetaverse.SoundManager.SoundTrigger">
17184 <summary>Raised when the simulator sends us data containing
17185 ...</summary>
17186 </member>
17187 <member name="E:OpenMetaverse.SoundManager.PreloadSound">
17188 <summary>Raised when the simulator sends us data containing
17189 ...</summary>
17190 </member>
17191 <member name="M:OpenMetaverse.SoundManager.OnAttachedSound(OpenMetaverse.AttachedSoundEventArgs)">
17192 <summary>Raises the AttachedSound Event</summary>
17193 <param name="e">A AttachedSoundEventArgs object containing
17194 the data sent from the simulator</param>
17195 </member>
17196 <member name="M:OpenMetaverse.SoundManager.OnAttachedSoundGainChange(OpenMetaverse.AttachedSoundGainChangeEventArgs)">
17197 <summary>Raises the AttachedSoundGainChange Event</summary>
17198 <param name="e">A AttachedSoundGainChangeEventArgs object containing
17199 the data sent from the simulator</param>
17200 </member>
17201 <member name="M:OpenMetaverse.SoundManager.OnSoundTrigger(OpenMetaverse.SoundTriggerEventArgs)">
17202 <summary>Raises the SoundTrigger Event</summary>
17203 <param name="e">A SoundTriggerEventArgs object containing
17204 the data sent from the simulator</param>
17205 </member>
17206 <member name="M:OpenMetaverse.SoundManager.OnPreloadSound(OpenMetaverse.PreloadSoundEventArgs)">
17207 <summary>Raises the PreloadSound Event</summary>
17208 <param name="e">A PreloadSoundEventArgs object containing
17209 the data sent from the simulator</param>
17210 </member> 15141 </member>
17211 <member name="M:OpenMetaverse.SoundManager.PlaySound(OpenMetaverse.UUID)"> 15142 <member name="M:OpenMetaverse.BitPack.UnpackInt">
17212 <summary> 15143 <summary>
17213 Plays a sound in the current region at full volume from avatar position 15144 Unpack a 32-bit signed integer
17214 </summary> 15145 </summary>
17215 <param name="soundID">UUID of the sound to be played</param> 15146 <returns>32-bit signed integer</returns>
17216 </member> 15147 </member>
17217 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Vector3)"> 15148 <member name="M:OpenMetaverse.BitPack.UnpackUInt">
17218 <summary> 15149 <summary>
17219 Plays a sound in the current region at full volume 15150 Unpack a 32-bit unsigned integer
17220 </summary> 15151 </summary>
17221 <param name="soundID">UUID of the sound to be played.</param> 15152 <returns>32-bit unsigned integer</returns>
17222 <param name="position">position for the sound to be played at. Normally the avatar.</param>
17223 </member> 15153 </member>
17224 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Vector3,System.Single)"> 15154 <member name="P:OpenMetaverse.BitPack.BytePos">
17225 <summary> 15155 <summary></summary>
17226 Plays a sound in the current region
17227 </summary>
17228 <param name="soundID">UUID of the sound to be played.</param>
17229 <param name="position">position for the sound to be played at. Normally the avatar.</param>
17230 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
17231 </member> 15156 </member>
17232 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,OpenMetaverse.Simulator,OpenMetaverse.Vector3,System.Single)"> 15157 <member name="P:OpenMetaverse.BitPack.BitPos">
17233 <summary> 15158 <summary></summary>
17234 Plays a sound in the specified sim
17235 </summary>
17236 <param name="soundID">UUID of the sound to be played.</param>
17237 <param name="sim">UUID of the sound to be played.</param>
17238 <param name="position">position for the sound to be played at. Normally the avatar.</param>
17239 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
17240 </member> 15159 </member>
17241 <member name="M:OpenMetaverse.SoundManager.SendSoundTrigger(OpenMetaverse.UUID,System.UInt64,OpenMetaverse.Vector3,System.Single)"> 15160 <member name="T:OpenMetaverse.ScriptPermission">
17242 <summary> 15161 <summary>
17243 Play a sound asset 15162 Permission request flags, asked when a script wants to control an Avatar
17244 </summary> 15163 </summary>
17245 <param name="soundID">UUID of the sound to be played.</param>
17246 <param name="handle">handle id for the sim to be played in.</param>
17247 <param name="position">position for the sound to be played at. Normally the avatar.</param>
17248 <param name="gain">volume of the sound, from 0.0 to 1.0</param>
17249 </member> 15164 </member>
17250 <member name="M:OpenMetaverse.SoundManager.AttachedSoundHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15165 <member name="F:OpenMetaverse.ScriptPermission.None">
17251 <summary>Process an incoming packet and raise the appropriate events</summary> 15166 <summary>Placeholder for empty values, shouldn't ever see this</summary>
17252 <param name="sender">The sender</param>
17253 <param name="e">The EventArgs object containing the packet data</param>
17254 </member> 15167 </member>
17255 <member name="M:OpenMetaverse.SoundManager.AttachedSoundGainChangeHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15168 <member name="F:OpenMetaverse.ScriptPermission.Debit">
17256 <summary>Process an incoming packet and raise the appropriate events</summary> 15169 <summary>Script wants ability to take money from you</summary>
17257 <param name="sender">The sender</param>
17258 <param name="e">The EventArgs object containing the packet data</param>
17259 </member> 15170 </member>
17260 <member name="M:OpenMetaverse.SoundManager.PreloadSoundHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15171 <member name="F:OpenMetaverse.ScriptPermission.TakeControls">
17261 <summary>Process an incoming packet and raise the appropriate events</summary> 15172 <summary>Script wants to take camera controls for you</summary>
17262 <param name="sender">The sender</param>
17263 <param name="e">The EventArgs object containing the packet data</param>
17264 </member> 15173 </member>
17265 <member name="M:OpenMetaverse.SoundManager.SoundTriggerHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15174 <member name="F:OpenMetaverse.ScriptPermission.RemapControls">
17266 <summary>Process an incoming packet and raise the appropriate events</summary> 15175 <summary>Script wants to remap avatars controls</summary>
17267 <param name="sender">The sender</param>
17268 <param name="e">The EventArgs object containing the packet data</param>
17269 </member> 15176 </member>
17270 <member name="T:OpenMetaverse.AttachedSoundEventArgs"> 15177 <member name="F:OpenMetaverse.ScriptPermission.TriggerAnimation">
17271 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.AttachedSound" /> event</summary> 15178 <summary>Script wants to trigger avatar animations</summary>
17272 <remarks>The <see cref="E:OpenMetaverse.SoundManager.AttachedSound" /> event occurs when the simulator sends 15179 <remarks>This function is not implemented on the grid</remarks>
17273 the sound data which emits from an agents attachment</remarks>
17274 <example>
17275 The following code example shows the process to subscribe to the <see cref="E:OpenMetaverse.SoundManager.AttachedSound" /> event
17276 and a stub to handle the data passed from the simulator
17277 <code>
17278 // Subscribe to the AttachedSound event
17279 Client.Sound.AttachedSound += Sound_AttachedSound;
17280 // process the data raised in the event here
17281 private void Sound_AttachedSound(object sender, AttachedSoundEventArgs e)
17282 {
17283 // ... Process AttachedSoundEventArgs here ...
17284 }
17285 </code></example>
17286 </member> 15180 </member>
17287 <member name="M:OpenMetaverse.AttachedSoundEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,OpenMetaverse.SoundFlags)"> 15181 <member name="F:OpenMetaverse.ScriptPermission.Attach">
17288 <summary> 15182 <summary>Script wants to attach or detach the prim or primset to your avatar</summary>
17289 Construct a new instance of the SoundTriggerEventArgs class
17290 </summary>
17291 <param name="sim">Simulator where the event originated</param>
17292 <param name="soundID">The sound asset id</param>
17293 <param name="ownerID">The ID of the owner</param>
17294 <param name="objectID">The ID of the object</param>
17295 <param name="gain">The volume level</param>
17296 <param name="flags">The <see cref="T:OpenMetaverse.SoundFlags" /></param>
17297 </member> 15183 </member>
17298 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Simulator"> 15184 <member name="F:OpenMetaverse.ScriptPermission.ReleaseOwnership">
17299 <summary>Simulator where the event originated</summary> 15185 <summary>Script wants permission to release ownership</summary>
15186 <remarks>This function is not implemented on the grid
15187 The concept of "public" objects does not exist anymore.</remarks>
17300 </member> 15188 </member>
17301 <member name="P:OpenMetaverse.AttachedSoundEventArgs.SoundID"> 15189 <member name="F:OpenMetaverse.ScriptPermission.ChangeLinks">
17302 <summary>Get the sound asset id</summary> 15190 <summary>Script wants ability to link/delink with other prims</summary>
17303 </member> 15191 </member>
17304 <member name="P:OpenMetaverse.AttachedSoundEventArgs.OwnerID"> 15192 <member name="F:OpenMetaverse.ScriptPermission.ChangeJoints">
17305 <summary>Get the ID of the owner</summary> 15193 <summary>Script wants permission to change joints</summary>
15194 <remarks>This function is not implemented on the grid</remarks>
17306 </member> 15195 </member>
17307 <member name="P:OpenMetaverse.AttachedSoundEventArgs.ObjectID"> 15196 <member name="F:OpenMetaverse.ScriptPermission.ChangePermissions">
17308 <summary>Get the ID of the Object</summary> 15197 <summary>Script wants permissions to change permissions</summary>
15198 <remarks>This function is not implemented on the grid</remarks>
17309 </member> 15199 </member>
17310 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Gain"> 15200 <member name="F:OpenMetaverse.ScriptPermission.TrackCamera">
17311 <summary>Get the volume level</summary> 15201 <summary>Script wants to track avatars camera position and rotation </summary>
17312 </member> 15202 </member>
17313 <member name="P:OpenMetaverse.AttachedSoundEventArgs.Flags"> 15203 <member name="F:OpenMetaverse.ScriptPermission.ControlCamera">
17314 <summary>Get the <see cref="T:OpenMetaverse.SoundFlags" /></summary> 15204 <summary>Script wants to control your camera</summary>
17315 </member> 15205 </member>
17316 <member name="T:OpenMetaverse.AttachedSoundGainChangeEventArgs"> 15206 <member name="F:OpenMetaverse.ScriptPermission.Teleport">
17317 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.AttachedSoundGainChange" /> event</summary> 15207 <summary>Script wants the ability to teleport you</summary>
17318 <remarks>The <see cref="E:OpenMetaverse.SoundManager.AttachedSoundGainChange" /> event occurs when an attached sound
17319 changes its volume level</remarks>
17320 </member> 15208 </member>
17321 <member name="M:OpenMetaverse.AttachedSoundGainChangeEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Single)"> 15209 <member name="T:OpenMetaverse.InstantMessageDialog">
17322 <summary> 15210 <summary>
17323 Construct a new instance of the AttachedSoundGainChangedEventArgs class 15211 Special commands used in Instant Messages
17324 </summary> 15212 </summary>
17325 <param name="sim">Simulator where the event originated</param>
17326 <param name="objectID">The ID of the Object</param>
17327 <param name="gain">The new volume level</param>
17328 </member> 15213 </member>
17329 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.Simulator"> 15214 <member name="F:OpenMetaverse.InstantMessageDialog.MessageFromAgent">
17330 <summary>Simulator where the event originated</summary> 15215 <summary>Indicates a regular IM from another agent</summary>
17331 </member> 15216 </member>
17332 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.ObjectID"> 15217 <member name="F:OpenMetaverse.InstantMessageDialog.MessageBox">
17333 <summary>Get the ID of the Object</summary> 15218 <summary>Simple notification box with an OK button</summary>
17334 </member> 15219 </member>
17335 <member name="P:OpenMetaverse.AttachedSoundGainChangeEventArgs.Gain"> 15220 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitation">
17336 <summary>Get the volume level</summary> 15221 <summary>You've been invited to join a group.</summary>
17337 </member> 15222 </member>
17338 <member name="T:OpenMetaverse.SoundTriggerEventArgs"> 15223 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryOffered">
17339 <summary>Provides data for the <see cref="E:OpenMetaverse.SoundManager.SoundTrigger" /> event</summary> 15224 <summary>Inventory offer</summary>
17340 <remarks>
17341 <para>The <see cref="E:OpenMetaverse.SoundManager.SoundTrigger" /> event occurs when the simulator forwards
17342 a request made by yourself or another agent to play either an asset sound or a built in sound</para>
17343 <para>Requests to play sounds where the <see cref="P:OpenMetaverse.SoundTriggerEventArgs.SoundID" /> is not one of the built-in
17344 <see cref="T:OpenMetaverse.Sounds" /> will require sending a request to download the sound asset before it can be played</para>
17345 </remarks>
17346 <example>
17347 The following code example uses the <see cref="P:OpenMetaverse.SoundTriggerEventArgs.OwnerID" />, <see cref="P:OpenMetaverse.SoundTriggerEventArgs.SoundID" />
17348 and <see cref="P:OpenMetaverse.SoundTriggerEventArgs.Gain" />
17349 properties to display some information on a sound request on the <see cref="T:System.Console" /> window.
17350 <code>
17351 // subscribe to the event
17352 Client.Sound.SoundTrigger += Sound_SoundTrigger;
17353 // play the pre-defined BELL_TING sound
17354 Client.Sound.SendSoundTrigger(Sounds.BELL_TING);
17355 // handle the response data
17356 private void Sound_SoundTrigger(object sender, SoundTriggerEventArgs e)
17357 {
17358 Console.WriteLine("{0} played the sound {1} at volume {2}",
17359 e.OwnerID, e.SoundID, e.Gain);
17360 }
17361 </code></example>
17362 </member> 15225 </member>
17363 <member name="M:OpenMetaverse.SoundTriggerEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,System.UInt64,OpenMetaverse.Vector3)"> 15226 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryAccepted">
17364 <summary> 15227 <summary>Accepted inventory offer</summary>
17365 Construct a new instance of the SoundTriggerEventArgs class
17366 </summary>
17367 <param name="sim">Simulator where the event originated</param>
17368 <param name="soundID">The sound asset id</param>
17369 <param name="ownerID">The ID of the owner</param>
17370 <param name="objectID">The ID of the object</param>
17371 <param name="parentID">The ID of the objects parent</param>
17372 <param name="gain">The volume level</param>
17373 <param name="regionHandle">The regionhandle</param>
17374 <param name="position">The source position</param>
17375 </member> 15228 </member>
17376 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Simulator"> 15229 <member name="F:OpenMetaverse.InstantMessageDialog.InventoryDeclined">
17377 <summary>Simulator where the event originated</summary> 15230 <summary>Declined inventory offer</summary>
17378 </member> 15231 </member>
17379 <member name="P:OpenMetaverse.SoundTriggerEventArgs.SoundID"> 15232 <member name="F:OpenMetaverse.InstantMessageDialog.GroupVote">
17380 <summary>Get the sound asset id</summary> 15233 <summary>Group vote</summary>
17381 </member> 15234 </member>
17382 <member name="P:OpenMetaverse.SoundTriggerEventArgs.OwnerID"> 15235 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryOffered">
17383 <summary>Get the ID of the owner</summary> 15236 <summary>An object is offering its inventory</summary>
17384 </member> 15237 </member>
17385 <member name="P:OpenMetaverse.SoundTriggerEventArgs.ObjectID"> 15238 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryAccepted">
17386 <summary>Get the ID of the Object</summary> 15239 <summary>Accept an inventory offer from an object</summary>
17387 </member> 15240 </member>
17388 <member name="P:OpenMetaverse.SoundTriggerEventArgs.ParentID"> 15241 <member name="F:OpenMetaverse.InstantMessageDialog.TaskInventoryDeclined">
17389 <summary>Get the ID of the objects parent</summary> 15242 <summary>Decline an inventory offer from an object</summary>
17390 </member> 15243 </member>
17391 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Gain"> 15244 <member name="F:OpenMetaverse.InstantMessageDialog.NewUserDefault">
17392 <summary>Get the volume level</summary> 15245 <summary>Unknown</summary>
17393 </member> 15246 </member>
17394 <member name="P:OpenMetaverse.SoundTriggerEventArgs.RegionHandle"> 15247 <member name="F:OpenMetaverse.InstantMessageDialog.SessionAdd">
17395 <summary>Get the regionhandle</summary> 15248 <summary>Start a session, or add users to a session</summary>
17396 </member> 15249 </member>
17397 <member name="P:OpenMetaverse.SoundTriggerEventArgs.Position"> 15250 <member name="F:OpenMetaverse.InstantMessageDialog.SessionOfflineAdd">
17398 <summary>Get the source position</summary> 15251 <summary>Start a session, but don't prune offline users</summary>
17399 </member> 15252 </member>
17400 <member name="T:OpenMetaverse.PreloadSoundEventArgs"> 15253 <member name="F:OpenMetaverse.InstantMessageDialog.SessionGroupStart">
17401 <summary>Provides data for the <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance" /> event</summary> 15254 <summary>Start a session with your group</summary>
17402 <remarks>The <see cref="E:OpenMetaverse.AvatarManager.AvatarAppearance" /> event occurs when the simulator sends
17403 the appearance data for an avatar</remarks>
17404 <example>
17405 The following code example uses the <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.AvatarID" /> and <see cref="P:OpenMetaverse.AvatarAppearanceEventArgs.VisualParams" />
17406 properties to display the selected shape of an avatar on the <see cref="T:System.Console" /> window.
17407 <code>
17408 // subscribe to the event
17409 Client.Avatars.AvatarAppearance += Avatars_AvatarAppearance;
17410 // handle the data when the event is raised
17411 void Avatars_AvatarAppearance(object sender, AvatarAppearanceEventArgs e)
17412 {
17413 Console.WriteLine("The Agent {0} is using a {1} shape.", e.AvatarID, (e.VisualParams[31] &gt; 0) : "male" ? "female")
17414 }
17415 </code></example>
17416 </member> 15255 </member>
17417 <member name="M:OpenMetaverse.PreloadSoundEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)"> 15256 <member name="F:OpenMetaverse.InstantMessageDialog.SessionCardlessStart">
17418 <summary> 15257 <summary>Start a session without a calling card (finder or objects)</summary>
17419 Construct a new instance of the PreloadSoundEventArgs class
17420 </summary>
17421 <param name="sim">Simulator where the event originated</param>
17422 <param name="soundID">The sound asset id</param>
17423 <param name="ownerID">The ID of the owner</param>
17424 <param name="objectID">The ID of the object</param>
17425 </member> 15258 </member>
17426 <member name="P:OpenMetaverse.PreloadSoundEventArgs.Simulator"> 15259 <member name="F:OpenMetaverse.InstantMessageDialog.SessionSend">
17427 <summary>Simulator where the event originated</summary> 15260 <summary>Send a message to a session</summary>
17428 </member> 15261 </member>
17429 <member name="P:OpenMetaverse.PreloadSoundEventArgs.SoundID"> 15262 <member name="F:OpenMetaverse.InstantMessageDialog.SessionDrop">
17430 <summary>Get the sound asset id</summary> 15263 <summary>Leave a session</summary>
17431 </member> 15264 </member>
17432 <member name="P:OpenMetaverse.PreloadSoundEventArgs.OwnerID"> 15265 <member name="F:OpenMetaverse.InstantMessageDialog.MessageFromObject">
17433 <summary>Get the ID of the owner</summary> 15266 <summary>Indicates that the IM is from an object</summary>
17434 </member> 15267 </member>
17435 <member name="P:OpenMetaverse.PreloadSoundEventArgs.ObjectID"> 15268 <member name="F:OpenMetaverse.InstantMessageDialog.BusyAutoResponse">
17436 <summary>Get the ID of the Object</summary> 15269 <summary>Sent an IM to a busy user, this is the auto response</summary>
17437 </member> 15270 </member>
17438 <member name="T:OpenMetaverse.Sounds"> 15271 <member name="F:OpenMetaverse.InstantMessageDialog.ConsoleAndChatHistory">
17439 <summary> 15272 <summary>Shows the message in the console and chat history</summary>
17440 pre-defined built in sounds
17441 </summary>
17442 </member> 15273 </member>
17443 <member name="F:OpenMetaverse.Sounds.BELL_TING"> 15274 <member name="F:OpenMetaverse.InstantMessageDialog.RequestTeleport">
17444 <summary> 15275 <summary>Send a teleport lure</summary>
17445 </summary>
17446 </member> 15276 </member>
17447 <member name="F:OpenMetaverse.Sounds.CLICK"> 15277 <member name="F:OpenMetaverse.InstantMessageDialog.AcceptTeleport">
17448 <summary> 15278 <summary>Response sent to the agent which inititiated a teleport invitation</summary>
17449 </summary>
17450 </member> 15279 </member>
17451 <member name="F:OpenMetaverse.Sounds.HEALTH_REDUCTION_FEMALE"> 15280 <member name="F:OpenMetaverse.InstantMessageDialog.DenyTeleport">
17452 <summary> 15281 <summary>Response sent to the agent which inititiated a teleport invitation</summary>
17453 </summary>
17454 </member> 15282 </member>
17455 <member name="F:OpenMetaverse.Sounds.HEALTH_REDUCTION_MALE"> 15283 <member name="F:OpenMetaverse.InstantMessageDialog.GodLikeRequestTeleport">
17456 <summary> 15284 <summary>Only useful if you have Linden permissions</summary>
17457 </summary>
17458 </member> 15285 </member>
17459 <member name="F:OpenMetaverse.Sounds.IM_START"> 15286 <member name="F:OpenMetaverse.InstantMessageDialog.RequestLure">
17460 <summary> 15287 <summary>Request a teleport lure</summary>
17461 </summary>
17462 </member> 15288 </member>
17463 <member name="F:OpenMetaverse.Sounds.INSTANT_MESSAGE_NOTIFICATION"> 15289 <member name="F:OpenMetaverse.InstantMessageDialog.GotoUrl">
17464 <summary> 15290 <summary>IM to tell the user to go to an URL</summary>
17465 </summary>
17466 </member> 15291 </member>
17467 <member name="F:OpenMetaverse.Sounds.INVALID_OPERATION"> 15292 <member name="F:OpenMetaverse.InstantMessageDialog.Session911Start">
17468 <summary> 15293 <summary>IM for help</summary>
17469 </summary>
17470 </member> 15294 </member>
17471 <member name="F:OpenMetaverse.Sounds.KEYBOARD_LOOP"> 15295 <member name="F:OpenMetaverse.InstantMessageDialog.Lure911">
17472 <summary> 15296 <summary>IM sent automatically on call for help, sends a lure
17473 </summary> 15297 to each Helper reached</summary>
17474 </member> 15298 </member>
17475 <member name="F:OpenMetaverse.Sounds.MONEY_REDUCTION_COINS"> 15299 <member name="F:OpenMetaverse.InstantMessageDialog.FromTaskAsAlert">
17476 <summary>coins</summary> 15300 <summary>Like an IM but won't go to email</summary>
17477 </member> 15301 </member>
17478 <member name="F:OpenMetaverse.Sounds.MONEY_INCREASE_CASH_REGISTER_BELL"> 15302 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNotice">
17479 <summary>cash register bell</summary> 15303 <summary>IM from a group officer to all group members</summary>
17480 </member> 15304 </member>
17481 <member name="F:OpenMetaverse.Sounds.NULL_KEYSTROKE"> 15305 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeInventoryAccepted">
17482 <summary> 15306 <summary>Unknown</summary>
17483 </summary>
17484 </member> 15307 </member>
17485 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION"> 15308 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeInventoryDeclined">
17486 <summary> 15309 <summary>Unknown</summary>
17487 </summary>
17488 </member> 15310 </member>
17489 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_RUBBER"> 15311 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitationAccept">
17490 <summary>rubber</summary> 15312 <summary>Accept a group invitation</summary>
17491 </member> 15313 </member>
17492 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_PLASTIC"> 15314 <member name="F:OpenMetaverse.InstantMessageDialog.GroupInvitationDecline">
17493 <summary>plastic</summary> 15315 <summary>Decline a group invitation</summary>
17494 </member> 15316 </member>
17495 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_FLESH"> 15317 <member name="F:OpenMetaverse.InstantMessageDialog.GroupNoticeRequested">
17496 <summary>flesh</summary> 15318 <summary>Unknown</summary>
17497 </member> 15319 </member>
17498 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_WOOD_SPLINTERING"> 15320 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipOffered">
17499 <summary>wood splintering?</summary> 15321 <summary>An avatar is offering you friendship</summary>
17500 </member> 15322 </member>
17501 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_GLASS_BREAK"> 15323 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipAccepted">
17502 <summary>glass break</summary> 15324 <summary>An avatar has accepted your friendship offer</summary>
17503 </member> 15325 </member>
17504 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_METAL_CLUNK"> 15326 <member name="F:OpenMetaverse.InstantMessageDialog.FriendshipDeclined">
17505 <summary>metal clunk</summary> 15327 <summary>An avatar has declined your friendship offer</summary>
17506 </member> 15328 </member>
17507 <member name="F:OpenMetaverse.Sounds.OBJECT_CREATE_WHOOSH"> 15329 <member name="F:OpenMetaverse.InstantMessageDialog.StartTyping">
17508 <summary>whoosh</summary> 15330 <summary>Indicates that a user has started typing</summary>
17509 </member> 15331 </member>
17510 <member name="F:OpenMetaverse.Sounds.OBJECT_DELETE_SHAKE"> 15332 <member name="F:OpenMetaverse.InstantMessageDialog.StopTyping">
17511 <summary>shake</summary> 15333 <summary>Indicates that a user has stopped typing</summary>
17512 </member> 15334 </member>
17513 <member name="F:OpenMetaverse.Sounds.OBJECT_REZ"> 15335 <member name="T:OpenMetaverse.InstantMessageOnline">
17514 <summary> 15336 <summary>
15337 Flag in Instant Messages, whether the IM should be delivered to
15338 offline avatars as well
17515 </summary> 15339 </summary>
17516 </member> 15340 </member>
17517 <member name="F:OpenMetaverse.Sounds.PIE_MENU_APPEAR_DING"> 15341 <member name="F:OpenMetaverse.InstantMessageOnline.Online">
17518 <summary>ding</summary> 15342 <summary>Only deliver to online avatars</summary>
17519 </member> 15343 </member>
17520 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT"> 15344 <member name="F:OpenMetaverse.InstantMessageOnline.Offline">
17521 <summary> 15345 <summary>If the avatar is offline the message will be held until
17522 </summary> 15346 they login next, and possibly forwarded to their e-mail account</summary>
17523 </member> 15347 </member>
17524 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT1"> 15348 <member name="T:OpenMetaverse.ChatType">
17525 <summary> 15349 <summary>
15350 Conversion type to denote Chat Packet types in an easier-to-understand format
17526 </summary> 15351 </summary>
17527 </member> 15352 </member>
17528 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT2"> 15353 <member name="F:OpenMetaverse.ChatType.Whisper">
17529 <summary> 15354 <summary>Whisper (5m radius)</summary>
17530 </summary>
17531 </member> 15355 </member>
17532 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT3"> 15356 <member name="F:OpenMetaverse.ChatType.Normal">
17533 <summary> 15357 <summary>Normal chat (10/20m radius), what the official viewer typically sends</summary>
17534 </summary>
17535 </member> 15358 </member>
17536 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT4"> 15359 <member name="F:OpenMetaverse.ChatType.Shout">
17537 <summary> 15360 <summary>Shouting! (100m radius)</summary>
17538 </summary>
17539 </member> 15361 </member>
17540 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT5"> 15362 <member name="F:OpenMetaverse.ChatType.StartTyping">
17541 <summary> 15363 <summary>Event message when an Avatar has begun to type</summary>
17542 </summary>
17543 </member> 15364 </member>
17544 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT6"> 15365 <member name="F:OpenMetaverse.ChatType.StopTyping">
17545 <summary> 15366 <summary>Event message when an Avatar has stopped typing</summary>
17546 </summary>
17547 </member> 15367 </member>
17548 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT7"> 15368 <member name="F:OpenMetaverse.ChatType.Debug">
17549 <summary> 15369 <summary>Send the message to the debug channel</summary>
17550 </summary>
17551 </member> 15370 </member>
17552 <member name="F:OpenMetaverse.Sounds.SNAPSHOT"> 15371 <member name="F:OpenMetaverse.ChatType.OwnerSay">
17553 <summary> 15372 <summary>Event message when an object uses llOwnerSay</summary>
17554 </summary>
17555 </member> 15373 </member>
17556 <member name="F:OpenMetaverse.Sounds.TELEPORT_TEXTURE_APPLY"> 15374 <member name="F:OpenMetaverse.ChatType.RegionSay">
17557 <summary> 15375 <summary>Special value to support llRegionSay, never sent to the client</summary>
17558 </summary>
17559 </member> 15376 </member>
17560 <member name="F:OpenMetaverse.Sounds.THUNDER"> 15377 <member name="T:OpenMetaverse.ChatSourceType">
17561 <summary> 15378 <summary>
15379 Identifies the source of a chat message
17562 </summary> 15380 </summary>
17563 </member> 15381 </member>
17564 <member name="F:OpenMetaverse.Sounds.WINDOW_CLOSE"> 15382 <member name="F:OpenMetaverse.ChatSourceType.System">
17565 <summary> 15383 <summary>Chat from the grid or simulator</summary>
17566 </summary>
17567 </member> 15384 </member>
17568 <member name="F:OpenMetaverse.Sounds.WINDOW_OPEN"> 15385 <member name="F:OpenMetaverse.ChatSourceType.Agent">
17569 <summary> 15386 <summary>Chat from another avatar</summary>
17570 </summary>
17571 </member> 15387 </member>
17572 <member name="F:OpenMetaverse.Sounds.ZIPPER"> 15388 <member name="F:OpenMetaverse.ChatSourceType.Object">
17573 <summary> 15389 <summary>Chat from an object</summary>
17574 </summary>
17575 </member> 15390 </member>
17576 <member name="M:OpenMetaverse.Sounds.ToDictionary"> 15391 <member name="T:OpenMetaverse.ChatAudibleLevel">
17577 <summary> 15392 <summary>
17578 A dictionary containing all pre-defined sounds 15393
17579 </summary> 15394 </summary>
17580 <returns>A dictionary containing the pre-defined sounds,
17581 where the key is the sounds ID, and the value is a string
17582 containing a name to identify the purpose of the sound</returns>
17583 </member> 15395 </member>
17584 <member name="F:OpenMetaverse.TerrainPatch.X"> 15396 <member name="F:OpenMetaverse.ChatAudibleLevel.Not">
17585 <summary>X position of this patch</summary> 15397 <summary></summary>
17586 </member>
17587 <member name="F:OpenMetaverse.TerrainPatch.Y">
17588 <summary>Y position of this patch</summary>
17589 </member>
17590 <member name="F:OpenMetaverse.TerrainPatch.Data">
17591 <summary>A 16x16 array of floats holding decompressed layer data</summary>
17592 </member> 15398 </member>
17593 <member name="M:OpenMetaverse.TerrainCompressor.CreateLandPacket(System.Single[],System.Int32[])"> 15399 <member name="F:OpenMetaverse.ChatAudibleLevel.Barely">
17594 <summary> 15400 <summary></summary>
17595 Creates a LayerData packet for compressed land data given a full
17596 simulator heightmap and an array of indices of patches to compress
17597 </summary>
17598 <param name="heightmap">A 256 * 256 array of floating point values
17599 specifying the height at each meter in the simulator</param>
17600 <param name="patches">Array of indexes in the 16x16 grid of patches
17601 for this simulator. For example if 1 and 17 are specified, patches
17602 x=1,y=0 and x=1,y=1 are sent</param>
17603 <returns>
17604 </returns>
17605 </member> 15401 </member>
17606 <member name="M:OpenMetaverse.TerrainCompressor.CreatePatchFromHeightmap(OpenMetaverse.BitPack,System.Single[],System.Int32,System.Int32)"> 15402 <member name="F:OpenMetaverse.ChatAudibleLevel.Fully">
17607 <summary> 15403 <summary></summary>
17608 Add a patch of terrain to a BitPacker
17609 </summary>
17610 <param name="output">BitPacker to write the patch to</param>
17611 <param name="heightmap">Heightmap of the simulator, must be a 256 *
17612 256 float array</param>
17613 <param name="x">X offset of the patch to create, valid values are
17614 from 0 to 15</param>
17615 <param name="y">Y offset of the patch to create, valid values are
17616 from 0 to 15</param>
17617 </member> 15404 </member>
17618 <member name="M:OpenMetaverse.TerrainManager.#ctor(OpenMetaverse.GridClient)"> 15405 <member name="T:OpenMetaverse.EffectType">
17619 <summary> 15406 <summary>
17620 Default constructor 15407 Effect type used in ViewerEffect packets
17621 </summary> 15408 </summary>
17622 <param name="client">
17623 </param>
17624 </member> 15409 </member>
17625 <member name="F:OpenMetaverse.TerrainManager.m_LandPatchReceivedEvent"> 15410 <member name="F:OpenMetaverse.EffectType.Text">
17626 <summary>The event subscribers. null if no subcribers</summary> 15411 <summary></summary>
17627 </member>
17628 <member name="F:OpenMetaverse.TerrainManager.m_LandPatchReceivedLock">
17629 <summary>Thread sync lock object</summary>
17630 </member>
17631 <member name="E:OpenMetaverse.TerrainManager.LandPatchReceived">
17632 <summary>Raised when the simulator responds sends </summary>
17633 </member> 15412 </member>
17634 <member name="M:OpenMetaverse.TerrainManager.OnLandPatchReceived(OpenMetaverse.LandPatchReceivedEventArgs)"> 15413 <member name="F:OpenMetaverse.EffectType.Icon">
17635 <summary>Raises the LandPatchReceived event</summary> 15414 <summary></summary>
17636 <param name="e">A LandPatchReceivedEventArgs object containing the
17637 data returned from the simulator</param>
17638 </member> 15415 </member>
17639 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.Simulator"> 15416 <member name="F:OpenMetaverse.EffectType.Connector">
17640 <summary>Simulator from that sent tha data</summary> 15417 <summary></summary>
17641 </member> 15418 </member>
17642 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.X"> 15419 <member name="F:OpenMetaverse.EffectType.FlexibleObject">
17643 <summary>Sim coordinate of the patch</summary> 15420 <summary></summary>
17644 </member> 15421 </member>
17645 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.Y"> 15422 <member name="F:OpenMetaverse.EffectType.AnimalControls">
17646 <summary>Sim coordinate of the patch</summary> 15423 <summary></summary>
17647 </member> 15424 </member>
17648 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.PatchSize"> 15425 <member name="F:OpenMetaverse.EffectType.AnimationObject">
17649 <summary>Size of tha patch</summary> 15426 <summary></summary>
17650 </member> 15427 </member>
17651 <member name="P:OpenMetaverse.LandPatchReceivedEventArgs.HeightMap"> 15428 <member name="F:OpenMetaverse.EffectType.Cloth">
17652 <summary>Heightmap for the patch</summary> 15429 <summary></summary>
17653 </member> 15430 </member>
17654 <member name="T:OpenMetaverse.TextureRequestState"> 15431 <member name="F:OpenMetaverse.EffectType.Beam">
17655 <summary> 15432 <summary>Project a beam from a source to a destination, such as
17656 The current status of a texture request as it moves through the pipeline or final result of a texture request. 15433 the one used when editing an object</summary>
17657 </summary>
17658 </member> 15434 </member>
17659 <member name="F:OpenMetaverse.TextureRequestState.Pending"> 15435 <member name="F:OpenMetaverse.EffectType.Glow">
17660 <summary>The initial state given to a request. Requests in this state 15436 <summary></summary>
17661 are waiting for an available slot in the pipeline</summary>
17662 </member> 15437 </member>
17663 <member name="F:OpenMetaverse.TextureRequestState.Started"> 15438 <member name="F:OpenMetaverse.EffectType.Point">
17664 <summary>A request that has been added to the pipeline and the request packet 15439 <summary></summary>
17665 has been sent to the simulator</summary>
17666 </member> 15440 </member>
17667 <member name="F:OpenMetaverse.TextureRequestState.Progress"> 15441 <member name="F:OpenMetaverse.EffectType.Trail">
17668 <summary>A request that has received one or more packets back from the simulator</summary> 15442 <summary></summary>
17669 </member> 15443 </member>
17670 <member name="F:OpenMetaverse.TextureRequestState.Finished"> 15444 <member name="F:OpenMetaverse.EffectType.Sphere">
17671 <summary>A request that has received all packets back from the simulator</summary> 15445 <summary>Create a swirl of particles around an object</summary>
17672 </member> 15446 </member>
17673 <member name="F:OpenMetaverse.TextureRequestState.Timeout"> 15447 <member name="F:OpenMetaverse.EffectType.Spiral">
17674 <summary>A request that has taken longer than <seealso cref="F:OpenMetaverse.Settings.PIPELINE_REQUEST_TIMEOUT" /> 15448 <summary></summary>
17675 to download OR the initial packet containing the packet information was never received</summary>
17676 </member> 15449 </member>
17677 <member name="F:OpenMetaverse.TextureRequestState.Aborted"> 15450 <member name="F:OpenMetaverse.EffectType.Edit">
17678 <summary>The texture request was aborted by request of the agent</summary> 15451 <summary></summary>
17679 </member> 15452 </member>
17680 <member name="F:OpenMetaverse.TextureRequestState.NotFound"> 15453 <member name="F:OpenMetaverse.EffectType.LookAt">
17681 <summary>The simulator replied to the request that it was not able to find the requested texture</summary> 15454 <summary>Cause an avatar to look at an object</summary>
17682 </member> 15455 </member>
17683 <member name="T:OpenMetaverse.TexturePipeline"> 15456 <member name="F:OpenMetaverse.EffectType.PointAt">
17684 <summary> 15457 <summary>Cause an avatar to point at an object</summary>
17685 Texture request download handler, allows a configurable number of download slots which manage multiple
17686 concurrent texture downloads from the <seealso cref="T:OpenMetaverse.Simulator" /></summary>
17687 <remarks>This class makes full use of the internal <seealso cref="!:TextureCache" />
17688 system for full texture downloads.</remarks>
17689 </member> 15458 </member>
17690 <member name="M:OpenMetaverse.TexturePipeline.#ctor(OpenMetaverse.GridClient)"> 15459 <member name="T:OpenMetaverse.LookAtType">
17691 <summary> 15460 <summary>
17692 Default constructor, Instantiates a new copy of the TexturePipeline class 15461 The action an avatar is doing when looking at something, used in
15462 ViewerEffect packets for the LookAt effect
17693 </summary> 15463 </summary>
17694 <param name="client">Reference to the instantiated <see cref="T:OpenMetaverse.GridClient" /> object</param>
17695 </member>
17696 <member name="T:OpenMetaverse.TexturePipeline.TaskInfo">
17697 <summary>
17698 A request task containing information and status of a request as it is processed through the <see cref="T:OpenMetaverse.TexturePipeline" /></summary>
17699 </member>
17700 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.State">
17701 <summary>The current <seealso cref="T:OpenMetaverse.TextureRequestState" /> which identifies the current status of the request</summary>
17702 </member>
17703 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.RequestID">
17704 <summary>The Unique Request ID, This is also the Asset ID of the texture being requested</summary>
17705 </member>
17706 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.RequestSlot">
17707 <summary>The slot this request is occupying in the threadpoolSlots array</summary>
17708 </member>
17709 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Type">
17710 <summary>The ImageType of the request.</summary>
17711 </member>
17712 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Callbacks">
17713 <summary>The callback to fire when the request is complete, will include
17714 the <seealso cref="T:OpenMetaverse.TextureRequestState" /> and the <see cref="T:OpenMetaverse.Assets.AssetTexture" />
17715 object containing the result data</summary>
17716 </member>
17717 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.ReportProgress">
17718 <summary>If true, indicates the callback will be fired whenever new data is returned from the simulator.
17719 This is used to progressively render textures as portions of the texture are received.</summary>
17720 </member>
17721 <member name="F:OpenMetaverse.TexturePipeline.TaskInfo.Transfer">
17722 <summary>An object that maintains the data of an request thats in-process.</summary>
17723 </member>
17724 <member name="F:OpenMetaverse.TexturePipeline._Transfers">
17725 <summary>A dictionary containing all pending and in-process transfer requests where the Key is both the RequestID
17726 and also the Asset Texture ID, and the value is an object containing the current state of the request and also
17727 the asset data as it is being re-assembled</summary>
17728 </member>
17729 <member name="F:OpenMetaverse.TexturePipeline._Client">
17730 <summary>Holds the reference to the <see cref="T:OpenMetaverse.GridClient" /> client object</summary>
17731 </member> 15464 </member>
17732 <member name="F:OpenMetaverse.TexturePipeline.maxTextureRequests"> 15465 <member name="F:OpenMetaverse.LookAtType.None">
17733 <summary>Maximum concurrent texture requests allowed at a time</summary> 15466 <summary></summary>
17734 </member>
17735 <member name="F:OpenMetaverse.TexturePipeline.resetEvents">
17736 <summary>An array of <see cref="T:System.Threading.AutoResetEvent" /> objects used to manage worker request threads</summary>
17737 </member>
17738 <member name="F:OpenMetaverse.TexturePipeline.threadpoolSlots">
17739 <summary>An array of worker slots which shows the availablity status of the slot</summary>
17740 </member>
17741 <member name="F:OpenMetaverse.TexturePipeline.downloadMaster">
17742 <summary>The primary thread which manages the requests.</summary>
17743 </member>
17744 <member name="F:OpenMetaverse.TexturePipeline._Running">
17745 <summary>true if the TexturePipeline is currently running</summary>
17746 </member>
17747 <member name="F:OpenMetaverse.TexturePipeline.lockerObject">
17748 <summary>A synchronization object used by the primary thread</summary>
17749 </member>
17750 <member name="F:OpenMetaverse.TexturePipeline.RefreshDownloadsTimer">
17751 <summary>A refresh timer used to increase the priority of stalled requests</summary>
17752 </member>
17753 <member name="P:OpenMetaverse.TexturePipeline.TransferCount">
17754 <summary>Current number of pending and in-process transfers</summary>
17755 </member> 15467 </member>
17756 <member name="M:OpenMetaverse.TexturePipeline.Startup"> 15468 <member name="F:OpenMetaverse.LookAtType.Idle">
17757 <summary> 15469 <summary></summary>
17758 Initialize callbacks required for the TexturePipeline to operate
17759 </summary>
17760 </member> 15470 </member>
17761 <member name="M:OpenMetaverse.TexturePipeline.Shutdown"> 15471 <member name="F:OpenMetaverse.LookAtType.AutoListen">
17762 <summary> 15472 <summary></summary>
17763 Shutdown the TexturePipeline and cleanup any callbacks or transfers
17764 </summary>
17765 </member> 15473 </member>
17766 <member name="M:OpenMetaverse.TexturePipeline.RequestTexture(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32,OpenMetaverse.TextureDownloadCallback,System.Boolean)"> 15474 <member name="F:OpenMetaverse.LookAtType.FreeLook">
17767 <summary> 15475 <summary></summary>
17768 Request a texture asset from the simulator using the <see cref="T:OpenMetaverse.TexturePipeline" /> system to
17769 manage the requests and re-assemble the image from the packets received from the simulator
17770 </summary>
17771 <param name="textureID">The <see cref="T:OpenMetaverse.UUID" /> of the texture asset to download</param>
17772 <param name="imageType">The <see cref="T:OpenMetaverse.ImageType" /> of the texture asset.
17773 Use <see cref="F:OpenMetaverse.ImageType.Normal" /> for most textures, or <see cref="F:OpenMetaverse.ImageType.Baked" /> for baked layer texture assets</param>
17774 <param name="priority">A float indicating the requested priority for the transfer. Higher priority values tell the simulator
17775 to prioritize the request before lower valued requests. An image already being transferred using the <see cref="T:OpenMetaverse.TexturePipeline" /> can have
17776 its priority changed by resending the request with the new priority value</param>
17777 <param name="discardLevel">Number of quality layers to discard.
17778 This controls the end marker of the data sent</param>
17779 <param name="packetStart">The packet number to begin the request at. A value of 0 begins the request
17780 from the start of the asset texture</param>
17781 <param name="callback">The <see cref="T:OpenMetaverse.TextureDownloadCallback" /> callback to fire when the image is retrieved. The callback
17782 will contain the result of the request and the texture asset data</param>
17783 <param name="progressive">If true, the callback will be fired for each chunk of the downloaded image.
17784 The callback asset parameter will contain all previously received chunks of the texture asset starting
17785 from the beginning of the request</param>
17786 </member> 15476 </member>
17787 <member name="M:OpenMetaverse.TexturePipeline.RequestImage(OpenMetaverse.UUID,OpenMetaverse.ImageType,System.Single,System.Int32,System.UInt32)"> 15477 <member name="F:OpenMetaverse.LookAtType.Respond">
17788 <summary> 15478 <summary></summary>
17789 Sends the actual request packet to the simulator
17790 </summary>
17791 <param name="imageID">The image to download</param>
17792 <param name="type">Type of the image to download, either a baked
17793 avatar texture or a normal texture</param>
17794 <param name="priority">Priority level of the download. Default is
17795 <c>1,013,000.0f</c></param>
17796 <param name="discardLevel">Number of quality layers to discard.
17797 This controls the end marker of the data sent</param>
17798 <param name="packetNum">Packet number to start the download at.
17799 This controls the start marker of the data sent</param>
17800 <remarks>Sending a priority of 0 and a discardlevel of -1 aborts
17801 download</remarks>
17802 </member> 15479 </member>
17803 <member name="M:OpenMetaverse.TexturePipeline.AbortTextureRequest(OpenMetaverse.UUID)"> 15480 <member name="F:OpenMetaverse.LookAtType.Hover">
17804 <summary> 15481 <summary></summary>
17805 Cancel a pending or in process texture request
17806 </summary>
17807 <param name="textureID">The texture assets unique ID</param>
17808 </member> 15482 </member>
17809 <member name="M:OpenMetaverse.TexturePipeline.DownloadThread"> 15483 <member name="F:OpenMetaverse.LookAtType.Conversation">
17810 <summary> 15484 <summary>Deprecated</summary>
17811 Master Download Thread, Queues up downloads in the threadpool
17812 </summary>
17813 </member> 15485 </member>
17814 <member name="M:OpenMetaverse.TexturePipeline.TextureRequestDoWork(System.Object)"> 15486 <member name="F:OpenMetaverse.LookAtType.Select">
17815 <summary> 15487 <summary></summary>
17816 The worker thread that sends the request and handles timeouts
17817 </summary>
17818 <param name="threadContext">A <see cref="T:OpenMetaverse.TexturePipeline.TaskInfo" /> object containing the request details</param>
17819 </member> 15488 </member>
17820 <member name="M:OpenMetaverse.TexturePipeline.ImageNotInDatabaseHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15489 <member name="F:OpenMetaverse.LookAtType.Focus">
17821 <summary> 15490 <summary></summary>
17822 Handle responses from the simulator that tell us a texture we have requested is unable to be located
17823 or no longer exists. This will remove the request from the pipeline and free up a slot if one is in use
17824 </summary>
17825 <param name="sender">The sender</param>
17826 <param name="e">The EventArgs object containing the packet data</param>
17827 </member> 15491 </member>
17828 <member name="M:OpenMetaverse.TexturePipeline.ImagePacketHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15492 <member name="F:OpenMetaverse.LookAtType.Mouselook">
17829 <summary> 15493 <summary></summary>
17830 Handles the remaining Image data that did not fit in the initial ImageData packet
17831 </summary>
17832 <param name="sender">The sender</param>
17833 <param name="e">The EventArgs object containing the packet data</param>
17834 </member> 15494 </member>
17835 <member name="M:OpenMetaverse.TexturePipeline.ImageDataHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)"> 15495 <member name="F:OpenMetaverse.LookAtType.Clear">
17836 <summary> 15496 <summary></summary>
17837 Handle the initial ImageDataPacket sent from the simulator
17838 </summary>
17839 <param name="sender">The sender</param>
17840 <param name="e">The EventArgs object containing the packet data</param>
17841 </member> 15497 </member>
17842 <member name="T:ThreadUtil"> 15498 <member name="T:OpenMetaverse.PointAtType">
17843 <summary> 15499 <summary>
15500 The action an avatar is doing when pointing at something, used in
15501 ViewerEffect packets for the PointAt effect
17844 </summary> 15502 </summary>
17845 </member> 15503 </member>
17846 <member name="T:ThreadUtil.DelegateWrapper"> 15504 <member name="F:OpenMetaverse.PointAtType.None">
17847 <summary> 15505 <summary></summary>
17848 Delegate to wrap another delegate and its arguments
17849 </summary>
17850 <param name="d">
17851 </param>
17852 <param name="args">
17853 </param>
17854 </member> 15506 </member>
17855 <member name="F:ThreadUtil.wrapperInstance"> 15507 <member name="F:OpenMetaverse.PointAtType.Select">
17856 <summary> 15508 <summary></summary>
17857 An instance of DelegateWrapper which calls InvokeWrappedDelegate,
17858 which in turn calls the DynamicInvoke method of the wrapped
17859 delegate
17860 </summary>
17861 </member> 15509 </member>
17862 <member name="F:ThreadUtil.callback"> 15510 <member name="F:OpenMetaverse.PointAtType.Grab">
17863 <summary> 15511 <summary></summary>
17864 Callback used to call EndInvoke on the asynchronously
17865 invoked DelegateWrapper
17866 </summary>
17867 </member> 15512 </member>
17868 <member name="M:ThreadUtil.FireAndForget(System.Delegate,System.Object[])"> 15513 <member name="F:OpenMetaverse.PointAtType.Clear">
17869 <summary> 15514 <summary></summary>
17870 Executes the specified delegate with the specified arguments
17871 asynchronously on a thread pool thread
17872 </summary>
17873 <param name="d">
17874 </param>
17875 <param name="args">
17876 </param>
17877 </member> 15515 </member>
17878 <member name="M:ThreadUtil.InvokeWrappedDelegate(System.Delegate,System.Object[])"> 15516 <member name="T:OpenMetaverse.MoneyTransactionType">
17879 <summary> 15517 <summary>
17880 Invokes the wrapped delegate synchronously 15518 Money transaction types
17881 </summary> 15519 </summary>
17882 <param name="d">
17883 </param>
17884 <param name="args">
17885 </param>
17886 </member> 15520 </member>
17887 <member name="M:ThreadUtil.EndWrapperInvoke(System.IAsyncResult)"> 15521 <member name="F:OpenMetaverse.MoneyTransactionType.None">
17888 <summary> 15522 <summary></summary>
17889 Calls EndInvoke on the wrapper and Close on the resulting WaitHandle
17890 to prevent resource leaks
17891 </summary>
17892 <param name="ar">
17893 </param>
17894 </member> 15523 </member>
17895 <member name="T:OpenMetaverse.UDPBase"> 15524 <member name="F:OpenMetaverse.MoneyTransactionType.FailSimulatorTimeout">
17896 <summary> 15525 <summary></summary>
17897 </summary>
17898 </member> 15526 </member>
17899 <member name="M:OpenMetaverse.UDPBase.#ctor(System.Int32)"> 15527 <member name="F:OpenMetaverse.MoneyTransactionType.FailDataserverTimeout">
17900 <summary> 15528 <summary></summary>
17901 Initialize the UDP packet handler in server mode
17902 </summary>
17903 <param name="port">Port to listening for incoming UDP packets on</param>
17904 </member> 15529 </member>
17905 <member name="M:OpenMetaverse.UDPBase.#ctor(System.Net.IPEndPoint)"> 15530 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectClaim">
17906 <summary> 15531 <summary></summary>
17907 Initialize the UDP packet handler in client mode
17908 </summary>
17909 <param name="endPoint">Remote UDP server to connect to</param>
17910 </member> 15532 </member>
17911 <member name="P:OpenMetaverse.UDPBase.IsRunning"> 15533 <member name="F:OpenMetaverse.MoneyTransactionType.LandClaim">
17912 <summary> 15534 <summary></summary>
17913 </summary>
17914 </member> 15535 </member>
17915 <member name="M:OpenMetaverse.UDPBase.Start"> 15536 <member name="F:OpenMetaverse.MoneyTransactionType.GroupCreate">
17916 <summary> 15537 <summary></summary>
17917 </summary>
17918 </member> 15538 </member>
17919 <member name="M:OpenMetaverse.UDPBase.Stop"> 15539 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicClaim">
17920 <summary> 15540 <summary></summary>
17921 </summary>
17922 </member> 15541 </member>
17923 <member name="T:OpenMetaverse.PacketFrequency"> 15542 <member name="F:OpenMetaverse.MoneyTransactionType.GroupJoin">
17924 <summary> 15543 <summary></summary>
17925 </summary>
17926 </member> 15544 </member>
17927 <member name="F:OpenMetaverse.PacketFrequency.Low"> 15545 <member name="F:OpenMetaverse.MoneyTransactionType.TeleportCharge">
17928 <summary> 15546 <summary></summary>
17929 </summary>
17930 </member> 15547 </member>
17931 <member name="F:OpenMetaverse.PacketFrequency.Medium"> 15548 <member name="F:OpenMetaverse.MoneyTransactionType.UploadCharge">
17932 <summary> 15549 <summary></summary>
17933 </summary>
17934 </member> 15550 </member>
17935 <member name="F:OpenMetaverse.PacketFrequency.High"> 15551 <member name="F:OpenMetaverse.MoneyTransactionType.LandAuction">
17936 <summary> 15552 <summary></summary>
17937 </summary>
17938 </member> 15553 </member>
17939 <member name="T:OpenMetaverse.Packets.MalformedDataException"> 15554 <member name="F:OpenMetaverse.MoneyTransactionType.ClassifiedCharge">
17940 <summary> 15555 <summary></summary>
17941 Thrown when a packet could not be successfully deserialized
17942 </summary>
17943 </member> 15556 </member>
17944 <member name="M:OpenMetaverse.Packets.MalformedDataException.#ctor"> 15557 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectTax">
17945 <summary> 15558 <summary></summary>
17946 Default constructor
17947 </summary>
17948 </member> 15559 </member>
17949 <member name="M:OpenMetaverse.Packets.MalformedDataException.#ctor(System.String)"> 15560 <member name="F:OpenMetaverse.MoneyTransactionType.LandTax">
17950 <summary> 15561 <summary></summary>
17951 Constructor that takes an additional error message
17952 </summary>
17953 <param name="Message">An error message to attach to this exception</param>
17954 </member> 15562 </member>
17955 <member name="T:OpenMetaverse.Packets.Header"> 15563 <member name="F:OpenMetaverse.MoneyTransactionType.LightTax">
17956 <summary> 15564 <summary></summary>
17957 The header of a message template packet. Holds packet flags, sequence
17958 number, packet ID, and any ACKs that will be appended at the end of
17959 the packet
17960 </summary>
17961 </member> 15565 </member>
17962 <member name="M:OpenMetaverse.Packets.Header.AcksToBytes(System.Byte[],System.Int32@)"> 15566 <member name="F:OpenMetaverse.MoneyTransactionType.ParcelDirFee">
17963 <summary> 15567 <summary></summary>
17964 Convert the AckList to a byte array, used for packet serializing
17965 </summary>
17966 <param name="bytes">Reference to the target byte array</param>
17967 <param name="i">Beginning position to start writing to in the byte
17968 array, will be updated with the ending position of the ACK list</param>
17969 </member> 15568 </member>
17970 <member name="M:OpenMetaverse.Packets.Header.BuildHeader(System.Byte[],System.Int32@,System.Int32@)"> 15569 <member name="F:OpenMetaverse.MoneyTransactionType.GroupTax">
17971 <summary> 15570 <summary></summary>
17972 </summary>
17973 <param name="bytes">
17974 </param>
17975 <param name="pos">
17976 </param>
17977 <param name="packetEnd">
17978 </param>
17979 <returns>
17980 </returns>
17981 </member> 15571 </member>
17982 <member name="M:OpenMetaverse.Packets.Header.CreateAckList(OpenMetaverse.Packets.Header@,System.Byte[],System.Int32@)"> 15572 <member name="F:OpenMetaverse.MoneyTransactionType.ClassifiedRenew">
17983 <summary> 15573 <summary></summary>
17984 </summary>
17985 <param name="header">
17986 </param>
17987 <param name="bytes">
17988 </param>
17989 <param name="packetEnd">
17990 </param>
17991 </member> 15574 </member>
17992 <member name="T:OpenMetaverse.Packets.PacketBlock"> 15575 <member name="F:OpenMetaverse.MoneyTransactionType.GiveInventory">
17993 <summary> 15576 <summary></summary>
17994 A block of data in a packet. Packets are composed of one or more blocks,
17995 each block containing one or more fields
17996 </summary>
17997 </member> 15577 </member>
17998 <member name="P:OpenMetaverse.Packets.PacketBlock.Length"> 15578 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectSale">
17999 <summary>Current length of the data in this packet</summary> 15579 <summary></summary>
18000 </member> 15580 </member>
18001 <member name="M:OpenMetaverse.Packets.PacketBlock.FromBytes(System.Byte[],System.Int32@)"> 15581 <member name="F:OpenMetaverse.MoneyTransactionType.Gift">
18002 <summary> 15582 <summary></summary>
18003 Create a block from a byte array
18004 </summary>
18005 <param name="bytes">Byte array containing the serialized block</param>
18006 <param name="i">Starting position of the block in the byte array.
18007 This will point to the data after the end of the block when the
18008 call returns</param>
18009 </member> 15583 </member>
18010 <member name="M:OpenMetaverse.Packets.PacketBlock.ToBytes(System.Byte[],System.Int32@)"> 15584 <member name="F:OpenMetaverse.MoneyTransactionType.LandSale">
18011 <summary> 15585 <summary></summary>
18012 Serialize this block into a byte array
18013 </summary>
18014 <param name="bytes">Byte array to serialize this block into</param>
18015 <param name="i">Starting position in the byte array to serialize to.
18016 This will point to the position directly after the end of the
18017 serialized block when the call returns</param>
18018 </member> 15586 </member>
18019 <member name="F:OpenMetaverse.Packets.PacketType.Default"> 15587 <member name="F:OpenMetaverse.MoneyTransactionType.ReferBonus">
18020 <summary>A generic value, not an actual packet type</summary> 15588 <summary></summary>
18021 </member> 15589 </member>
18022 <member name="T:OpenMetaverse.Packets.TestMessagePacket"> 15590 <member name="F:OpenMetaverse.MoneyTransactionType.InventorySale">
18023 <exclude /> 15591 <summary></summary>
18024 </member> 15592 </member>
18025 <member name="T:OpenMetaverse.Packets.TestMessagePacket.TestBlock1Block"> 15593 <member name="F:OpenMetaverse.MoneyTransactionType.RefundPurchase">
18026 <exclude /> 15594 <summary></summary>
18027 </member> 15595 </member>
18028 <member name="T:OpenMetaverse.Packets.TestMessagePacket.NeighborBlockBlock"> 15596 <member name="F:OpenMetaverse.MoneyTransactionType.LandPassSale">
18029 <exclude /> 15597 <summary></summary>
18030 </member> 15598 </member>
18031 <member name="T:OpenMetaverse.Packets.UseCircuitCodePacket"> 15599 <member name="F:OpenMetaverse.MoneyTransactionType.DwellBonus">
18032 <exclude /> 15600 <summary></summary>
18033 </member> 15601 </member>
18034 <member name="T:OpenMetaverse.Packets.UseCircuitCodePacket.CircuitCodeBlock"> 15602 <member name="F:OpenMetaverse.MoneyTransactionType.PayObject">
18035 <exclude /> 15603 <summary></summary>
18036 </member> 15604 </member>
18037 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket"> 15605 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPays">
18038 <exclude /> 15606 <summary></summary>
18039 </member> 15607 </member>
18040 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket.TelehubBlockBlock"> 15608 <member name="F:OpenMetaverse.MoneyTransactionType.GroupLandDeed">
18041 <exclude /> 15609 <summary></summary>
18042 </member> 15610 </member>
18043 <member name="T:OpenMetaverse.Packets.TelehubInfoPacket.SpawnPointBlockBlock"> 15611 <member name="F:OpenMetaverse.MoneyTransactionType.GroupObjectDeed">
18044 <exclude /> 15612 <summary></summary>
18045 </member> 15613 </member>
18046 <member name="T:OpenMetaverse.Packets.EconomyDataRequestPacket"> 15614 <member name="F:OpenMetaverse.MoneyTransactionType.GroupLiability">
18047 <exclude /> 15615 <summary></summary>
18048 </member> 15616 </member>
18049 <member name="T:OpenMetaverse.Packets.EconomyDataPacket"> 15617 <member name="F:OpenMetaverse.MoneyTransactionType.GroupDividend">
18050 <exclude /> 15618 <summary></summary>
18051 </member> 15619 </member>
18052 <member name="T:OpenMetaverse.Packets.EconomyDataPacket.InfoBlock"> 15620 <member name="F:OpenMetaverse.MoneyTransactionType.GroupMembershipDues">
18053 <exclude /> 15621 <summary></summary>
18054 </member> 15622 </member>
18055 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket"> 15623 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectRelease">
18056 <exclude /> 15624 <summary></summary>
18057 </member> 15625 </member>
18058 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket.AgentDataBlock"> 15626 <member name="F:OpenMetaverse.MoneyTransactionType.LandRelease">
18059 <exclude /> 15627 <summary></summary>
18060 </member> 15628 </member>
18061 <member name="T:OpenMetaverse.Packets.AvatarPickerRequestPacket.DataBlock"> 15629 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectDelete">
18062 <exclude /> 15630 <summary></summary>
18063 </member> 15631 </member>
18064 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket"> 15632 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicDecay">
18065 <exclude /> 15633 <summary></summary>
18066 </member> 15634 </member>
18067 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket.AgentDataBlock"> 15635 <member name="F:OpenMetaverse.MoneyTransactionType.ObjectPublicDelete">
18068 <exclude /> 15636 <summary></summary>
18069 </member> 15637 </member>
18070 <member name="T:OpenMetaverse.Packets.AvatarPickerReplyPacket.DataBlock"> 15638 <member name="F:OpenMetaverse.MoneyTransactionType.LindenAdjustment">
18071 <exclude /> 15639 <summary></summary>
18072 </member> 15640 </member>
18073 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket"> 15641 <member name="F:OpenMetaverse.MoneyTransactionType.LindenGrant">
18074 <exclude /> 15642 <summary></summary>
18075 </member> 15643 </member>
18076 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.AgentDataBlock"> 15644 <member name="F:OpenMetaverse.MoneyTransactionType.LindenPenalty">
18077 <exclude /> 15645 <summary></summary>
18078 </member> 15646 </member>
18079 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.TransactionDataBlock"> 15647 <member name="F:OpenMetaverse.MoneyTransactionType.EventFee">
18080 <exclude /> 15648 <summary></summary>
18081 </member> 15649 </member>
18082 <member name="T:OpenMetaverse.Packets.PlacesQueryPacket.QueryDataBlock"> 15650 <member name="F:OpenMetaverse.MoneyTransactionType.EventPrize">
18083 <exclude /> 15651 <summary></summary>
18084 </member> 15652 </member>
18085 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket"> 15653 <member name="F:OpenMetaverse.MoneyTransactionType.StipendBasic">
18086 <exclude /> 15654 <summary></summary>
18087 </member> 15655 </member>
18088 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.AgentDataBlock"> 15656 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDeveloper">
18089 <exclude /> 15657 <summary></summary>
18090 </member> 15658 </member>
18091 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.TransactionDataBlock"> 15659 <member name="F:OpenMetaverse.MoneyTransactionType.StipendAlways">
18092 <exclude /> 15660 <summary></summary>
18093 </member> 15661 </member>
18094 <member name="T:OpenMetaverse.Packets.PlacesReplyPacket.QueryDataBlock"> 15662 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDaily">
18095 <exclude /> 15663 <summary></summary>
18096 </member> 15664 </member>
18097 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket"> 15665 <member name="F:OpenMetaverse.MoneyTransactionType.StipendRating">
18098 <exclude /> 15666 <summary></summary>
18099 </member> 15667 </member>
18100 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket.AgentDataBlock"> 15668 <member name="F:OpenMetaverse.MoneyTransactionType.StipendDelta">
18101 <exclude /> 15669 <summary></summary>
18102 </member> 15670 </member>
18103 <member name="T:OpenMetaverse.Packets.DirFindQueryPacket.QueryDataBlock"> 15671 <member name="T:OpenMetaverse.TransactionFlags">
18104 <exclude /> 15672 <summary>
15673
15674 </summary>
18105 </member> 15675 </member>
18106 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket"> 15676 <member name="F:OpenMetaverse.TransactionFlags.None">
18107 <exclude /> 15677 <summary></summary>
18108 </member> 15678 </member>
18109 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket.AgentDataBlock"> 15679 <member name="F:OpenMetaverse.TransactionFlags.SourceGroup">
18110 <exclude /> 15680 <summary></summary>
18111 </member> 15681 </member>
18112 <member name="T:OpenMetaverse.Packets.DirPlacesQueryPacket.QueryDataBlock"> 15682 <member name="F:OpenMetaverse.TransactionFlags.DestGroup">
18113 <exclude /> 15683 <summary></summary>
18114 </member> 15684 </member>
18115 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket"> 15685 <member name="F:OpenMetaverse.TransactionFlags.OwnerGroup">
18116 <exclude /> 15686 <summary></summary>
18117 </member> 15687 </member>
18118 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.AgentDataBlock"> 15688 <member name="F:OpenMetaverse.TransactionFlags.SimultaneousContribution">
18119 <exclude /> 15689 <summary></summary>
18120 </member> 15690 </member>
18121 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.QueryDataBlock"> 15691 <member name="F:OpenMetaverse.TransactionFlags.ContributionRemoval">
18122 <exclude /> 15692 <summary></summary>
18123 </member> 15693 </member>
18124 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.QueryRepliesBlock"> 15694 <member name="T:OpenMetaverse.MeanCollisionType">
18125 <exclude /> 15695 <summary>
15696
15697 </summary>
18126 </member> 15698 </member>
18127 <member name="T:OpenMetaverse.Packets.DirPlacesReplyPacket.StatusDataBlock"> 15699 <member name="F:OpenMetaverse.MeanCollisionType.None">
18128 <exclude /> 15700 <summary></summary>
18129 </member> 15701 </member>
18130 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket"> 15702 <member name="F:OpenMetaverse.MeanCollisionType.Bump">
18131 <exclude /> 15703 <summary></summary>
18132 </member> 15704 </member>
18133 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.AgentDataBlock"> 15705 <member name="F:OpenMetaverse.MeanCollisionType.LLPushObject">
18134 <exclude /> 15706 <summary></summary>
18135 </member> 15707 </member>
18136 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.QueryDataBlock"> 15708 <member name="F:OpenMetaverse.MeanCollisionType.SelectedObjectCollide">
18137 <exclude /> 15709 <summary></summary>
18138 </member> 15710 </member>
18139 <member name="T:OpenMetaverse.Packets.DirPeopleReplyPacket.QueryRepliesBlock"> 15711 <member name="F:OpenMetaverse.MeanCollisionType.ScriptedObjectCollide">
18140 <exclude /> 15712 <summary></summary>
18141 </member> 15713 </member>
18142 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket"> 15714 <member name="F:OpenMetaverse.MeanCollisionType.PhysicalObjectCollide">
18143 <exclude /> 15715 <summary></summary>
18144 </member> 15716 </member>
18145 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.AgentDataBlock"> 15717 <member name="T:OpenMetaverse.ScriptControlChange">
18146 <exclude /> 15718 <summary>
15719 Flags sent when a script takes or releases a control
15720 </summary>
15721 <remarks>NOTE: (need to verify) These might be a subset of the ControlFlags enum in Movement,</remarks>
18147 </member> 15722 </member>
18148 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.QueryDataBlock"> 15723 <member name="F:OpenMetaverse.ScriptControlChange.None">
18149 <exclude /> 15724 <summary>No Flags set</summary>
18150 </member> 15725 </member>
18151 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.QueryRepliesBlock"> 15726 <member name="F:OpenMetaverse.ScriptControlChange.Forward">
18152 <exclude /> 15727 <summary>Forward (W or up Arrow)</summary>
18153 </member> 15728 </member>
18154 <member name="T:OpenMetaverse.Packets.DirEventsReplyPacket.StatusDataBlock"> 15729 <member name="F:OpenMetaverse.ScriptControlChange.Back">
18155 <exclude /> 15730 <summary>Back (S or down arrow)</summary>
18156 </member> 15731 </member>
18157 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket"> 15732 <member name="F:OpenMetaverse.ScriptControlChange.Left">
18158 <exclude /> 15733 <summary>Move left (shift+A or left arrow)</summary>
18159 </member> 15734 </member>
18160 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.AgentDataBlock"> 15735 <member name="F:OpenMetaverse.ScriptControlChange.Right">
18161 <exclude /> 15736 <summary>Move right (shift+D or right arrow)</summary>
18162 </member> 15737 </member>
18163 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.QueryDataBlock"> 15738 <member name="F:OpenMetaverse.ScriptControlChange.Up">
18164 <exclude /> 15739 <summary>Up (E or PgUp)</summary>
18165 </member> 15740 </member>
18166 <member name="T:OpenMetaverse.Packets.DirGroupsReplyPacket.QueryRepliesBlock"> 15741 <member name="F:OpenMetaverse.ScriptControlChange.Down">
18167 <exclude /> 15742 <summary>Down (C or PgDown)</summary>
18168 </member> 15743 </member>
18169 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket"> 15744 <member name="F:OpenMetaverse.ScriptControlChange.RotateLeft">
18170 <exclude /> 15745 <summary>Rotate left (A or left arrow)</summary>
18171 </member> 15746 </member>
18172 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket.AgentDataBlock"> 15747 <member name="F:OpenMetaverse.ScriptControlChange.RotateRight">
18173 <exclude /> 15748 <summary>Rotate right (D or right arrow)</summary>
18174 </member> 15749 </member>
18175 <member name="T:OpenMetaverse.Packets.DirClassifiedQueryPacket.QueryDataBlock"> 15750 <member name="F:OpenMetaverse.ScriptControlChange.LeftButton">
18176 <exclude /> 15751 <summary>Left Mouse Button</summary>
18177 </member> 15752 </member>
18178 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket"> 15753 <member name="F:OpenMetaverse.ScriptControlChange.MouseLookLeftButton">
18179 <exclude /> 15754 <summary>Left Mouse button in MouseLook</summary>
18180 </member> 15755 </member>
18181 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.AgentDataBlock"> 15756 <member name="T:OpenMetaverse.AgentFlags">
18182 <exclude /> 15757 <summary>
15758 Currently only used to hide your group title
15759 </summary>
18183 </member> 15760 </member>
18184 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.QueryDataBlock"> 15761 <member name="F:OpenMetaverse.AgentFlags.None">
18185 <exclude /> 15762 <summary>No flags set</summary>
18186 </member> 15763 </member>
18187 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.QueryRepliesBlock"> 15764 <member name="F:OpenMetaverse.AgentFlags.HideTitle">
18188 <exclude /> 15765 <summary>Hide your group title</summary>
18189 </member> 15766 </member>
18190 <member name="T:OpenMetaverse.Packets.DirClassifiedReplyPacket.StatusDataBlock"> 15767 <member name="T:OpenMetaverse.AgentState">
18191 <exclude /> 15768 <summary>
15769 Action state of the avatar, which can currently be typing and
15770 editing
15771 </summary>
18192 </member> 15772 </member>
18193 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket"> 15773 <member name="F:OpenMetaverse.AgentState.None">
18194 <exclude /> 15774 <summary></summary>
18195 </member> 15775 </member>
18196 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket.AgentDataBlock"> 15776 <member name="F:OpenMetaverse.AgentState.Typing">
18197 <exclude /> 15777 <summary></summary>
18198 </member> 15778 </member>
18199 <member name="T:OpenMetaverse.Packets.AvatarClassifiedReplyPacket.DataBlock"> 15779 <member name="F:OpenMetaverse.AgentState.Editing">
18200 <exclude /> 15780 <summary></summary>
18201 </member> 15781 </member>
18202 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket"> 15782 <member name="T:OpenMetaverse.TeleportStatus">
18203 <exclude /> 15783 <summary>
15784 Current teleport status
15785 </summary>
18204 </member> 15786 </member>
18205 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket.AgentDataBlock"> 15787 <member name="F:OpenMetaverse.TeleportStatus.None">
18206 <exclude /> 15788 <summary>Unknown status</summary>
18207 </member> 15789 </member>
18208 <member name="T:OpenMetaverse.Packets.ClassifiedInfoRequestPacket.DataBlock"> 15790 <member name="F:OpenMetaverse.TeleportStatus.Start">
18209 <exclude /> 15791 <summary>Teleport initialized</summary>
18210 </member> 15792 </member>
18211 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket"> 15793 <member name="F:OpenMetaverse.TeleportStatus.Progress">
18212 <exclude /> 15794 <summary>Teleport in progress</summary>
18213 </member> 15795 </member>
18214 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket.AgentDataBlock"> 15796 <member name="F:OpenMetaverse.TeleportStatus.Failed">
18215 <exclude /> 15797 <summary>Teleport failed</summary>
18216 </member> 15798 </member>
18217 <member name="T:OpenMetaverse.Packets.ClassifiedInfoReplyPacket.DataBlock"> 15799 <member name="F:OpenMetaverse.TeleportStatus.Finished">
18218 <exclude /> 15800 <summary>Teleport completed</summary>
18219 </member> 15801 </member>
18220 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket"> 15802 <member name="F:OpenMetaverse.TeleportStatus.Cancelled">
18221 <exclude /> 15803 <summary>Teleport cancelled</summary>
18222 </member> 15804 </member>
18223 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket.AgentDataBlock"> 15805 <member name="T:OpenMetaverse.TeleportFlags">
18224 <exclude /> 15806 <summary>
15807
15808 </summary>
18225 </member> 15809 </member>
18226 <member name="T:OpenMetaverse.Packets.ClassifiedInfoUpdatePacket.DataBlock"> 15810 <member name="F:OpenMetaverse.TeleportFlags.Default">
18227 <exclude /> 15811 <summary>No flags set, or teleport failed</summary>
18228 </member> 15812 </member>
18229 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket"> 15813 <member name="F:OpenMetaverse.TeleportFlags.SetHomeToTarget">
18230 <exclude /> 15814 <summary>Set when newbie leaves help island for first time</summary>
18231 </member> 15815 </member>
18232 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket.AgentDataBlock"> 15816 <member name="F:OpenMetaverse.TeleportFlags.SetLastToTarget">
18233 <exclude /> 15817 <summary></summary>
18234 </member> 15818 </member>
18235 <member name="T:OpenMetaverse.Packets.ClassifiedDeletePacket.DataBlock"> 15819 <member name="F:OpenMetaverse.TeleportFlags.ViaLure">
18236 <exclude /> 15820 <summary>Via Lure</summary>
18237 </member> 15821 </member>
18238 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket"> 15822 <member name="F:OpenMetaverse.TeleportFlags.ViaLandmark">
18239 <exclude /> 15823 <summary>Via Landmark</summary>
18240 </member> 15824 </member>
18241 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket.AgentDataBlock"> 15825 <member name="F:OpenMetaverse.TeleportFlags.ViaLocation">
18242 <exclude /> 15826 <summary>Via Location</summary>
18243 </member> 15827 </member>
18244 <member name="T:OpenMetaverse.Packets.ClassifiedGodDeletePacket.DataBlock"> 15828 <member name="F:OpenMetaverse.TeleportFlags.ViaHome">
18245 <exclude /> 15829 <summary>Via Home</summary>
18246 </member> 15830 </member>
18247 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket"> 15831 <member name="F:OpenMetaverse.TeleportFlags.ViaTelehub">
18248 <exclude /> 15832 <summary>Via Telehub</summary>
18249 </member> 15833 </member>
18250 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket.AgentDataBlock"> 15834 <member name="F:OpenMetaverse.TeleportFlags.ViaLogin">
18251 <exclude /> 15835 <summary>Via Login</summary>
18252 </member> 15836 </member>
18253 <member name="T:OpenMetaverse.Packets.DirLandQueryPacket.QueryDataBlock"> 15837 <member name="F:OpenMetaverse.TeleportFlags.ViaGodlikeLure">
18254 <exclude /> 15838 <summary>Linden Summoned</summary>
18255 </member> 15839 </member>
18256 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket"> 15840 <member name="F:OpenMetaverse.TeleportFlags.Godlike">
18257 <exclude /> 15841 <summary>Linden Forced me</summary>
18258 </member> 15842 </member>
18259 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.AgentDataBlock"> 15843 <member name="F:OpenMetaverse.TeleportFlags.NineOneOne">
18260 <exclude /> 15844 <summary></summary>
18261 </member> 15845 </member>
18262 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.QueryDataBlock"> 15846 <member name="F:OpenMetaverse.TeleportFlags.DisableCancel">
18263 <exclude /> 15847 <summary>Agent Teleported Home via Script</summary>
18264 </member> 15848 </member>
18265 <member name="T:OpenMetaverse.Packets.DirLandReplyPacket.QueryRepliesBlock"> 15849 <member name="F:OpenMetaverse.TeleportFlags.ViaRegionID">
18266 <exclude /> 15850 <summary></summary>
18267 </member> 15851 </member>
18268 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket"> 15852 <member name="F:OpenMetaverse.TeleportFlags.IsFlying">
18269 <exclude /> 15853 <summary></summary>
18270 </member> 15854 </member>
18271 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket.AgentDataBlock"> 15855 <member name="F:OpenMetaverse.TeleportFlags.ResetHome">
18272 <exclude /> 15856 <summary></summary>
18273 </member> 15857 </member>
18274 <member name="T:OpenMetaverse.Packets.DirPopularQueryPacket.QueryDataBlock"> 15858 <member name="F:OpenMetaverse.TeleportFlags.ForceRedirect">
18275 <exclude /> 15859 <summary>forced to new location for example when avatar is banned or ejected</summary>
18276 </member> 15860 </member>
18277 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket"> 15861 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaLure">
18278 <exclude /> 15862 <summary>Teleport Finished via a Lure</summary>
18279 </member> 15863 </member>
18280 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.AgentDataBlock"> 15864 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaNewSim">
18281 <exclude /> 15865 <summary>Finished, Sim Changed</summary>
18282 </member> 15866 </member>
18283 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.QueryDataBlock"> 15867 <member name="F:OpenMetaverse.TeleportFlags.FinishedViaSameSim">
18284 <exclude /> 15868 <summary>Finished, Same Sim</summary>
18285 </member> 15869 </member>
18286 <member name="T:OpenMetaverse.Packets.DirPopularReplyPacket.QueryRepliesBlock"> 15870 <member name="T:OpenMetaverse.TeleportLureFlags">
18287 <exclude /> 15871 <summary>
15872
15873 </summary>
18288 </member> 15874 </member>
18289 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket"> 15875 <member name="F:OpenMetaverse.TeleportLureFlags.NormalLure">
18290 <exclude /> 15876 <summary></summary>
18291 </member> 15877 </member>
18292 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket.AgentDataBlock"> 15878 <member name="F:OpenMetaverse.TeleportLureFlags.GodlikeLure">
18293 <exclude /> 15879 <summary></summary>
18294 </member> 15880 </member>
18295 <member name="T:OpenMetaverse.Packets.ParcelInfoRequestPacket.DataBlock"> 15881 <member name="F:OpenMetaverse.TeleportLureFlags.GodlikePursuit">
18296 <exclude /> 15882 <summary></summary>
18297 </member> 15883 </member>
18298 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket"> 15884 <member name="T:OpenMetaverse.ScriptSensorTypeFlags">
18299 <exclude /> 15885 <summary>
15886
15887 </summary>
18300 </member> 15888 </member>
18301 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket.AgentDataBlock"> 15889 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Agent">
18302 <exclude /> 15890 <summary></summary>
18303 </member> 15891 </member>
18304 <member name="T:OpenMetaverse.Packets.ParcelInfoReplyPacket.DataBlock"> 15892 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Active">
18305 <exclude /> 15893 <summary></summary>
18306 </member> 15894 </member>
18307 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket"> 15895 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Passive">
18308 <exclude /> 15896 <summary></summary>
18309 </member> 15897 </member>
18310 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket.AgentDataBlock"> 15898 <member name="F:OpenMetaverse.ScriptSensorTypeFlags.Scripted">
18311 <exclude /> 15899 <summary></summary>
18312 </member> 15900 </member>
18313 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersRequestPacket.ParcelDataBlock"> 15901 <member name="T:OpenMetaverse.MuteType">
18314 <exclude /> 15902 <summary>
15903 Type of mute entry
15904 </summary>
18315 </member> 15905 </member>
18316 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersReplyPacket"> 15906 <member name="F:OpenMetaverse.MuteType.ByName">
18317 <exclude /> 15907 <summary>Object muted by name</summary>
18318 </member> 15908 </member>
18319 <member name="T:OpenMetaverse.Packets.ParcelObjectOwnersReplyPacket.DataBlock"> 15909 <member name="F:OpenMetaverse.MuteType.Resident">
18320 <exclude /> 15910 <summary>Muted residet</summary>
18321 </member> 15911 </member>
18322 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket"> 15912 <member name="F:OpenMetaverse.MuteType.Object">
18323 <exclude /> 15913 <summary>Object muted by UUID</summary>
18324 </member> 15914 </member>
18325 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket.AgentDataBlock"> 15915 <member name="F:OpenMetaverse.MuteType.Group">
18326 <exclude /> 15916 <summary>Muted group</summary>
18327 </member> 15917 </member>
18328 <member name="T:OpenMetaverse.Packets.GroupNoticesListRequestPacket.DataBlock"> 15918 <member name="F:OpenMetaverse.MuteType.External">
18329 <exclude /> 15919 <summary>Muted external entry</summary>
18330 </member> 15920 </member>
18331 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket"> 15921 <member name="T:OpenMetaverse.MuteFlags">
18332 <exclude /> 15922 <summary>
15923 Flags of mute entry
15924 </summary>
18333 </member> 15925 </member>
18334 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket.AgentDataBlock"> 15926 <member name="F:OpenMetaverse.MuteFlags.Default">
18335 <exclude /> 15927 <summary>No exceptions</summary>
18336 </member> 15928 </member>
18337 <member name="T:OpenMetaverse.Packets.GroupNoticesListReplyPacket.DataBlock"> 15929 <member name="F:OpenMetaverse.MuteFlags.TextChat">
18338 <exclude /> 15930 <summary>Don't mute text chat</summary>
18339 </member> 15931 </member>
18340 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket"> 15932 <member name="F:OpenMetaverse.MuteFlags.VoiceChat">
18341 <exclude /> 15933 <summary>Don't mute voice chat</summary>
18342 </member> 15934 </member>
18343 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket.AgentDataBlock"> 15935 <member name="F:OpenMetaverse.MuteFlags.Particles">
18344 <exclude /> 15936 <summary>Don't mute particles</summary>
18345 </member> 15937 </member>
18346 <member name="T:OpenMetaverse.Packets.GroupNoticeRequestPacket.DataBlock"> 15938 <member name="F:OpenMetaverse.MuteFlags.ObjectSounds">
18347 <exclude /> 15939 <summary>Don't mute sounds</summary>
18348 </member> 15940 </member>
18349 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket"> 15941 <member name="F:OpenMetaverse.MuteFlags.All">
18350 <exclude /> 15942 <summary>Don't mute</summary>
18351 </member> 15943 </member>
18352 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket.AgentDataBlock"> 15944 <member name="T:OpenMetaverse.InstantMessage">
18353 <exclude /> 15945 <summary>
15946 Instant Message
15947 </summary>
18354 </member> 15948 </member>
18355 <member name="T:OpenMetaverse.Packets.TeleportRequestPacket.InfoBlock"> 15949 <member name="F:OpenMetaverse.InstantMessage.FromAgentID">
18356 <exclude /> 15950 <summary>Key of sender</summary>
18357 </member> 15951 </member>
18358 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket"> 15952 <member name="F:OpenMetaverse.InstantMessage.FromAgentName">
18359 <exclude /> 15953 <summary>Name of sender</summary>
18360 </member> 15954 </member>
18361 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket.AgentDataBlock"> 15955 <member name="F:OpenMetaverse.InstantMessage.ToAgentID">
18362 <exclude /> 15956 <summary>Key of destination avatar</summary>
18363 </member> 15957 </member>
18364 <member name="T:OpenMetaverse.Packets.TeleportLocationRequestPacket.InfoBlock"> 15958 <member name="F:OpenMetaverse.InstantMessage.ParentEstateID">
18365 <exclude /> 15959 <summary>ID of originating estate</summary>
18366 </member> 15960 </member>
18367 <member name="T:OpenMetaverse.Packets.TeleportLocalPacket"> 15961 <member name="F:OpenMetaverse.InstantMessage.RegionID">
18368 <exclude /> 15962 <summary>Key of originating region</summary>
18369 </member> 15963 </member>
18370 <member name="T:OpenMetaverse.Packets.TeleportLocalPacket.InfoBlock"> 15964 <member name="F:OpenMetaverse.InstantMessage.Position">
18371 <exclude /> 15965 <summary>Coordinates in originating region</summary>
18372 </member> 15966 </member>
18373 <member name="T:OpenMetaverse.Packets.TeleportLandmarkRequestPacket"> 15967 <member name="F:OpenMetaverse.InstantMessage.Dialog">
18374 <exclude /> 15968 <summary>Instant message type</summary>
18375 </member> 15969 </member>
18376 <member name="T:OpenMetaverse.Packets.TeleportLandmarkRequestPacket.InfoBlock"> 15970 <member name="F:OpenMetaverse.InstantMessage.GroupIM">
18377 <exclude /> 15971 <summary>Group IM session toggle</summary>
18378 </member> 15972 </member>
18379 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket"> 15973 <member name="F:OpenMetaverse.InstantMessage.IMSessionID">
18380 <exclude /> 15974 <summary>Key of IM session, for Group Messages, the groups UUID</summary>
18381 </member> 15975 </member>
18382 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket.AgentDataBlock"> 15976 <member name="F:OpenMetaverse.InstantMessage.Timestamp">
18383 <exclude /> 15977 <summary>Timestamp of the instant message</summary>
18384 </member> 15978 </member>
18385 <member name="T:OpenMetaverse.Packets.TeleportProgressPacket.InfoBlock"> 15979 <member name="F:OpenMetaverse.InstantMessage.Message">
18386 <exclude /> 15980 <summary>Instant message text</summary>
18387 </member> 15981 </member>
18388 <member name="T:OpenMetaverse.Packets.TeleportFinishPacket"> 15982 <member name="F:OpenMetaverse.InstantMessage.Offline">
18389 <exclude /> 15983 <summary>Whether this message is held for offline avatars</summary>
18390 </member> 15984 </member>
18391 <member name="T:OpenMetaverse.Packets.TeleportFinishPacket.InfoBlock"> 15985 <member name="F:OpenMetaverse.InstantMessage.BinaryBucket">
18392 <exclude /> 15986 <summary>Context specific packed data</summary>
18393 </member> 15987 </member>
18394 <member name="T:OpenMetaverse.Packets.StartLurePacket"> 15988 <member name="M:OpenMetaverse.InstantMessage.ToString">
18395 <exclude /> 15989 <summary>Print the struct data as a string</summary>
15990 <returns>A string containing the field name, and field value</returns>
18396 </member> 15991 </member>
18397 <member name="T:OpenMetaverse.Packets.StartLurePacket.AgentDataBlock"> 15992 <member name="T:OpenMetaverse.MuteEntry">
18398 <exclude /> 15993 <summary>Represents muted object or resident</summary>
18399 </member> 15994 </member>
18400 <member name="T:OpenMetaverse.Packets.StartLurePacket.InfoBlock"> 15995 <member name="F:OpenMetaverse.MuteEntry.Type">
18401 <exclude /> 15996 <summary>Type of the mute entry</summary>
18402 </member> 15997 </member>
18403 <member name="T:OpenMetaverse.Packets.StartLurePacket.TargetDataBlock"> 15998 <member name="F:OpenMetaverse.MuteEntry.ID">
18404 <exclude /> 15999 <summary>UUID of the mute etnry</summary>
18405 </member> 16000 </member>
18406 <member name="T:OpenMetaverse.Packets.TeleportLureRequestPacket"> 16001 <member name="F:OpenMetaverse.MuteEntry.Name">
18407 <exclude /> 16002 <summary>Mute entry name</summary>
18408 </member> 16003 </member>
18409 <member name="T:OpenMetaverse.Packets.TeleportLureRequestPacket.InfoBlock"> 16004 <member name="F:OpenMetaverse.MuteEntry.Flags">
18410 <exclude /> 16005 <summary>Mute flags</summary>
18411 </member> 16006 </member>
18412 <member name="T:OpenMetaverse.Packets.TeleportCancelPacket"> 16007 <member name="T:OpenMetaverse.TransactionInfo">
18413 <exclude /> 16008 <summary>Transaction detail sent with MoneyBalanceReply message</summary>
18414 </member> 16009 </member>
18415 <member name="T:OpenMetaverse.Packets.TeleportCancelPacket.InfoBlock"> 16010 <member name="F:OpenMetaverse.TransactionInfo.TransactionType">
18416 <exclude /> 16011 <summary>Type of the transaction</summary>
18417 </member> 16012 </member>
18418 <member name="T:OpenMetaverse.Packets.TeleportStartPacket"> 16013 <member name="F:OpenMetaverse.TransactionInfo.SourceID">
18419 <exclude /> 16014 <summary>UUID of the transaction source</summary>
18420 </member> 16015 </member>
18421 <member name="T:OpenMetaverse.Packets.TeleportStartPacket.InfoBlock"> 16016 <member name="F:OpenMetaverse.TransactionInfo.IsSourceGroup">
18422 <exclude /> 16017 <summary>Is the transaction source a group</summary>
18423 </member> 16018 </member>
18424 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket"> 16019 <member name="F:OpenMetaverse.TransactionInfo.DestID">
18425 <exclude /> 16020 <summary>UUID of the transaction destination</summary>
18426 </member> 16021 </member>
18427 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket.InfoBlock"> 16022 <member name="F:OpenMetaverse.TransactionInfo.IsDestGroup">
18428 <exclude /> 16023 <summary>Is transaction destination a group</summary>
18429 </member> 16024 </member>
18430 <member name="T:OpenMetaverse.Packets.TeleportFailedPacket.AlertInfoBlock"> 16025 <member name="F:OpenMetaverse.TransactionInfo.Amount">
18431 <exclude /> 16026 <summary>Transaction amount</summary>
18432 </member> 16027 </member>
18433 <member name="T:OpenMetaverse.Packets.UndoPacket"> 16028 <member name="F:OpenMetaverse.TransactionInfo.ItemDescription">
18434 <exclude /> 16029 <summary>Transaction description</summary>
18435 </member> 16030 </member>
18436 <member name="T:OpenMetaverse.Packets.UndoPacket.AgentDataBlock"> 16031 <member name="T:OpenMetaverse.ChatEventArgs">
18437 <exclude /> 16032 <summary>
16033
16034 </summary>
18438 </member> 16035 </member>
18439 <member name="T:OpenMetaverse.Packets.UndoPacket.ObjectDataBlock"> 16036 <member name="M:OpenMetaverse.ChatEventArgs.#ctor(OpenMetaverse.Simulator,System.String,OpenMetaverse.ChatAudibleLevel,OpenMetaverse.ChatType,OpenMetaverse.ChatSourceType,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3)">
18440 <exclude /> 16037 <summary>
16038 Construct a new instance of the ChatEventArgs object
16039 </summary>
16040 <param name="simulator">Sim from which the message originates</param>
16041 <param name="message">The message sent</param>
16042 <param name="audible">The audible level of the message</param>
16043 <param name="type">The type of message sent: whisper, shout, etc</param>
16044 <param name="sourceType">The source type of the message sender</param>
16045 <param name="fromName">The name of the agent or object sending the message</param>
16046 <param name="sourceId">The ID of the agent or object sending the message</param>
16047 <param name="ownerid">The ID of the object owner, or the agent ID sending the message</param>
16048 <param name="position">The position of the agent or object sending the message</param>
18441 </member> 16049 </member>
18442 <member name="T:OpenMetaverse.Packets.RedoPacket"> 16050 <member name="P:OpenMetaverse.ChatEventArgs.Simulator">
18443 <exclude /> 16051 <summary>Get the simulator sending the message</summary>
18444 </member> 16052 </member>
18445 <member name="T:OpenMetaverse.Packets.RedoPacket.AgentDataBlock"> 16053 <member name="P:OpenMetaverse.ChatEventArgs.Message">
18446 <exclude /> 16054 <summary>Get the message sent</summary>
18447 </member> 16055 </member>
18448 <member name="T:OpenMetaverse.Packets.RedoPacket.ObjectDataBlock"> 16056 <member name="P:OpenMetaverse.ChatEventArgs.AudibleLevel">
18449 <exclude /> 16057 <summary>Get the audible level of the message</summary>
18450 </member> 16058 </member>
18451 <member name="T:OpenMetaverse.Packets.UndoLandPacket"> 16059 <member name="P:OpenMetaverse.ChatEventArgs.Type">
18452 <exclude /> 16060 <summary>Get the type of message sent: whisper, shout, etc</summary>
18453 </member> 16061 </member>
18454 <member name="T:OpenMetaverse.Packets.UndoLandPacket.AgentDataBlock"> 16062 <member name="P:OpenMetaverse.ChatEventArgs.SourceType">
18455 <exclude /> 16063 <summary>Get the source type of the message sender</summary>
18456 </member> 16064 </member>
18457 <member name="T:OpenMetaverse.Packets.AgentPausePacket"> 16065 <member name="P:OpenMetaverse.ChatEventArgs.FromName">
18458 <exclude /> 16066 <summary>Get the name of the agent or object sending the message</summary>
18459 </member> 16067 </member>
18460 <member name="T:OpenMetaverse.Packets.AgentPausePacket.AgentDataBlock"> 16068 <member name="P:OpenMetaverse.ChatEventArgs.SourceID">
18461 <exclude /> 16069 <summary>Get the ID of the agent or object sending the message</summary>
18462 </member> 16070 </member>
18463 <member name="T:OpenMetaverse.Packets.AgentResumePacket"> 16071 <member name="P:OpenMetaverse.ChatEventArgs.OwnerID">
18464 <exclude /> 16072 <summary>Get the ID of the object owner, or the agent ID sending the message</summary>
18465 </member> 16073 </member>
18466 <member name="T:OpenMetaverse.Packets.AgentResumePacket.AgentDataBlock"> 16074 <member name="P:OpenMetaverse.ChatEventArgs.Position">
18467 <exclude /> 16075 <summary>Get the position of the agent or object sending the message</summary>
18468 </member> 16076 </member>
18469 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket"> 16077 <member name="T:OpenMetaverse.ScriptDialogEventArgs">
18470 <exclude /> 16078 <summary>Contains the data sent when a primitive opens a dialog with this agent</summary>
18471 </member> 16079 </member>
18472 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket.AgentDataBlock"> 16080 <member name="M:OpenMetaverse.ScriptDialogEventArgs.#ctor(System.String,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,System.Int32,System.Collections.Generic.List{System.String},OpenMetaverse.UUID)">
18473 <exclude /> 16081 <summary>
16082 Construct a new instance of the ScriptDialogEventArgs
16083 </summary>
16084 <param name="message">The dialog message</param>
16085 <param name="objectName">The name of the object that sent the dialog request</param>
16086 <param name="imageID">The ID of the image to be displayed</param>
16087 <param name="objectID">The ID of the primitive sending the dialog</param>
16088 <param name="firstName">The first name of the senders owner</param>
16089 <param name="lastName">The last name of the senders owner</param>
16090 <param name="chatChannel">The communication channel the dialog was sent on</param>
16091 <param name="buttons">The string labels containing the options presented in this dialog</param>
16092 <param name="ownerID">UUID of the scritped object owner</param>
18474 </member> 16093 </member>
18475 <member name="T:OpenMetaverse.Packets.ChatFromViewerPacket.ChatDataBlock"> 16094 <member name="P:OpenMetaverse.ScriptDialogEventArgs.Message">
18476 <exclude /> 16095 <summary>Get the dialog message</summary>
18477 </member> 16096 </member>
18478 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket"> 16097 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ObjectName">
18479 <exclude /> 16098 <summary>Get the name of the object that sent the dialog request</summary>
18480 </member> 16099 </member>
18481 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket.AgentDataBlock"> 16100 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ImageID">
18482 <exclude /> 16101 <summary>Get the ID of the image to be displayed</summary>
18483 </member> 16102 </member>
18484 <member name="T:OpenMetaverse.Packets.AgentThrottlePacket.ThrottleBlock"> 16103 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ObjectID">
18485 <exclude /> 16104 <summary>Get the ID of the primitive sending the dialog</summary>
18486 </member> 16105 </member>
18487 <member name="T:OpenMetaverse.Packets.AgentFOVPacket"> 16106 <member name="P:OpenMetaverse.ScriptDialogEventArgs.FirstName">
18488 <exclude /> 16107 <summary>Get the first name of the senders owner</summary>
18489 </member> 16108 </member>
18490 <member name="T:OpenMetaverse.Packets.AgentFOVPacket.AgentDataBlock"> 16109 <member name="P:OpenMetaverse.ScriptDialogEventArgs.LastName">
18491 <exclude /> 16110 <summary>Get the last name of the senders owner</summary>
18492 </member> 16111 </member>
18493 <member name="T:OpenMetaverse.Packets.AgentFOVPacket.FOVBlockBlock"> 16112 <member name="P:OpenMetaverse.ScriptDialogEventArgs.Channel">
18494 <exclude /> 16113 <summary>Get the communication channel the dialog was sent on, responses
16114 should also send responses on this same channel</summary>
18495 </member> 16115 </member>
18496 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket"> 16116 <member name="P:OpenMetaverse.ScriptDialogEventArgs.ButtonLabels">
18497 <exclude /> 16117 <summary>Get the string labels containing the options presented in this dialog</summary>
18498 </member> 16118 </member>
18499 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket.AgentDataBlock"> 16119 <member name="P:OpenMetaverse.ScriptDialogEventArgs.OwnerID">
18500 <exclude /> 16120 <summary>UUID of the scritped object owner</summary>
18501 </member> 16121 </member>
18502 <member name="T:OpenMetaverse.Packets.AgentHeightWidthPacket.HeightWidthBlockBlock"> 16122 <member name="T:OpenMetaverse.ScriptQuestionEventArgs">
18503 <exclude /> 16123 <summary>Contains the data sent when a primitive requests debit or other permissions
16124 requesting a YES or NO answer</summary>
18504 </member> 16125 </member>
18505 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket"> 16126 <member name="M:OpenMetaverse.ScriptQuestionEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.ScriptPermission)">
18506 <exclude /> 16127 <summary>
16128 Construct a new instance of the ScriptQuestionEventArgs
16129 </summary>
16130 <param name="simulator">The simulator containing the object sending the request</param>
16131 <param name="taskID">The ID of the script making the request</param>
16132 <param name="itemID">The ID of the primitive containing the script making the request</param>
16133 <param name="objectName">The name of the primitive making the request</param>
16134 <param name="objectOwner">The name of the owner of the object making the request</param>
16135 <param name="questions">The permissions being requested</param>
18507 </member> 16136 </member>
18508 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.AgentDataBlock"> 16137 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.Simulator">
18509 <exclude /> 16138 <summary>Get the simulator containing the object sending the request</summary>
18510 </member> 16139 </member>
18511 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.WearableDataBlock"> 16140 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.TaskID">
18512 <exclude /> 16141 <summary>Get the ID of the script making the request</summary>
18513 </member> 16142 </member>
18514 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.ObjectDataBlock"> 16143 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ItemID">
18515 <exclude /> 16144 <summary>Get the ID of the primitive containing the script making the request</summary>
18516 </member> 16145 </member>
18517 <member name="T:OpenMetaverse.Packets.AgentSetAppearancePacket.VisualParamBlock"> 16146 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ObjectName">
18518 <exclude /> 16147 <summary>Get the name of the primitive making the request</summary>
18519 </member> 16148 </member>
18520 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket"> 16149 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.ObjectOwnerName">
18521 <exclude /> 16150 <summary>Get the name of the owner of the object making the request</summary>
18522 </member> 16151 </member>
18523 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket.AgentDataBlock"> 16152 <member name="P:OpenMetaverse.ScriptQuestionEventArgs.Questions">
18524 <exclude /> 16153 <summary>Get the permissions being requested</summary>
18525 </member> 16154 </member>
18526 <member name="T:OpenMetaverse.Packets.AgentQuitCopyPacket.FuseBlockBlock"> 16155 <member name="T:OpenMetaverse.LoadUrlEventArgs">
18527 <exclude /> 16156 <summary>Contains the data sent when a primitive sends a request
16157 to an agent to open the specified URL</summary>
18528 </member> 16158 </member>
18529 <member name="T:OpenMetaverse.Packets.ImageNotInDatabasePacket"> 16159 <member name="M:OpenMetaverse.LoadUrlEventArgs.#ctor(System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.String,System.String)">
18530 <exclude /> 16160 <summary>
16161 Construct a new instance of the LoadUrlEventArgs
16162 </summary>
16163 <param name="objectName">The name of the object sending the request</param>
16164 <param name="objectID">The ID of the object sending the request</param>
16165 <param name="ownerID">The ID of the owner of the object sending the request</param>
16166 <param name="ownerIsGroup">True if the object is owned by a group</param>
16167 <param name="message">The message sent with the request</param>
16168 <param name="URL">The URL the object sent</param>
18531 </member> 16169 </member>
18532 <member name="T:OpenMetaverse.Packets.ImageNotInDatabasePacket.ImageIDBlock"> 16170 <member name="P:OpenMetaverse.LoadUrlEventArgs.ObjectName">
18533 <exclude /> 16171 <summary>Get the name of the object sending the request</summary>
18534 </member> 16172 </member>
18535 <member name="T:OpenMetaverse.Packets.RebakeAvatarTexturesPacket"> 16173 <member name="P:OpenMetaverse.LoadUrlEventArgs.ObjectID">
18536 <exclude /> 16174 <summary>Get the ID of the object sending the request</summary>
18537 </member> 16175 </member>
18538 <member name="T:OpenMetaverse.Packets.RebakeAvatarTexturesPacket.TextureDataBlock"> 16176 <member name="P:OpenMetaverse.LoadUrlEventArgs.OwnerID">
18539 <exclude /> 16177 <summary>Get the ID of the owner of the object sending the request</summary>
18540 </member> 16178 </member>
18541 <member name="T:OpenMetaverse.Packets.SetAlwaysRunPacket"> 16179 <member name="P:OpenMetaverse.LoadUrlEventArgs.OwnerIsGroup">
18542 <exclude /> 16180 <summary>True if the object is owned by a group</summary>
18543 </member> 16181 </member>
18544 <member name="T:OpenMetaverse.Packets.SetAlwaysRunPacket.AgentDataBlock"> 16182 <member name="P:OpenMetaverse.LoadUrlEventArgs.Message">
18545 <exclude /> 16183 <summary>Get the message sent with the request</summary>
18546 </member> 16184 </member>
18547 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket"> 16185 <member name="P:OpenMetaverse.LoadUrlEventArgs.URL">
18548 <exclude /> 16186 <summary>Get the URL the object sent</summary>
18549 </member> 16187 </member>
18550 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket.AgentDataBlock"> 16188 <member name="T:OpenMetaverse.InstantMessageEventArgs">
18551 <exclude /> 16189 <summary>The date received from an ImprovedInstantMessage</summary>
18552 </member> 16190 </member>
18553 <member name="T:OpenMetaverse.Packets.ObjectDeletePacket.ObjectDataBlock"> 16191 <member name="M:OpenMetaverse.InstantMessageEventArgs.#ctor(OpenMetaverse.InstantMessage,OpenMetaverse.Simulator)">
18554 <exclude /> 16192 <summary>
16193 Construct a new instance of the InstantMessageEventArgs object
16194 </summary>
16195 <param name="im">the InstantMessage object</param>
16196 <param name="simulator">the simulator where the InstantMessage origniated</param>
18555 </member> 16197 </member>
18556 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket"> 16198 <member name="P:OpenMetaverse.InstantMessageEventArgs.IM">
18557 <exclude /> 16199 <summary>Get the InstantMessage object</summary>
18558 </member> 16200 </member>
18559 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.AgentDataBlock"> 16201 <member name="P:OpenMetaverse.InstantMessageEventArgs.Simulator">
18560 <exclude /> 16202 <summary>Get the simulator where the InstantMessage origniated</summary>
18561 </member> 16203 </member>
18562 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.SharedDataBlock"> 16204 <member name="T:OpenMetaverse.BalanceEventArgs">
18563 <exclude /> 16205 <summary>Contains the currency balance</summary>
18564 </member> 16206 </member>
18565 <member name="T:OpenMetaverse.Packets.ObjectDuplicatePacket.ObjectDataBlock"> 16207 <member name="M:OpenMetaverse.BalanceEventArgs.#ctor(System.Int32)">
18566 <exclude /> 16208 <summary>
16209 Construct a new BalanceEventArgs object
16210 </summary>
16211 <param name="balance">The currenct balance</param>
18567 </member> 16212 </member>
18568 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket"> 16213 <member name="P:OpenMetaverse.BalanceEventArgs.Balance">
18569 <exclude /> 16214 <summary>
16215 Get the currenct balance
16216 </summary>
18570 </member> 16217 </member>
18571 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket.AgentDataBlock"> 16218 <member name="T:OpenMetaverse.MoneyBalanceReplyEventArgs">
18572 <exclude /> 16219 <summary>Contains the transaction summary when an item is purchased,
16220 money is given, or land is purchased</summary>
18573 </member> 16221 </member>
18574 <member name="T:OpenMetaverse.Packets.ObjectDuplicateOnRayPacket.ObjectDataBlock"> 16222 <member name="M:OpenMetaverse.MoneyBalanceReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,System.Int32,System.Int32,System.Int32,System.String,OpenMetaverse.TransactionInfo)">
18575 <exclude /> 16223 <summary>
16224 Construct a new instance of the MoneyBalanceReplyEventArgs object
16225 </summary>
16226 <param name="transactionID">The ID of the transaction</param>
16227 <param name="transactionSuccess">True of the transaction was successful</param>
16228 <param name="balance">The current currency balance</param>
16229 <param name="metersCredit">The meters credited</param>
16230 <param name="metersCommitted">The meters comitted</param>
16231 <param name="description">A brief description of the transaction</param>
16232 <param name="transactionInfo">Transaction info</param>
18576 </member> 16233 </member>
18577 <member name="T:OpenMetaverse.Packets.ObjectScalePacket"> 16234 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.TransactionID">
18578 <exclude /> 16235 <summary>Get the ID of the transaction</summary>
18579 </member> 16236 </member>
18580 <member name="T:OpenMetaverse.Packets.ObjectScalePacket.AgentDataBlock"> 16237 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Success">
18581 <exclude /> 16238 <summary>True of the transaction was successful</summary>
18582 </member> 16239 </member>
18583 <member name="T:OpenMetaverse.Packets.ObjectScalePacket.ObjectDataBlock"> 16240 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Balance">
18584 <exclude /> 16241 <summary>Get the remaining currency balance</summary>
18585 </member> 16242 </member>
18586 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket"> 16243 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.MetersCredit">
18587 <exclude /> 16244 <summary>Get the meters credited</summary>
18588 </member> 16245 </member>
18589 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket.AgentDataBlock"> 16246 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.MetersCommitted">
18590 <exclude /> 16247 <summary>Get the meters comitted</summary>
18591 </member> 16248 </member>
18592 <member name="T:OpenMetaverse.Packets.ObjectRotationPacket.ObjectDataBlock"> 16249 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.Description">
18593 <exclude /> 16250 <summary>Get the description of the transaction</summary>
18594 </member> 16251 </member>
18595 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket"> 16252 <member name="P:OpenMetaverse.MoneyBalanceReplyEventArgs.TransactionInfo">
18596 <exclude /> 16253 <summary>Detailed transaction information</summary>
18597 </member> 16254 </member>
18598 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket.AgentDataBlock"> 16255 <member name="T:OpenMetaverse.AgentDataReplyEventArgs">
18599 <exclude /> 16256 <summary>Data sent from the simulator containing information about your agent and active group information</summary>
18600 </member> 16257 </member>
18601 <member name="T:OpenMetaverse.Packets.ObjectFlagUpdatePacket.ExtraPhysicsBlock"> 16258 <member name="M:OpenMetaverse.AgentDataReplyEventArgs.#ctor(System.String,System.String,OpenMetaverse.UUID,System.String,OpenMetaverse.GroupPowers,System.String)">
18602 <exclude /> 16259 <summary>
16260 Construct a new instance of the AgentDataReplyEventArgs object
16261 </summary>
16262 <param name="firstName">The agents first name</param>
16263 <param name="lastName">The agents last name</param>
16264 <param name="activeGroupID">The agents active group ID</param>
16265 <param name="groupTitle">The group title of the agents active group</param>
16266 <param name="groupPowers">The combined group powers the agent has in the active group</param>
16267 <param name="groupName">The name of the group the agent has currently active</param>
18603 </member> 16268 </member>
18604 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket"> 16269 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.FirstName">
18605 <exclude /> 16270 <summary>Get the agents first name</summary>
18606 </member> 16271 </member>
18607 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket.AgentDataBlock"> 16272 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.LastName">
18608 <exclude /> 16273 <summary>Get the agents last name</summary>
18609 </member> 16274 </member>
18610 <member name="T:OpenMetaverse.Packets.ObjectClickActionPacket.ObjectDataBlock"> 16275 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.ActiveGroupID">
18611 <exclude /> 16276 <summary>Get the active group ID of your agent</summary>
18612 </member> 16277 </member>
18613 <member name="T:OpenMetaverse.Packets.ObjectImagePacket"> 16278 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupTitle">
18614 <exclude /> 16279 <summary>Get the active groups title of your agent</summary>
18615 </member> 16280 </member>
18616 <member name="T:OpenMetaverse.Packets.ObjectImagePacket.AgentDataBlock"> 16281 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupPowers">
18617 <exclude /> 16282 <summary>Get the combined group powers of your agent</summary>
18618 </member> 16283 </member>
18619 <member name="T:OpenMetaverse.Packets.ObjectImagePacket.ObjectDataBlock"> 16284 <member name="P:OpenMetaverse.AgentDataReplyEventArgs.GroupName">
18620 <exclude /> 16285 <summary>Get the active group name of your agent</summary>
18621 </member> 16286 </member>
18622 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket"> 16287 <member name="T:OpenMetaverse.AnimationsChangedEventArgs">
18623 <exclude /> 16288 <summary>Data sent by the simulator to indicate the active/changed animations
16289 applied to your agent</summary>
18624 </member> 16290 </member>
18625 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket.AgentDataBlock"> 16291 <member name="M:OpenMetaverse.AnimationsChangedEventArgs.#ctor(OpenMetaverse.InternalDictionary{OpenMetaverse.UUID,System.Int32})">
18626 <exclude /> 16292 <summary>
16293 Construct a new instance of the AnimationsChangedEventArgs class
16294 </summary>
16295 <param name="agentAnimations">The dictionary that contains the changed animations</param>
18627 </member> 16296 </member>
18628 <member name="T:OpenMetaverse.Packets.ObjectMaterialPacket.ObjectDataBlock"> 16297 <member name="P:OpenMetaverse.AnimationsChangedEventArgs.Animations">
18629 <exclude /> 16298 <summary>Get the dictionary that contains the changed animations</summary>
18630 </member> 16299 </member>
18631 <member name="T:OpenMetaverse.Packets.ObjectShapePacket"> 16300 <member name="T:OpenMetaverse.MeanCollisionEventArgs">
18632 <exclude /> 16301 <summary>
16302 Data sent from a simulator indicating a collision with your agent
16303 </summary>
18633 </member> 16304 </member>
18634 <member name="T:OpenMetaverse.Packets.ObjectShapePacket.AgentDataBlock"> 16305 <member name="M:OpenMetaverse.MeanCollisionEventArgs.#ctor(OpenMetaverse.MeanCollisionType,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Single,System.DateTime)">
18635 <exclude /> 16306 <summary>
16307 Construct a new instance of the MeanCollisionEventArgs class
16308 </summary>
16309 <param name="type">The type of collision that occurred</param>
16310 <param name="perp">The ID of the agent or object that perpetrated the agression</param>
16311 <param name="victim">The ID of the Victim</param>
16312 <param name="magnitude">The strength of the collision</param>
16313 <param name="time">The Time the collision occurred</param>
18636 </member> 16314 </member>
18637 <member name="T:OpenMetaverse.Packets.ObjectShapePacket.ObjectDataBlock"> 16315 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Type">
18638 <exclude /> 16316 <summary>Get the Type of collision</summary>
18639 </member> 16317 </member>
18640 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket"> 16318 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Aggressor">
18641 <exclude /> 16319 <summary>Get the ID of the agent or object that collided with your agent</summary>
18642 </member> 16320 </member>
18643 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket.AgentDataBlock"> 16321 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Victim">
18644 <exclude /> 16322 <summary>Get the ID of the agent that was attacked</summary>
18645 </member> 16323 </member>
18646 <member name="T:OpenMetaverse.Packets.ObjectExtraParamsPacket.ObjectDataBlock"> 16324 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Magnitude">
18647 <exclude /> 16325 <summary>A value indicating the strength of the collision</summary>
18648 </member> 16326 </member>
18649 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket"> 16327 <member name="P:OpenMetaverse.MeanCollisionEventArgs.Time">
18650 <exclude /> 16328 <summary>Get the time the collision occurred</summary>
18651 </member> 16329 </member>
18652 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.AgentDataBlock"> 16330 <member name="T:OpenMetaverse.RegionCrossedEventArgs">
18653 <exclude /> 16331 <summary>Data sent to your agent when it crosses region boundaries</summary>
18654 </member> 16332 </member>
18655 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.HeaderDataBlock"> 16333 <member name="M:OpenMetaverse.RegionCrossedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Simulator)">
18656 <exclude /> 16334 <summary>
16335 Construct a new instance of the RegionCrossedEventArgs class
16336 </summary>
16337 <param name="oldSim">The simulator your agent just left</param>
16338 <param name="newSim">The simulator your agent is now in</param>
18657 </member> 16339 </member>
18658 <member name="T:OpenMetaverse.Packets.ObjectOwnerPacket.ObjectDataBlock"> 16340 <member name="P:OpenMetaverse.RegionCrossedEventArgs.OldSimulator">
18659 <exclude /> 16341 <summary>Get the simulator your agent just left</summary>
18660 </member> 16342 </member>
18661 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket"> 16343 <member name="P:OpenMetaverse.RegionCrossedEventArgs.NewSimulator">
18662 <exclude /> 16344 <summary>Get the simulator your agent is now in</summary>
18663 </member> 16345 </member>
18664 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket.AgentDataBlock"> 16346 <member name="T:OpenMetaverse.GroupChatJoinedEventArgs">
18665 <exclude /> 16347 <summary>Data sent from the simulator when your agent joins a group chat session</summary>
18666 </member> 16348 </member>
18667 <member name="T:OpenMetaverse.Packets.ObjectGroupPacket.ObjectDataBlock"> 16349 <member name="M:OpenMetaverse.GroupChatJoinedEventArgs.#ctor(OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,System.Boolean)">
18668 <exclude /> 16350 <summary>
16351 Construct a new instance of the GroupChatJoinedEventArgs class
16352 </summary>
16353 <param name="groupChatSessionID">The ID of the session</param>
16354 <param name="sessionName">The name of the session</param>
16355 <param name="tmpSessionID">A temporary session id used for establishing new sessions</param>
16356 <param name="success">True of your agent successfully joined the session</param>
18669 </member> 16357 </member>
18670 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket"> 16358 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.SessionID">
18671 <exclude /> 16359 <summary>Get the ID of the group chat session</summary>
18672 </member> 16360 </member>
18673 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket.AgentDataBlock"> 16361 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.SessionName">
18674 <exclude /> 16362 <summary>Get the name of the session</summary>
18675 </member> 16363 </member>
18676 <member name="T:OpenMetaverse.Packets.ObjectBuyPacket.ObjectDataBlock"> 16364 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.TmpSessionID">
18677 <exclude /> 16365 <summary>Get the temporary session ID used for establishing new sessions</summary>
18678 </member> 16366 </member>
18679 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket"> 16367 <member name="P:OpenMetaverse.GroupChatJoinedEventArgs.Success">
18680 <exclude /> 16368 <summary>True if your agent successfully joined the session</summary>
18681 </member> 16369 </member>
18682 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket.AgentDataBlock"> 16370 <member name="T:OpenMetaverse.AlertMessageEventArgs">
18683 <exclude /> 16371 <summary>Data sent by the simulator containing urgent messages</summary>
18684 </member> 16372 </member>
18685 <member name="T:OpenMetaverse.Packets.BuyObjectInventoryPacket.DataBlock"> 16373 <member name="M:OpenMetaverse.AlertMessageEventArgs.#ctor(System.String)">
18686 <exclude /> 16374 <summary>
16375 Construct a new instance of the AlertMessageEventArgs class
16376 </summary>
16377 <param name="message">The alert message</param>
18687 </member> 16378 </member>
18688 <member name="T:OpenMetaverse.Packets.DerezContainerPacket"> 16379 <member name="P:OpenMetaverse.AlertMessageEventArgs.Message">
18689 <exclude /> 16380 <summary>Get the alert message</summary>
18690 </member> 16381 </member>
18691 <member name="T:OpenMetaverse.Packets.DerezContainerPacket.DataBlock"> 16382 <member name="T:OpenMetaverse.ScriptControlEventArgs">
18692 <exclude /> 16383 <summary>Data sent by a script requesting to take or release specified controls to your agent</summary>
18693 </member> 16384 </member>
18694 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket"> 16385 <member name="M:OpenMetaverse.ScriptControlEventArgs.#ctor(OpenMetaverse.ScriptControlChange,System.Boolean,System.Boolean)">
18695 <exclude /> 16386 <summary>
16387 Construct a new instance of the ScriptControlEventArgs class
16388 </summary>
16389 <param name="controls">The controls the script is attempting to take or release to the agent</param>
16390 <param name="pass">True if the script is passing controls back to the agent</param>
16391 <param name="take">True if the script is requesting controls be released to the script</param>
18696 </member> 16392 </member>
18697 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.AgentDataBlock"> 16393 <member name="P:OpenMetaverse.ScriptControlEventArgs.Controls">
18698 <exclude /> 16394 <summary>Get the controls the script is attempting to take or release to the agent</summary>
18699 </member> 16395 </member>
18700 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.HeaderDataBlock"> 16396 <member name="P:OpenMetaverse.ScriptControlEventArgs.Pass">
18701 <exclude /> 16397 <summary>True if the script is passing controls back to the agent</summary>
18702 </member> 16398 </member>
18703 <member name="T:OpenMetaverse.Packets.ObjectPermissionsPacket.ObjectDataBlock"> 16399 <member name="P:OpenMetaverse.ScriptControlEventArgs.Take">
18704 <exclude /> 16400 <summary>True if the script is requesting controls be released to the script</summary>
18705 </member> 16401 </member>
18706 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket"> 16402 <member name="T:OpenMetaverse.CameraConstraintEventArgs">
18707 <exclude /> 16403 <summary>
16404 Data sent from the simulator to an agent to indicate its view limits
16405 </summary>
18708 </member> 16406 </member>
18709 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket.AgentDataBlock"> 16407 <member name="M:OpenMetaverse.CameraConstraintEventArgs.#ctor(OpenMetaverse.Vector4)">
18710 <exclude /> 16408 <summary>
16409 Construct a new instance of the CameraConstraintEventArgs class
16410 </summary>
16411 <param name="collidePlane">The collision plane</param>
18711 </member> 16412 </member>
18712 <member name="T:OpenMetaverse.Packets.ObjectSaleInfoPacket.ObjectDataBlock"> 16413 <member name="P:OpenMetaverse.CameraConstraintEventArgs.CollidePlane">
18713 <exclude /> 16414 <summary>Get the collision plane</summary>
18714 </member> 16415 </member>
18715 <member name="T:OpenMetaverse.Packets.ObjectNamePacket"> 16416 <member name="T:OpenMetaverse.ScriptSensorReplyEventArgs">
18716 <exclude /> 16417 <summary>
16418 Data containing script sensor requests which allow an agent to know the specific details
16419 of a primitive sending script sensor requests
16420 </summary>
18717 </member> 16421 </member>
18718 <member name="T:OpenMetaverse.Packets.ObjectNamePacket.AgentDataBlock"> 16422 <member name="M:OpenMetaverse.ScriptSensorReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Vector3,System.Single,OpenMetaverse.Quaternion,OpenMetaverse.ScriptSensorTypeFlags,OpenMetaverse.Vector3)">
18719 <exclude /> 16423 <summary>
16424 Construct a new instance of the ScriptSensorReplyEventArgs
16425 </summary>
16426 <param name="requestorID">The ID of the primitive sending the sensor</param>
16427 <param name="groupID">The ID of the group associated with the primitive</param>
16428 <param name="name">The name of the primitive sending the sensor</param>
16429 <param name="objectID">The ID of the primitive sending the sensor</param>
16430 <param name="ownerID">The ID of the owner of the primitive sending the sensor</param>
16431 <param name="position">The position of the primitive sending the sensor</param>
16432 <param name="range">The range the primitive specified to scan</param>
16433 <param name="rotation">The rotation of the primitive sending the sensor</param>
16434 <param name="type">The type of sensor the primitive sent</param>
16435 <param name="velocity">The velocity of the primitive sending the sensor</param>
18720 </member> 16436 </member>
18721 <member name="T:OpenMetaverse.Packets.ObjectNamePacket.ObjectDataBlock"> 16437 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.RequestorID">
18722 <exclude /> 16438 <summary>Get the ID of the primitive sending the sensor</summary>
18723 </member> 16439 </member>
18724 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket"> 16440 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.GroupID">
18725 <exclude /> 16441 <summary>Get the ID of the group associated with the primitive</summary>
18726 </member> 16442 </member>
18727 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket.AgentDataBlock"> 16443 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Name">
18728 <exclude /> 16444 <summary>Get the name of the primitive sending the sensor</summary>
18729 </member> 16445 </member>
18730 <member name="T:OpenMetaverse.Packets.ObjectDescriptionPacket.ObjectDataBlock"> 16446 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.ObjectID">
18731 <exclude /> 16447 <summary>Get the ID of the primitive sending the sensor</summary>
18732 </member> 16448 </member>
18733 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket"> 16449 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.OwnerID">
18734 <exclude /> 16450 <summary>Get the ID of the owner of the primitive sending the sensor</summary>
18735 </member> 16451 </member>
18736 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket.AgentDataBlock"> 16452 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Position">
18737 <exclude /> 16453 <summary>Get the position of the primitive sending the sensor</summary>
18738 </member> 16454 </member>
18739 <member name="T:OpenMetaverse.Packets.ObjectCategoryPacket.ObjectDataBlock"> 16455 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Range">
18740 <exclude /> 16456 <summary>Get the range the primitive specified to scan</summary>
18741 </member> 16457 </member>
18742 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket"> 16458 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Rotation">
18743 <exclude /> 16459 <summary>Get the rotation of the primitive sending the sensor</summary>
18744 </member> 16460 </member>
18745 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket.AgentDataBlock"> 16461 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Type">
18746 <exclude /> 16462 <summary>Get the type of sensor the primitive sent</summary>
18747 </member> 16463 </member>
18748 <member name="T:OpenMetaverse.Packets.ObjectSelectPacket.ObjectDataBlock"> 16464 <member name="P:OpenMetaverse.ScriptSensorReplyEventArgs.Velocity">
18749 <exclude /> 16465 <summary>Get the velocity of the primitive sending the sensor</summary>
18750 </member> 16466 </member>
18751 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket"> 16467 <member name="T:OpenMetaverse.AvatarSitResponseEventArgs">
18752 <exclude /> 16468 <summary>Contains the response data returned from the simulator in response to a <see cref="!:RequestSit"/></summary>
18753 </member> 16469 </member>
18754 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket.AgentDataBlock"> 16470 <member name="M:OpenMetaverse.AvatarSitResponseEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Boolean,OpenMetaverse.Vector3,OpenMetaverse.Quaternion)">
18755 <exclude /> 16471 <summary>Construct a new instance of the AvatarSitResponseEventArgs object</summary>
18756 </member> 16472 </member>
18757 <member name="T:OpenMetaverse.Packets.ObjectDeselectPacket.ObjectDataBlock"> 16473 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.ObjectID">
18758 <exclude /> 16474 <summary>Get the ID of the primitive the agent will be sitting on</summary>
18759 </member> 16475 </member>
18760 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket"> 16476 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.Autopilot">
18761 <exclude /> 16477 <summary>True if the simulator Autopilot functions were involved</summary>
18762 </member> 16478 </member>
18763 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket.AgentDataBlock"> 16479 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.CameraAtOffset">
18764 <exclude /> 16480 <summary>Get the camera offset of the agent when seated</summary>
18765 </member> 16481 </member>
18766 <member name="T:OpenMetaverse.Packets.ObjectAttachPacket.ObjectDataBlock"> 16482 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.CameraEyeOffset">
18767 <exclude /> 16483 <summary>Get the camera eye offset of the agent when seated</summary>
18768 </member> 16484 </member>
18769 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket"> 16485 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.ForceMouselook">
18770 <exclude /> 16486 <summary>True of the agent will be in mouselook mode when seated</summary>
18771 </member> 16487 </member>
18772 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket.AgentDataBlock"> 16488 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.SitPosition">
18773 <exclude /> 16489 <summary>Get the position of the agent when seated</summary>
18774 </member> 16490 </member>
18775 <member name="T:OpenMetaverse.Packets.ObjectDetachPacket.ObjectDataBlock"> 16491 <member name="P:OpenMetaverse.AvatarSitResponseEventArgs.SitRotation">
18776 <exclude /> 16492 <summary>Get the rotation of the agent when seated</summary>
18777 </member> 16493 </member>
18778 <member name="T:OpenMetaverse.Packets.ObjectDropPacket"> 16494 <member name="T:OpenMetaverse.ChatSessionMemberAddedEventArgs">
18779 <exclude /> 16495 <summary>Data sent when an agent joins a chat session your agent is currently participating in</summary>
18780 </member> 16496 </member>
18781 <member name="T:OpenMetaverse.Packets.ObjectDropPacket.AgentDataBlock"> 16497 <member name="M:OpenMetaverse.ChatSessionMemberAddedEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID)">
18782 <exclude /> 16498 <summary>
16499 Construct a new instance of the ChatSessionMemberAddedEventArgs object
16500 </summary>
16501 <param name="sessionID">The ID of the chat session</param>
16502 <param name="agentID">The ID of the agent joining</param>
18783 </member> 16503 </member>
18784 <member name="T:OpenMetaverse.Packets.ObjectDropPacket.ObjectDataBlock"> 16504 <member name="P:OpenMetaverse.ChatSessionMemberAddedEventArgs.SessionID">
18785 <exclude /> 16505 <summary>Get the ID of the chat session</summary>
18786 </member> 16506 </member>
18787 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket"> 16507 <member name="P:OpenMetaverse.ChatSessionMemberAddedEventArgs.AgentID">
18788 <exclude /> 16508 <summary>Get the ID of the agent that joined</summary>
18789 </member> 16509 </member>
18790 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket.AgentDataBlock"> 16510 <member name="T:OpenMetaverse.ChatSessionMemberLeftEventArgs">
18791 <exclude /> 16511 <summary>Data sent when an agent exits a chat session your agent is currently participating in</summary>
18792 </member> 16512 </member>
18793 <member name="T:OpenMetaverse.Packets.ObjectLinkPacket.ObjectDataBlock"> 16513 <member name="M:OpenMetaverse.ChatSessionMemberLeftEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID)">
18794 <exclude /> 16514 <summary>
16515 Construct a new instance of the ChatSessionMemberLeftEventArgs object
16516 </summary>
16517 <param name="sessionID">The ID of the chat session</param>
16518 <param name="agentID">The ID of the Agent that left</param>
18795 </member> 16519 </member>
18796 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket"> 16520 <member name="P:OpenMetaverse.ChatSessionMemberLeftEventArgs.SessionID">
18797 <exclude /> 16521 <summary>Get the ID of the chat session</summary>
18798 </member> 16522 </member>
18799 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket.AgentDataBlock"> 16523 <member name="P:OpenMetaverse.ChatSessionMemberLeftEventArgs.AgentID">
18800 <exclude /> 16524 <summary>Get the ID of the agent that left</summary>
18801 </member> 16525 </member>
18802 <member name="T:OpenMetaverse.Packets.ObjectDelinkPacket.ObjectDataBlock"> 16526 <member name="T:OpenMetaverse.SetDisplayNameReplyEventArgs">
18803 <exclude /> 16527 <summary>Event arguments with the result of setting display name operation</summary>
18804 </member> 16528 </member>
18805 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket"> 16529 <member name="M:OpenMetaverse.SetDisplayNameReplyEventArgs.#ctor(System.Int32,System.String,OpenMetaverse.AgentDisplayName)">
18806 <exclude /> 16530 <summary>Default constructor</summary>
18807 </member> 16531 </member>
18808 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.AgentDataBlock"> 16532 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.Status">
18809 <exclude /> 16533 <summary>Status code, 200 indicates settign display name was successful</summary>
18810 </member> 16534 </member>
18811 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.ObjectDataBlock"> 16535 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.Reason">
18812 <exclude /> 16536 <summary>Textual description of the status</summary>
18813 </member> 16537 </member>
18814 <member name="T:OpenMetaverse.Packets.ObjectGrabPacket.SurfaceInfoBlock"> 16538 <member name="P:OpenMetaverse.SetDisplayNameReplyEventArgs.DisplayName">
18815 <exclude /> 16539 <summary>Details of the newly set display name</summary>
18816 </member> 16540 </member>
18817 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket"> 16541 <member name="T:OpenMetaverse.Rendering.IRendering">
18818 <exclude /> 16542 <summary>
16543 Abstract base for rendering plugins
16544 </summary>
18819 </member> 16545 </member>
18820 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.AgentDataBlock"> 16546 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateSimpleMesh(OpenMetaverse.Primitive,OpenMetaverse.Rendering.DetailLevel)">
18821 <exclude /> 16547 <summary>
16548 Generates a basic mesh structure from a primitive
16549 </summary>
16550 <param name="prim">Primitive to generate the mesh from</param>
16551 <param name="lod">Level of detail to generate the mesh at</param>
16552 <returns>The generated mesh</returns>
18822 </member> 16553 </member>
18823 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.ObjectDataBlock"> 16554 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateSimpleSculptMesh(OpenMetaverse.Primitive,System.Drawing.Bitmap,OpenMetaverse.Rendering.DetailLevel)">
18824 <exclude /> 16555 <summary>
16556 Generates a basic mesh structure from a sculpted primitive and
16557 texture
16558 </summary>
16559 <param name="prim">Sculpted primitive to generate the mesh from</param>
16560 <param name="sculptTexture">Sculpt texture</param>
16561 <param name="lod">Level of detail to generate the mesh at</param>
16562 <returns>The generated mesh</returns>
18825 </member> 16563 </member>
18826 <member name="T:OpenMetaverse.Packets.ObjectGrabUpdatePacket.SurfaceInfoBlock"> 16564 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateFacetedMesh(OpenMetaverse.Primitive,OpenMetaverse.Rendering.DetailLevel)">
18827 <exclude /> 16565 <summary>
16566 Generates a series of faces, each face containing a mesh and
16567 metadata
16568 </summary>
16569 <param name="prim">Primitive to generate the mesh from</param>
16570 <param name="lod">Level of detail to generate the mesh at</param>
16571 <returns>The generated mesh</returns>
18828 </member> 16572 </member>
18829 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket"> 16573 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateFacetedSculptMesh(OpenMetaverse.Primitive,System.Drawing.Bitmap,OpenMetaverse.Rendering.DetailLevel)">
18830 <exclude /> 16574 <summary>
16575 Generates a series of faces for a sculpted prim, each face
16576 containing a mesh and metadata
16577 </summary>
16578 <param name="prim">Sculpted primitive to generate the mesh from</param>
16579 <param name="sculptTexture">Sculpt texture</param>
16580 <param name="lod">Level of detail to generate the mesh at</param>
16581 <returns>The generated mesh</returns>
18831 </member> 16582 </member>
18832 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.AgentDataBlock"> 16583 <member name="M:OpenMetaverse.Rendering.IRendering.TransformTexCoords(System.Collections.Generic.List{OpenMetaverse.Rendering.Vertex},OpenMetaverse.Vector3,OpenMetaverse.Primitive.TextureEntryFace,OpenMetaverse.Vector3)">
18833 <exclude /> 16584 <summary>
16585 Apply texture coordinate modifications from a
16586 <seealso cref="!:TextureEntryFace"/> to a list of vertices
16587 </summary>
16588 <param name="vertices">Vertex list to modify texture coordinates for</param>
16589 <param name="center">Center-point of the face</param>
16590 <param name="teFace">Face texture parameters</param>
16591 <param name="primScale">Scale of the prim</param>
18834 </member> 16592 </member>
18835 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.ObjectDataBlock"> 16593 <member name="T:OpenMetaverse.Assets.AssetMesh">
18836 <exclude /> 16594 <summary>
16595 Represents Mesh asset
16596 </summary>
18837 </member> 16597 </member>
18838 <member name="T:OpenMetaverse.Packets.ObjectDeGrabPacket.SurfaceInfoBlock"> 16598 <member name="F:OpenMetaverse.Assets.AssetMesh.MeshData">
18839 <exclude /> 16599 <summary>
16600 Decoded mesh data
16601 </summary>
18840 </member> 16602 </member>
18841 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket"> 16603 <member name="M:OpenMetaverse.Assets.AssetMesh.#ctor">
18842 <exclude /> 16604 <summary>Initializes a new instance of an AssetMesh object</summary>
18843 </member> 16605 </member>
18844 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket.AgentDataBlock"> 16606 <member name="M:OpenMetaverse.Assets.AssetMesh.#ctor(OpenMetaverse.UUID,System.Byte[])">
18845 <exclude /> 16607 <summary>Initializes a new instance of an AssetMesh object with parameters</summary>
16608 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
16609 <param name="assetData">A byte array containing the raw asset data</param>
18846 </member> 16610 </member>
18847 <member name="T:OpenMetaverse.Packets.ObjectSpinStartPacket.ObjectDataBlock"> 16611 <member name="M:OpenMetaverse.Assets.AssetMesh.Encode">
18848 <exclude /> 16612 <summary>
16613 TODO: Encodes Collada file into LLMesh format
16614 </summary>
18849 </member> 16615 </member>
18850 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket"> 16616 <member name="M:OpenMetaverse.Assets.AssetMesh.Decode">
18851 <exclude /> 16617 <summary>
16618 Decodes mesh asset. See <see cref="M:OpenMetaverse.Rendering.FacetedMesh.TryDecodeFromAsset(OpenMetaverse.Primitive,OpenMetaverse.Assets.AssetMesh,OpenMetaverse.Rendering.DetailLevel,OpenMetaverse.Rendering.FacetedMesh@)"/>
16619 to furter decode it for rendering</summary>
16620 <returns>true</returns>
18852 </member> 16621 </member>
18853 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket.AgentDataBlock"> 16622 <member name="P:OpenMetaverse.Assets.AssetMesh.AssetType">
18854 <exclude /> 16623 <summary>Override the base classes AssetType</summary>
18855 </member> 16624 </member>
18856 <member name="T:OpenMetaverse.Packets.ObjectSpinUpdatePacket.ObjectDataBlock"> 16625 <member name="T:OpenMetaverse.Assets.AssetsArchiver">
18857 <exclude /> 16626 <summary>
16627 Archives assets
16628 </summary>
18858 </member> 16629 </member>
18859 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket"> 16630 <member name="F:OpenMetaverse.Assets.AssetsArchiver.m_assets">
18860 <exclude /> 16631 <summary>
16632 Archive assets
16633 </summary>
18861 </member> 16634 </member>
18862 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket.AgentDataBlock"> 16635 <member name="M:OpenMetaverse.Assets.AssetsArchiver.Archive(OpenMetaverse.Assets.TarArchiveWriter)">
18863 <exclude /> 16636 <summary>
16637 Archive the assets given to this archiver to the given archive.
16638 </summary>
16639 <param name="archive"></param>
18864 </member> 16640 </member>
18865 <member name="T:OpenMetaverse.Packets.ObjectSpinStopPacket.ObjectDataBlock"> 16641 <member name="M:OpenMetaverse.Assets.AssetsArchiver.WriteMetadata(OpenMetaverse.Assets.TarArchiveWriter)">
18866 <exclude /> 16642 <summary>
16643 Write an assets metadata file to the given archive
16644 </summary>
16645 <param name="archive"></param>
18867 </member> 16646 </member>
18868 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket"> 16647 <member name="M:OpenMetaverse.Assets.AssetsArchiver.WriteData(OpenMetaverse.Assets.TarArchiveWriter)">
18869 <exclude /> 16648 <summary>
16649 Write asset data files to the given archive
16650 </summary>
16651 <param name="archive"></param>
18870 </member> 16652 </member>
18871 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket.AgentDataBlock"> 16653 <member name="T:OpenMetaverse.GroupMember">
18872 <exclude /> 16654 <summary>
16655 Avatar group management
16656 </summary>
18873 </member> 16657 </member>
18874 <member name="T:OpenMetaverse.Packets.ObjectExportSelectedPacket.ObjectDataBlock"> 16658 <member name="F:OpenMetaverse.GroupMember.ID">
18875 <exclude /> 16659 <summary>Key of Group Member</summary>
18876 </member> 16660 </member>
18877 <member name="T:OpenMetaverse.Packets.ModifyLandPacket"> 16661 <member name="F:OpenMetaverse.GroupMember.Contribution">
18878 <exclude /> 16662 <summary>Total land contribution</summary>
18879 </member> 16663 </member>
18880 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.AgentDataBlock"> 16664 <member name="F:OpenMetaverse.GroupMember.OnlineStatus">
18881 <exclude /> 16665 <summary>Online status information</summary>
18882 </member> 16666 </member>
18883 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ModifyBlockBlock"> 16667 <member name="F:OpenMetaverse.GroupMember.Powers">
18884 <exclude /> 16668 <summary>Abilities that the Group Member has</summary>
18885 </member> 16669 </member>
18886 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ParcelDataBlock"> 16670 <member name="F:OpenMetaverse.GroupMember.Title">
18887 <exclude /> 16671 <summary>Current group title</summary>
18888 </member> 16672 </member>
18889 <member name="T:OpenMetaverse.Packets.ModifyLandPacket.ModifyBlockExtendedBlock"> 16673 <member name="F:OpenMetaverse.GroupMember.IsOwner">
18890 <exclude /> 16674 <summary>Is a group owner</summary>
18891 </member> 16675 </member>
18892 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOnPacket"> 16676 <member name="T:OpenMetaverse.GroupRole">
18893 <exclude /> 16677 <summary>
16678 Role manager for a group
16679 </summary>
18894 </member> 16680 </member>
18895 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOnPacket.AgentDataBlock"> 16681 <member name="F:OpenMetaverse.GroupRole.GroupID">
18896 <exclude /> 16682 <summary>Key of the group</summary>
18897 </member> 16683 </member>
18898 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOffPacket"> 16684 <member name="F:OpenMetaverse.GroupRole.ID">
18899 <exclude /> 16685 <summary>Key of Role</summary>
18900 </member> 16686 </member>
18901 <member name="T:OpenMetaverse.Packets.VelocityInterpolateOffPacket.AgentDataBlock"> 16687 <member name="F:OpenMetaverse.GroupRole.Name">
18902 <exclude /> 16688 <summary>Name of Role</summary>
18903 </member> 16689 </member>
18904 <member name="T:OpenMetaverse.Packets.StateSavePacket"> 16690 <member name="F:OpenMetaverse.GroupRole.Title">
18905 <exclude /> 16691 <summary>Group Title associated with Role</summary>
18906 </member> 16692 </member>
18907 <member name="T:OpenMetaverse.Packets.StateSavePacket.AgentDataBlock"> 16693 <member name="F:OpenMetaverse.GroupRole.Description">
18908 <exclude /> 16694 <summary>Description of Role</summary>
18909 </member> 16695 </member>
18910 <member name="T:OpenMetaverse.Packets.StateSavePacket.DataBlockBlock"> 16696 <member name="F:OpenMetaverse.GroupRole.Powers">
18911 <exclude /> 16697 <summary>Abilities Associated with Role</summary>
18912 </member> 16698 </member>
18913 <member name="T:OpenMetaverse.Packets.ReportAutosaveCrashPacket"> 16699 <member name="M:OpenMetaverse.GroupRole.ToString">
18914 <exclude /> 16700 <summary>Returns the role's title</summary>
16701 <returns>The role's title</returns>
18915 </member> 16702 </member>
18916 <member name="T:OpenMetaverse.Packets.ReportAutosaveCrashPacket.AutosaveDataBlock"> 16703 <member name="T:OpenMetaverse.GroupTitle">
18917 <exclude /> 16704 <summary>
16705 Class to represent Group Title
16706 </summary>
18918 </member> 16707 </member>
18919 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket"> 16708 <member name="F:OpenMetaverse.GroupTitle.GroupID">
18920 <exclude /> 16709 <summary>Key of the group</summary>
18921 </member> 16710 </member>
18922 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket.AgentDataBlock"> 16711 <member name="F:OpenMetaverse.GroupTitle.RoleID">
18923 <exclude /> 16712 <summary>ID of the role title belongs to</summary>
18924 </member> 16713 </member>
18925 <member name="T:OpenMetaverse.Packets.SimWideDeletesPacket.DataBlockBlock"> 16714 <member name="F:OpenMetaverse.GroupTitle.Title">
18926 <exclude /> 16715 <summary>Group Title</summary>
18927 </member> 16716 </member>
18928 <member name="T:OpenMetaverse.Packets.TrackAgentPacket"> 16717 <member name="F:OpenMetaverse.GroupTitle.Selected">
18929 <exclude /> 16718 <summary>Whether title is Active</summary>
18930 </member> 16719 </member>
18931 <member name="T:OpenMetaverse.Packets.TrackAgentPacket.AgentDataBlock"> 16720 <member name="M:OpenMetaverse.GroupTitle.ToString">
18932 <exclude /> 16721 <summary>Returns group title</summary>
18933 </member> 16722 </member>
18934 <member name="T:OpenMetaverse.Packets.TrackAgentPacket.TargetDataBlock"> 16723 <member name="T:OpenMetaverse.Group">
18935 <exclude /> 16724 <summary>
16725 Represents a group on the grid
16726 </summary>
18936 </member> 16727 </member>
18937 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket"> 16728 <member name="F:OpenMetaverse.Group.ID">
18938 <exclude /> 16729 <summary>Key of Group</summary>
18939 </member> 16730 </member>
18940 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.AgentDataBlock"> 16731 <member name="F:OpenMetaverse.Group.InsigniaID">
18941 <exclude /> 16732 <summary>Key of Group Insignia</summary>
18942 </member> 16733 </member>
18943 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.DownloadTotalsBlock"> 16734 <member name="F:OpenMetaverse.Group.FounderID">
18944 <exclude /> 16735 <summary>Key of Group Founder</summary>
18945 </member> 16736 </member>
18946 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.NetStatsBlock"> 16737 <member name="F:OpenMetaverse.Group.OwnerRole">
18947 <exclude /> 16738 <summary>Key of Group Role for Owners</summary>
18948 </member> 16739 </member>
18949 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.FailStatsBlock"> 16740 <member name="F:OpenMetaverse.Group.Name">
18950 <exclude /> 16741 <summary>Name of Group</summary>
18951 </member> 16742 </member>
18952 <member name="T:OpenMetaverse.Packets.ViewerStatsPacket.MiscStatsBlock"> 16743 <member name="F:OpenMetaverse.Group.Charter">
18953 <exclude /> 16744 <summary>Text of Group Charter</summary>
18954 </member> 16745 </member>
18955 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket"> 16746 <member name="F:OpenMetaverse.Group.MemberTitle">
18956 <exclude /> 16747 <summary>Title of "everyone" role</summary>
18957 </member> 16748 </member>
18958 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket.AgentDataBlock"> 16749 <member name="F:OpenMetaverse.Group.OpenEnrollment">
18959 <exclude /> 16750 <summary>Is the group open for enrolement to everyone</summary>
18960 </member> 16751 </member>
18961 <member name="T:OpenMetaverse.Packets.ScriptAnswerYesPacket.DataBlock"> 16752 <member name="F:OpenMetaverse.Group.ShowInList">
18962 <exclude /> 16753 <summary>Will group show up in search</summary>
18963 </member> 16754 </member>
18964 <member name="T:OpenMetaverse.Packets.UserReportPacket"> 16755 <member name="F:OpenMetaverse.Group.Powers">
18965 <exclude /> 16756 <summary></summary>
18966 </member> 16757 </member>
18967 <member name="T:OpenMetaverse.Packets.UserReportPacket.AgentDataBlock"> 16758 <member name="F:OpenMetaverse.Group.AcceptNotices">
18968 <exclude /> 16759 <summary></summary>
18969 </member> 16760 </member>
18970 <member name="T:OpenMetaverse.Packets.UserReportPacket.ReportDataBlock"> 16761 <member name="F:OpenMetaverse.Group.AllowPublish">
18971 <exclude /> 16762 <summary></summary>
18972 </member> 16763 </member>
18973 <member name="T:OpenMetaverse.Packets.AlertMessagePacket"> 16764 <member name="F:OpenMetaverse.Group.MaturePublish">
18974 <exclude /> 16765 <summary>Is the group Mature</summary>
18975 </member> 16766 </member>
18976 <member name="T:OpenMetaverse.Packets.AlertMessagePacket.AlertDataBlock"> 16767 <member name="F:OpenMetaverse.Group.MembershipFee">
18977 <exclude /> 16768 <summary>Cost of group membership</summary>
18978 </member> 16769 </member>
18979 <member name="T:OpenMetaverse.Packets.AlertMessagePacket.AlertInfoBlock"> 16770 <member name="F:OpenMetaverse.Group.Money">
18980 <exclude /> 16771 <summary></summary>
18981 </member> 16772 </member>
18982 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket"> 16773 <member name="F:OpenMetaverse.Group.Contribution">
18983 <exclude /> 16774 <summary></summary>
18984 </member> 16775 </member>
18985 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket.AgentDataBlock"> 16776 <member name="F:OpenMetaverse.Group.GroupMembershipCount">
18986 <exclude /> 16777 <summary>The total number of current members this group has</summary>
18987 </member> 16778 </member>
18988 <member name="T:OpenMetaverse.Packets.AgentAlertMessagePacket.AlertDataBlock"> 16779 <member name="F:OpenMetaverse.Group.GroupRolesCount">
18989 <exclude /> 16780 <summary>The number of roles this group has configured</summary>
18990 </member> 16781 </member>
18991 <member name="T:OpenMetaverse.Packets.MeanCollisionAlertPacket"> 16782 <member name="F:OpenMetaverse.Group.ListInProfile">
18992 <exclude /> 16783 <summary>Show this group in agent's profile</summary>
18993 </member> 16784 </member>
18994 <member name="T:OpenMetaverse.Packets.MeanCollisionAlertPacket.MeanCollisionBlock"> 16785 <member name="M:OpenMetaverse.Group.ToString">
18995 <exclude /> 16786 <summary>Returns the name of the group</summary>
16787 <returns>A string containing the name of the group</returns>
18996 </member> 16788 </member>
18997 <member name="T:OpenMetaverse.Packets.ViewerFrozenMessagePacket"> 16789 <member name="T:OpenMetaverse.Vote">
18998 <exclude /> 16790 <summary>
16791 A group Vote
16792 </summary>
18999 </member> 16793 </member>
19000 <member name="T:OpenMetaverse.Packets.ViewerFrozenMessagePacket.FrozenDataBlock"> 16794 <member name="F:OpenMetaverse.Vote.Candidate">
19001 <exclude /> 16795 <summary>Key of Avatar who created Vote</summary>
19002 </member> 16796 </member>
19003 <member name="T:OpenMetaverse.Packets.HealthMessagePacket"> 16797 <member name="F:OpenMetaverse.Vote.VoteString">
19004 <exclude /> 16798 <summary>Text of the Vote proposal</summary>
19005 </member> 16799 </member>
19006 <member name="T:OpenMetaverse.Packets.HealthMessagePacket.HealthDataBlock"> 16800 <member name="F:OpenMetaverse.Vote.NumVotes">
19007 <exclude /> 16801 <summary>Total number of votes</summary>
19008 </member> 16802 </member>
19009 <member name="T:OpenMetaverse.Packets.ChatFromSimulatorPacket"> 16803 <member name="T:OpenMetaverse.GroupProposal">
19010 <exclude /> 16804 <summary>
16805 A group proposal
16806 </summary>
19011 </member> 16807 </member>
19012 <member name="T:OpenMetaverse.Packets.ChatFromSimulatorPacket.ChatDataBlock"> 16808 <member name="F:OpenMetaverse.GroupProposal.VoteText">
19013 <exclude /> 16809 <summary>The Text of the proposal</summary>
19014 </member> 16810 </member>
19015 <member name="T:OpenMetaverse.Packets.SimStatsPacket"> 16811 <member name="F:OpenMetaverse.GroupProposal.Quorum">
19016 <exclude /> 16812 <summary>The minimum number of members that must vote before proposal passes or failes</summary>
19017 </member> 16813 </member>
19018 <member name="T:OpenMetaverse.Packets.SimStatsPacket.RegionBlock"> 16814 <member name="F:OpenMetaverse.GroupProposal.Majority">
19019 <exclude /> 16815 <summary>The required ration of yes/no votes required for vote to pass</summary>
16816 <remarks>The three options are Simple Majority, 2/3 Majority, and Unanimous</remarks>
16817 TODO: this should be an enum
19020 </member> 16818 </member>
19021 <member name="T:OpenMetaverse.Packets.SimStatsPacket.StatBlock"> 16819 <member name="F:OpenMetaverse.GroupProposal.Duration">
19022 <exclude /> 16820 <summary>The duration in days votes are accepted</summary>
19023 </member> 16821 </member>
19024 <member name="T:OpenMetaverse.Packets.SimStatsPacket.PidStatBlock"> 16822 <member name="T:OpenMetaverse.GroupAccountSummary">
19025 <exclude /> 16823 <summary>
16824
16825 </summary>
19026 </member> 16826 </member>
19027 <member name="T:OpenMetaverse.Packets.RequestRegionInfoPacket"> 16827 <member name="F:OpenMetaverse.GroupAccountSummary.IntervalDays">
19028 <exclude /> 16828 <summary></summary>
19029 </member> 16829 </member>
19030 <member name="T:OpenMetaverse.Packets.RequestRegionInfoPacket.AgentDataBlock"> 16830 <member name="F:OpenMetaverse.GroupAccountSummary.CurrentInterval">
19031 <exclude /> 16831 <summary></summary>
19032 </member> 16832 </member>
19033 <member name="T:OpenMetaverse.Packets.RegionInfoPacket"> 16833 <member name="F:OpenMetaverse.GroupAccountSummary.StartDate">
19034 <exclude /> 16834 <summary></summary>
19035 </member> 16835 </member>
19036 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.AgentDataBlock"> 16836 <member name="F:OpenMetaverse.GroupAccountSummary.Balance">
19037 <exclude /> 16837 <summary></summary>
19038 </member> 16838 </member>
19039 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.RegionInfoBlock"> 16839 <member name="F:OpenMetaverse.GroupAccountSummary.TotalCredits">
19040 <exclude /> 16840 <summary></summary>
19041 </member> 16841 </member>
19042 <member name="T:OpenMetaverse.Packets.RegionInfoPacket.RegionInfo2Block"> 16842 <member name="F:OpenMetaverse.GroupAccountSummary.TotalDebits">
19043 <exclude /> 16843 <summary></summary>
19044 </member> 16844 </member>
19045 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket"> 16845 <member name="F:OpenMetaverse.GroupAccountSummary.ObjectTaxCurrent">
19046 <exclude /> 16846 <summary></summary>
19047 </member> 16847 </member>
19048 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket.AgentDataBlock"> 16848 <member name="F:OpenMetaverse.GroupAccountSummary.LightTaxCurrent">
19049 <exclude /> 16849 <summary></summary>
19050 </member> 16850 </member>
19051 <member name="T:OpenMetaverse.Packets.GodUpdateRegionInfoPacket.RegionInfoBlock"> 16851 <member name="F:OpenMetaverse.GroupAccountSummary.LandTaxCurrent">
19052 <exclude /> 16852 <summary></summary>
19053 </member> 16853 </member>
19054 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket"> 16854 <member name="F:OpenMetaverse.GroupAccountSummary.GroupTaxCurrent">
19055 <exclude /> 16855 <summary></summary>
19056 </member> 16856 </member>
19057 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfoBlock"> 16857 <member name="F:OpenMetaverse.GroupAccountSummary.ParcelDirFeeCurrent">
19058 <exclude /> 16858 <summary></summary>
19059 </member> 16859 </member>
19060 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfo2Block"> 16860 <member name="F:OpenMetaverse.GroupAccountSummary.ObjectTaxEstimate">
19061 <exclude /> 16861 <summary></summary>
19062 </member> 16862 </member>
19063 <member name="T:OpenMetaverse.Packets.RegionHandshakePacket.RegionInfo3Block"> 16863 <member name="F:OpenMetaverse.GroupAccountSummary.LightTaxEstimate">
19064 <exclude /> 16864 <summary></summary>
19065 </member> 16865 </member>
19066 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket"> 16866 <member name="F:OpenMetaverse.GroupAccountSummary.LandTaxEstimate">
19067 <exclude /> 16867 <summary></summary>
19068 </member> 16868 </member>
19069 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket.AgentDataBlock"> 16869 <member name="F:OpenMetaverse.GroupAccountSummary.GroupTaxEstimate">
19070 <exclude /> 16870 <summary></summary>
19071 </member> 16871 </member>
19072 <member name="T:OpenMetaverse.Packets.RegionHandshakeReplyPacket.RegionInfoBlock"> 16872 <member name="F:OpenMetaverse.GroupAccountSummary.ParcelDirFeeEstimate">
19073 <exclude /> 16873 <summary></summary>
19074 </member> 16874 </member>
19075 <member name="T:OpenMetaverse.Packets.SimulatorViewerTimeMessagePacket"> 16875 <member name="F:OpenMetaverse.GroupAccountSummary.NonExemptMembers">
19076 <exclude /> 16876 <summary></summary>
19077 </member> 16877 </member>
19078 <member name="T:OpenMetaverse.Packets.SimulatorViewerTimeMessagePacket.TimeInfoBlock"> 16878 <member name="F:OpenMetaverse.GroupAccountSummary.LastTaxDate">
19079 <exclude /> 16879 <summary></summary>
19080 </member> 16880 </member>
19081 <member name="T:OpenMetaverse.Packets.EnableSimulatorPacket"> 16881 <member name="F:OpenMetaverse.GroupAccountSummary.TaxDate">
19082 <exclude /> 16882 <summary></summary>
19083 </member> 16883 </member>
19084 <member name="T:OpenMetaverse.Packets.EnableSimulatorPacket.SimulatorInfoBlock"> 16884 <member name="T:OpenMetaverse.GroupNotice">
19085 <exclude /> 16885 <summary>
16886 Struct representing a group notice
16887 </summary>
19086 </member> 16888 </member>
19087 <member name="T:OpenMetaverse.Packets.DisableSimulatorPacket"> 16889 <member name="F:OpenMetaverse.GroupNotice.Subject">
19088 <exclude /> 16890 <summary></summary>
19089 </member> 16891 </member>
19090 <member name="T:OpenMetaverse.Packets.TransferRequestPacket"> 16892 <member name="F:OpenMetaverse.GroupNotice.Message">
19091 <exclude /> 16893 <summary></summary>
19092 </member> 16894 </member>
19093 <member name="T:OpenMetaverse.Packets.TransferRequestPacket.TransferInfoBlock"> 16895 <member name="F:OpenMetaverse.GroupNotice.AttachmentID">
19094 <exclude /> 16896 <summary></summary>
19095 </member> 16897 </member>
19096 <member name="T:OpenMetaverse.Packets.TransferInfoPacket"> 16898 <member name="F:OpenMetaverse.GroupNotice.OwnerID">
19097 <exclude /> 16899 <summary></summary>
19098 </member> 16900 </member>
19099 <member name="T:OpenMetaverse.Packets.TransferInfoPacket.TransferInfoBlock"> 16901 <member name="M:OpenMetaverse.GroupNotice.SerializeAttachment">
19100 <exclude /> 16902 <summary>
16903
16904 </summary>
16905 <returns></returns>
19101 </member> 16906 </member>
19102 <member name="T:OpenMetaverse.Packets.TransferAbortPacket"> 16907 <member name="T:OpenMetaverse.GroupNoticesListEntry">
19103 <exclude /> 16908 <summary>
16909 Struct representing a group notice list entry
16910 </summary>
19104 </member> 16911 </member>
19105 <member name="T:OpenMetaverse.Packets.TransferAbortPacket.TransferInfoBlock"> 16912 <member name="F:OpenMetaverse.GroupNoticesListEntry.NoticeID">
19106 <exclude /> 16913 <summary>Notice ID</summary>
19107 </member> 16914 </member>
19108 <member name="T:OpenMetaverse.Packets.RequestXferPacket"> 16915 <member name="F:OpenMetaverse.GroupNoticesListEntry.Timestamp">
19109 <exclude /> 16916 <summary>Creation timestamp of notice</summary>
19110 </member> 16917 </member>
19111 <member name="T:OpenMetaverse.Packets.RequestXferPacket.XferIDBlock"> 16918 <member name="F:OpenMetaverse.GroupNoticesListEntry.FromName">
19112 <exclude /> 16919 <summary>Agent name who created notice</summary>
19113 </member> 16920 </member>
19114 <member name="T:OpenMetaverse.Packets.AbortXferPacket"> 16921 <member name="F:OpenMetaverse.GroupNoticesListEntry.Subject">
19115 <exclude /> 16922 <summary>Notice subject</summary>
19116 </member> 16923 </member>
19117 <member name="T:OpenMetaverse.Packets.AbortXferPacket.XferIDBlock"> 16924 <member name="F:OpenMetaverse.GroupNoticesListEntry.HasAttachment">
19118 <exclude /> 16925 <summary>Is there an attachment?</summary>
19119 </member> 16926 </member>
19120 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket"> 16927 <member name="F:OpenMetaverse.GroupNoticesListEntry.AssetType">
19121 <exclude /> 16928 <summary>Attachment Type</summary>
19122 </member> 16929 </member>
19123 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.SenderBlock"> 16930 <member name="T:OpenMetaverse.ChatSessionMember">
19124 <exclude /> 16931 <summary>
16932 Struct representing a member of a group chat session and their settings
16933 </summary>
19125 </member> 16934 </member>
19126 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.ObjectDataBlock"> 16935 <member name="F:OpenMetaverse.ChatSessionMember.AvatarKey">
19127 <exclude /> 16936 <summary>The <see cref="T:OpenMetaverse.UUID"/> of the Avatar</summary>
19128 </member> 16937 </member>
19129 <member name="T:OpenMetaverse.Packets.AvatarAppearancePacket.VisualParamBlock"> 16938 <member name="F:OpenMetaverse.ChatSessionMember.CanVoiceChat">
19130 <exclude /> 16939 <summary>True if user has voice chat enabled</summary>
19131 </member> 16940 </member>
19132 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket"> 16941 <member name="F:OpenMetaverse.ChatSessionMember.IsModerator">
19133 <exclude /> 16942 <summary>True of Avatar has moderator abilities</summary>
19134 </member> 16943 </member>
19135 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket.ObjectDataBlock"> 16944 <member name="F:OpenMetaverse.ChatSessionMember.MuteText">
19136 <exclude /> 16945 <summary>True if a moderator has muted this avatars chat</summary>
19137 </member> 16946 </member>
19138 <member name="T:OpenMetaverse.Packets.SetFollowCamPropertiesPacket.CameraPropertyBlock"> 16947 <member name="F:OpenMetaverse.ChatSessionMember.MuteVoice">
19139 <exclude /> 16948 <summary>True if a moderator has muted this avatars voice</summary>
19140 </member> 16949 </member>
19141 <member name="T:OpenMetaverse.Packets.ClearFollowCamPropertiesPacket"> 16950 <member name="T:OpenMetaverse.GroupRoleUpdate">
19142 <exclude /> 16951 <summary>
16952 Role update flags
16953 </summary>
19143 </member> 16954 </member>
19144 <member name="T:OpenMetaverse.Packets.ClearFollowCamPropertiesPacket.ObjectDataBlock"> 16955 <member name="F:OpenMetaverse.GroupRoleUpdate.NoUpdate">
19145 <exclude /> 16956 <summary></summary>
19146 </member> 16957 </member>
19147 <member name="T:OpenMetaverse.Packets.RequestPayPricePacket"> 16958 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdateData">
19148 <exclude /> 16959 <summary></summary>
19149 </member> 16960 </member>
19150 <member name="T:OpenMetaverse.Packets.RequestPayPricePacket.ObjectDataBlock"> 16961 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdatePowers">
19151 <exclude /> 16962 <summary></summary>
19152 </member> 16963 </member>
19153 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket"> 16964 <member name="F:OpenMetaverse.GroupRoleUpdate.UpdateAll">
19154 <exclude /> 16965 <summary></summary>
19155 </member> 16966 </member>
19156 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket.ObjectDataBlock"> 16967 <member name="F:OpenMetaverse.GroupRoleUpdate.Create">
19157 <exclude /> 16968 <summary></summary>
19158 </member> 16969 </member>
19159 <member name="T:OpenMetaverse.Packets.PayPriceReplyPacket.ButtonDataBlock"> 16970 <member name="F:OpenMetaverse.GroupRoleUpdate.Delete">
19160 <exclude /> 16971 <summary></summary>
19161 </member> 16972 </member>
19162 <member name="T:OpenMetaverse.Packets.KickUserPacket"> 16973 <member name="F:OpenMetaverse.GroupPowers.None">
19163 <exclude /> 16974 <summary></summary>
19164 </member> 16975 </member>
19165 <member name="T:OpenMetaverse.Packets.KickUserPacket.TargetBlockBlock"> 16976 <member name="F:OpenMetaverse.GroupPowers.Invite">
19166 <exclude /> 16977 <summary>Can send invitations to groups default role</summary>
19167 </member> 16978 </member>
19168 <member name="T:OpenMetaverse.Packets.KickUserPacket.UserInfoBlock"> 16979 <member name="F:OpenMetaverse.GroupPowers.Eject">
19169 <exclude /> 16980 <summary>Can eject members from group</summary>
19170 </member> 16981 </member>
19171 <member name="T:OpenMetaverse.Packets.GodKickUserPacket"> 16982 <member name="F:OpenMetaverse.GroupPowers.ChangeOptions">
19172 <exclude /> 16983 <summary>Can toggle 'Open Enrollment' and change 'Signup fee'</summary>
19173 </member> 16984 </member>
19174 <member name="T:OpenMetaverse.Packets.GodKickUserPacket.UserInfoBlock"> 16985 <member name="F:OpenMetaverse.GroupPowers.MemberVisible">
19175 <exclude /> 16986 <summary>Member is visible in the public member list</summary>
19176 </member> 16987 </member>
19177 <member name="T:OpenMetaverse.Packets.EjectUserPacket"> 16988 <member name="F:OpenMetaverse.GroupPowers.CreateRole">
19178 <exclude /> 16989 <summary>Can create new roles</summary>
19179 </member> 16990 </member>
19180 <member name="T:OpenMetaverse.Packets.EjectUserPacket.AgentDataBlock"> 16991 <member name="F:OpenMetaverse.GroupPowers.DeleteRole">
19181 <exclude /> 16992 <summary>Can delete existing roles</summary>
19182 </member> 16993 </member>
19183 <member name="T:OpenMetaverse.Packets.EjectUserPacket.DataBlock"> 16994 <member name="F:OpenMetaverse.GroupPowers.RoleProperties">
19184 <exclude /> 16995 <summary>Can change Role names, titles and descriptions</summary>
19185 </member> 16996 </member>
19186 <member name="T:OpenMetaverse.Packets.FreezeUserPacket"> 16997 <member name="F:OpenMetaverse.GroupPowers.AssignMemberLimited">
19187 <exclude /> 16998 <summary>Can assign other members to assigners role</summary>
19188 </member> 16999 </member>
19189 <member name="T:OpenMetaverse.Packets.FreezeUserPacket.AgentDataBlock"> 17000 <member name="F:OpenMetaverse.GroupPowers.AssignMember">
19190 <exclude /> 17001 <summary>Can assign other members to any role</summary>
19191 </member> 17002 </member>
19192 <member name="T:OpenMetaverse.Packets.FreezeUserPacket.DataBlock"> 17003 <member name="F:OpenMetaverse.GroupPowers.RemoveMember">
19193 <exclude /> 17004 <summary>Can remove members from roles</summary>
19194 </member> 17005 </member>
19195 <member name="T:OpenMetaverse.Packets.AvatarPropertiesRequestPacket"> 17006 <member name="F:OpenMetaverse.GroupPowers.ChangeActions">
19196 <exclude /> 17007 <summary>Can assign and remove abilities in roles</summary>
19197 </member> 17008 </member>
19198 <member name="T:OpenMetaverse.Packets.AvatarPropertiesRequestPacket.AgentDataBlock"> 17009 <member name="F:OpenMetaverse.GroupPowers.ChangeIdentity">
19199 <exclude /> 17010 <summary>Can change group Charter, Insignia, 'Publish on the web' and which
17011 members are publicly visible in group member listings</summary>
19200 </member> 17012 </member>
19201 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket"> 17013 <member name="F:OpenMetaverse.GroupPowers.LandDeed">
19202 <exclude /> 17014 <summary>Can buy land or deed land to group</summary>
19203 </member> 17015 </member>
19204 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket.AgentDataBlock"> 17016 <member name="F:OpenMetaverse.GroupPowers.LandRelease">
19205 <exclude /> 17017 <summary>Can abandon group owned land to Governor Linden on mainland, or Estate owner for
17018 private estates</summary>
19206 </member> 17019 </member>
19207 <member name="T:OpenMetaverse.Packets.AvatarPropertiesReplyPacket.PropertiesDataBlock"> 17020 <member name="F:OpenMetaverse.GroupPowers.LandSetSale">
19208 <exclude /> 17021 <summary>Can set land for-sale information on group owned parcels</summary>
19209 </member> 17022 </member>
19210 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket"> 17023 <member name="F:OpenMetaverse.GroupPowers.LandDivideJoin">
19211 <exclude /> 17024 <summary>Can subdivide and join parcels</summary>
19212 </member> 17025 </member>
19213 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket.AgentDataBlock"> 17026 <member name="F:OpenMetaverse.GroupPowers.JoinChat">
19214 <exclude /> 17027 <summary>Can join group chat sessions</summary>
19215 </member> 17028 </member>
19216 <member name="T:OpenMetaverse.Packets.AvatarInterestsReplyPacket.PropertiesDataBlock"> 17029 <member name="F:OpenMetaverse.GroupPowers.AllowVoiceChat">
19217 <exclude /> 17030 <summary>Can use voice chat in Group Chat sessions</summary>
19218 </member> 17031 </member>
19219 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket"> 17032 <member name="F:OpenMetaverse.GroupPowers.ModerateChat">
19220 <exclude /> 17033 <summary>Can moderate group chat sessions</summary>
19221 </member> 17034 </member>
19222 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.AgentDataBlock"> 17035 <member name="F:OpenMetaverse.GroupPowers.FindPlaces">
19223 <exclude /> 17036 <summary>Can toggle "Show in Find Places" and set search category</summary>
19224 </member> 17037 </member>
19225 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.GroupDataBlock"> 17038 <member name="F:OpenMetaverse.GroupPowers.LandChangeIdentity">
19226 <exclude /> 17039 <summary>Can change parcel name, description, and 'Publish on web' settings</summary>
19227 </member> 17040 </member>
19228 <member name="T:OpenMetaverse.Packets.AvatarGroupsReplyPacket.NewGroupDataBlock"> 17041 <member name="F:OpenMetaverse.GroupPowers.SetLandingPoint">
19229 <exclude /> 17042 <summary>Can set the landing point and teleport routing on group land</summary>
19230 </member> 17043 </member>
19231 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket"> 17044 <member name="F:OpenMetaverse.GroupPowers.ChangeMedia">
19232 <exclude /> 17045 <summary>Can change music and media settings</summary>
19233 </member> 17046 </member>
19234 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket.AgentDataBlock"> 17047 <member name="F:OpenMetaverse.GroupPowers.LandEdit">
19235 <exclude /> 17048 <summary>Can toggle 'Edit Terrain' option in Land settings</summary>
19236 </member> 17049 </member>
19237 <member name="T:OpenMetaverse.Packets.AvatarPropertiesUpdatePacket.PropertiesDataBlock"> 17050 <member name="F:OpenMetaverse.GroupPowers.LandOptions">
19238 <exclude /> 17051 <summary>Can toggle various About Land > Options settings</summary>
19239 </member> 17052 </member>
19240 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket"> 17053 <member name="F:OpenMetaverse.GroupPowers.AllowEditLand">
19241 <exclude /> 17054 <summary>Can always terraform land, even if parcel settings have it turned off</summary>
19242 </member> 17055 </member>
19243 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket.AgentDataBlock"> 17056 <member name="F:OpenMetaverse.GroupPowers.AllowFly">
19244 <exclude /> 17057 <summary>Can always fly while over group owned land</summary>
19245 </member> 17058 </member>
19246 <member name="T:OpenMetaverse.Packets.AvatarInterestsUpdatePacket.PropertiesDataBlock"> 17059 <member name="F:OpenMetaverse.GroupPowers.AllowRez">
19247 <exclude /> 17060 <summary>Can always rez objects on group owned land</summary>
19248 </member> 17061 </member>
19249 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket"> 17062 <member name="F:OpenMetaverse.GroupPowers.AllowLandmark">
19250 <exclude /> 17063 <summary>Can always create landmarks for group owned parcels</summary>
19251 </member> 17064 </member>
19252 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket.AgentDataBlock"> 17065 <member name="F:OpenMetaverse.GroupPowers.AllowSetHome">
19253 <exclude /> 17066 <summary>Can set home location on any group owned parcel</summary>
19254 </member> 17067 </member>
19255 <member name="T:OpenMetaverse.Packets.AvatarNotesReplyPacket.DataBlock"> 17068 <member name="F:OpenMetaverse.GroupPowers.LandManageAllowed">
19256 <exclude /> 17069 <summary>Can modify public access settings for group owned parcels</summary>
19257 </member> 17070 </member>
19258 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket"> 17071 <member name="F:OpenMetaverse.GroupPowers.LandManageBanned">
19259 <exclude /> 17072 <summary>Can manager parcel ban lists on group owned land</summary>
19260 </member> 17073 </member>
19261 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket.AgentDataBlock"> 17074 <member name="F:OpenMetaverse.GroupPowers.LandManagePasses">
19262 <exclude /> 17075 <summary>Can manage pass list sales information</summary>
19263 </member> 17076 </member>
19264 <member name="T:OpenMetaverse.Packets.AvatarNotesUpdatePacket.DataBlock"> 17077 <member name="F:OpenMetaverse.GroupPowers.LandEjectAndFreeze">
19265 <exclude /> 17078 <summary>Can eject and freeze other avatars on group owned land</summary>
19266 </member> 17079 </member>
19267 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket"> 17080 <member name="F:OpenMetaverse.GroupPowers.ReturnGroupSet">
19268 <exclude /> 17081 <summary>Can return objects set to group</summary>
19269 </member> 17082 </member>
19270 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket.AgentDataBlock"> 17083 <member name="F:OpenMetaverse.GroupPowers.ReturnNonGroup">
19271 <exclude /> 17084 <summary>Can return non-group owned/set objects</summary>
19272 </member> 17085 </member>
19273 <member name="T:OpenMetaverse.Packets.AvatarPicksReplyPacket.DataBlock"> 17086 <member name="F:OpenMetaverse.GroupPowers.ReturnGroupOwned">
19274 <exclude /> 17087 <summary>Can return group owned objects</summary>
19275 </member> 17088 </member>
19276 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket"> 17089 <member name="F:OpenMetaverse.GroupPowers.LandGardening">
19277 <exclude /> 17090 <summary>Can landscape using Linden plants</summary>
19278 </member> 17091 </member>
19279 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket.AgentDataBlock"> 17092 <member name="F:OpenMetaverse.GroupPowers.DeedObject">
19280 <exclude /> 17093 <summary>Can deed objects to group</summary>
19281 </member> 17094 </member>
19282 <member name="T:OpenMetaverse.Packets.EventInfoRequestPacket.EventDataBlock"> 17095 <member name="F:OpenMetaverse.GroupPowers.ObjectManipulate">
19283 <exclude /> 17096 <summary>Can move group owned objects</summary>
19284 </member> 17097 </member>
19285 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket"> 17098 <member name="F:OpenMetaverse.GroupPowers.ObjectSetForSale">
19286 <exclude /> 17099 <summary>Can set group owned objects for-sale</summary>
19287 </member> 17100 </member>
19288 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket.AgentDataBlock"> 17101 <member name="F:OpenMetaverse.GroupPowers.Accountable">
19289 <exclude /> 17102 <summary>Pay group liabilities and receive group dividends</summary>
19290 </member> 17103 </member>
19291 <member name="T:OpenMetaverse.Packets.EventInfoReplyPacket.EventDataBlock"> 17104 <member name="F:OpenMetaverse.GroupPowers.HostEvent">
19292 <exclude /> 17105 <summary>List and Host group events</summary>
19293 </member> 17106 </member>
19294 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket"> 17107 <member name="F:OpenMetaverse.GroupPowers.SendNotices">
19295 <exclude /> 17108 <summary>Can send group notices</summary>
19296 </member> 17109 </member>
19297 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket.AgentDataBlock"> 17110 <member name="F:OpenMetaverse.GroupPowers.ReceiveNotices">
19298 <exclude /> 17111 <summary>Can receive group notices</summary>
19299 </member> 17112 </member>
19300 <member name="T:OpenMetaverse.Packets.EventNotificationAddRequestPacket.EventDataBlock"> 17113 <member name="F:OpenMetaverse.GroupPowers.StartProposal">
19301 <exclude /> 17114 <summary>Can create group proposals</summary>
19302 </member> 17115 </member>
19303 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket"> 17116 <member name="F:OpenMetaverse.GroupPowers.VoteOnProposal">
19304 <exclude /> 17117 <summary>Can vote on group proposals</summary>
19305 </member> 17118 </member>
19306 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket.AgentDataBlock"> 17119 <member name="T:OpenMetaverse.GroupManager">
19307 <exclude /> 17120 <summary>
17121 Handles all network traffic related to reading and writing group
17122 information
17123 </summary>
19308 </member> 17124 </member>
19309 <member name="T:OpenMetaverse.Packets.EventNotificationRemoveRequestPacket.EventDataBlock"> 17125 <member name="F:OpenMetaverse.GroupManager.m_CurrentGroups">
19310 <exclude /> 17126 <summary>The event subscribers. null if no subcribers</summary>
19311 </member> 17127 </member>
19312 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket"> 17128 <member name="M:OpenMetaverse.GroupManager.OnCurrentGroups(OpenMetaverse.CurrentGroupsEventArgs)">
19313 <exclude /> 17129 <summary>Raises the CurrentGroups event</summary>
17130 <param name="e">A CurrentGroupsEventArgs object containing the
17131 data sent from the simulator</param>
19314 </member> 17132 </member>
19315 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.AgentDataBlock"> 17133 <member name="F:OpenMetaverse.GroupManager.m_CurrentGroupsLock">
19316 <exclude /> 17134 <summary>Thread sync lock object</summary>
19317 </member> 17135 </member>
19318 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.EventDataBlock"> 17136 <member name="F:OpenMetaverse.GroupManager.m_GroupNames">
19319 <exclude /> 17137 <summary>The event subscribers. null if no subcribers</summary>
19320 </member> 17138 </member>
19321 <member name="T:OpenMetaverse.Packets.EventGodDeletePacket.QueryDataBlock"> 17139 <member name="M:OpenMetaverse.GroupManager.OnGroupNamesReply(OpenMetaverse.GroupNamesEventArgs)">
19322 <exclude /> 17140 <summary>Raises the GroupNamesReply event</summary>
17141 <param name="e">A GroupNamesEventArgs object containing the
17142 data response from the simulator</param>
19323 </member> 17143 </member>
19324 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket"> 17144 <member name="F:OpenMetaverse.GroupManager.m_GroupNamesLock">
19325 <exclude /> 17145 <summary>Thread sync lock object</summary>
19326 </member> 17146 </member>
19327 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket.AgentDataBlock"> 17147 <member name="F:OpenMetaverse.GroupManager.m_GroupProfile">
19328 <exclude /> 17148 <summary>The event subscribers. null if no subcribers</summary>
19329 </member> 17149 </member>
19330 <member name="T:OpenMetaverse.Packets.PickInfoReplyPacket.DataBlock"> 17150 <member name="M:OpenMetaverse.GroupManager.OnGroupProfile(OpenMetaverse.GroupProfileEventArgs)">
19331 <exclude /> 17151 <summary>Raises the GroupProfile event</summary>
17152 <param name="e">An GroupProfileEventArgs object containing the
17153 data returned from the simulator</param>
19332 </member> 17154 </member>
19333 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket"> 17155 <member name="F:OpenMetaverse.GroupManager.m_GroupProfileLock">
19334 <exclude /> 17156 <summary>Thread sync lock object</summary>
19335 </member> 17157 </member>
19336 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket.AgentDataBlock"> 17158 <member name="F:OpenMetaverse.GroupManager.m_GroupMembers">
19337 <exclude /> 17159 <summary>The event subscribers. null if no subcribers</summary>
19338 </member> 17160 </member>
19339 <member name="T:OpenMetaverse.Packets.PickInfoUpdatePacket.DataBlock"> 17161 <member name="M:OpenMetaverse.GroupManager.OnGroupMembersReply(OpenMetaverse.GroupMembersReplyEventArgs)">
19340 <exclude /> 17162 <summary>Raises the GroupMembers event</summary>
17163 <param name="e">A GroupMembersEventArgs object containing the
17164 data returned from the simulator</param>
19341 </member> 17165 </member>
19342 <member name="T:OpenMetaverse.Packets.PickDeletePacket"> 17166 <member name="F:OpenMetaverse.GroupManager.m_GroupMembersLock">
19343 <exclude /> 17167 <summary>Thread sync lock object</summary>
19344 </member> 17168 </member>
19345 <member name="T:OpenMetaverse.Packets.PickDeletePacket.AgentDataBlock"> 17169 <member name="F:OpenMetaverse.GroupManager.m_GroupRoles">
19346 <exclude /> 17170 <summary>The event subscribers. null if no subcribers</summary>
19347 </member> 17171 </member>
19348 <member name="T:OpenMetaverse.Packets.PickDeletePacket.DataBlock"> 17172 <member name="M:OpenMetaverse.GroupManager.OnGroupRoleDataReply(OpenMetaverse.GroupRolesDataReplyEventArgs)">
19349 <exclude /> 17173 <summary>Raises the GroupRolesDataReply event</summary>
17174 <param name="e">A GroupRolesDataReplyEventArgs object containing the
17175 data returned from the simulator</param>
19350 </member> 17176 </member>
19351 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket"> 17177 <member name="F:OpenMetaverse.GroupManager.m_GroupRolesLock">
19352 <exclude /> 17178 <summary>Thread sync lock object</summary>
19353 </member> 17179 </member>
19354 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket.AgentDataBlock"> 17180 <member name="F:OpenMetaverse.GroupManager.m_GroupRoleMembers">
19355 <exclude /> 17181 <summary>The event subscribers. null if no subcribers</summary>
19356 </member> 17182 </member>
19357 <member name="T:OpenMetaverse.Packets.PickGodDeletePacket.DataBlock"> 17183 <member name="M:OpenMetaverse.GroupManager.OnGroupRoleMembers(OpenMetaverse.GroupRolesMembersReplyEventArgs)">
19358 <exclude /> 17184 <summary>Raises the GroupRoleMembersReply event</summary>
17185 <param name="e">A GroupRolesRoleMembersReplyEventArgs object containing the
17186 data returned from the simulator</param>
19359 </member> 17187 </member>
19360 <member name="T:OpenMetaverse.Packets.ScriptQuestionPacket"> 17188 <member name="F:OpenMetaverse.GroupManager.m_GroupRolesMembersLock">
19361 <exclude /> 17189 <summary>Thread sync lock object</summary>
19362 </member> 17190 </member>
19363 <member name="T:OpenMetaverse.Packets.ScriptQuestionPacket.DataBlock"> 17191 <member name="F:OpenMetaverse.GroupManager.m_GroupTitles">
19364 <exclude /> 17192 <summary>The event subscribers. null if no subcribers</summary>
19365 </member> 17193 </member>
19366 <member name="T:OpenMetaverse.Packets.ScriptControlChangePacket"> 17194 <member name="M:OpenMetaverse.GroupManager.OnGroupTitles(OpenMetaverse.GroupTitlesReplyEventArgs)">
19367 <exclude /> 17195 <summary>Raises the GroupTitlesReply event</summary>
17196 <param name="e">A GroupTitlesReplyEventArgs object containing the
17197 data returned from the simulator</param>
19368 </member> 17198 </member>
19369 <member name="T:OpenMetaverse.Packets.ScriptControlChangePacket.DataBlock"> 17199 <member name="F:OpenMetaverse.GroupManager.m_GroupTitlesLock">
19370 <exclude /> 17200 <summary>Thread sync lock object</summary>
19371 </member> 17201 </member>
19372 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket"> 17202 <member name="F:OpenMetaverse.GroupManager.m_GroupAccountSummary">
19373 <exclude /> 17203 <summary>The event subscribers. null if no subcribers</summary>
19374 </member> 17204 </member>
19375 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.DataBlock"> 17205 <member name="M:OpenMetaverse.GroupManager.OnGroupAccountSummaryReply(OpenMetaverse.GroupAccountSummaryReplyEventArgs)">
19376 <exclude /> 17206 <summary>Raises the GroupAccountSummary event</summary>
17207 <param name="e">A GroupAccountSummaryReplyEventArgs object containing the
17208 data returned from the simulator</param>
19377 </member> 17209 </member>
19378 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.ButtonsBlock"> 17210 <member name="F:OpenMetaverse.GroupManager.m_GroupAccountSummaryLock">
19379 <exclude /> 17211 <summary>Thread sync lock object</summary>
19380 </member> 17212 </member>
19381 <member name="T:OpenMetaverse.Packets.ScriptDialogPacket.OwnerDataBlock"> 17213 <member name="F:OpenMetaverse.GroupManager.m_GroupCreated">
19382 <exclude /> 17214 <summary>The event subscribers. null if no subcribers</summary>
19383 </member> 17215 </member>
19384 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket"> 17216 <member name="M:OpenMetaverse.GroupManager.OnGroupCreatedReply(OpenMetaverse.GroupCreatedReplyEventArgs)">
19385 <exclude /> 17217 <summary>Raises the GroupCreated event</summary>
17218 <param name="e">An GroupCreatedEventArgs object containing the
17219 data returned from the simulator</param>
19386 </member> 17220 </member>
19387 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket.AgentDataBlock"> 17221 <member name="F:OpenMetaverse.GroupManager.m_GroupCreatedLock">
19388 <exclude /> 17222 <summary>Thread sync lock object</summary>
19389 </member> 17223 </member>
19390 <member name="T:OpenMetaverse.Packets.ScriptDialogReplyPacket.DataBlock"> 17224 <member name="F:OpenMetaverse.GroupManager.m_GroupJoined">
19391 <exclude /> 17225 <summary>The event subscribers. null if no subcribers</summary>
19392 </member> 17226 </member>
19393 <member name="T:OpenMetaverse.Packets.ForceScriptControlReleasePacket"> 17227 <member name="M:OpenMetaverse.GroupManager.OnGroupJoinedReply(OpenMetaverse.GroupOperationEventArgs)">
19394 <exclude /> 17228 <summary>Raises the GroupJoined event</summary>
17229 <param name="e">A GroupOperationEventArgs object containing the
17230 result of the operation returned from the simulator</param>
19395 </member> 17231 </member>
19396 <member name="T:OpenMetaverse.Packets.ForceScriptControlReleasePacket.AgentDataBlock"> 17232 <member name="F:OpenMetaverse.GroupManager.m_GroupJoinedLock">
19397 <exclude /> 17233 <summary>Thread sync lock object</summary>
19398 </member> 17234 </member>
19399 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket"> 17235 <member name="F:OpenMetaverse.GroupManager.m_GroupLeft">
19400 <exclude /> 17236 <summary>The event subscribers. null if no subcribers</summary>
19401 </member> 17237 </member>
19402 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket.AgentDataBlock"> 17238 <member name="M:OpenMetaverse.GroupManager.OnGroupLeaveReply(OpenMetaverse.GroupOperationEventArgs)">
19403 <exclude /> 17239 <summary>Raises the GroupLeft event</summary>
17240 <param name="e">A GroupOperationEventArgs object containing the
17241 result of the operation returned from the simulator</param>
19404 </member> 17242 </member>
19405 <member name="T:OpenMetaverse.Packets.RevokePermissionsPacket.DataBlock"> 17243 <member name="F:OpenMetaverse.GroupManager.m_GroupLeftLock">
19406 <exclude /> 17244 <summary>Thread sync lock object</summary>
19407 </member> 17245 </member>
19408 <member name="T:OpenMetaverse.Packets.LoadURLPacket"> 17246 <member name="F:OpenMetaverse.GroupManager.m_GroupDropped">
19409 <exclude /> 17247 <summary>The event subscribers. null if no subcribers</summary>
19410 </member> 17248 </member>
19411 <member name="T:OpenMetaverse.Packets.LoadURLPacket.DataBlock"> 17249 <member name="M:OpenMetaverse.GroupManager.OnGroupDropped(OpenMetaverse.GroupDroppedEventArgs)">
19412 <exclude /> 17250 <summary>Raises the GroupDropped event</summary>
17251 <param name="e">An GroupDroppedEventArgs object containing the
17252 the group your agent left</param>
19413 </member> 17253 </member>
19414 <member name="T:OpenMetaverse.Packets.ScriptTeleportRequestPacket"> 17254 <member name="F:OpenMetaverse.GroupManager.m_GroupDroppedLock">
19415 <exclude /> 17255 <summary>Thread sync lock object</summary>
19416 </member> 17256 </member>
19417 <member name="T:OpenMetaverse.Packets.ScriptTeleportRequestPacket.DataBlock"> 17257 <member name="F:OpenMetaverse.GroupManager.m_GroupMemberEjected">
19418 <exclude /> 17258 <summary>The event subscribers. null if no subcribers</summary>
19419 </member> 17259 </member>
19420 <member name="T:OpenMetaverse.Packets.ParcelOverlayPacket"> 17260 <member name="M:OpenMetaverse.GroupManager.OnGroupMemberEjected(OpenMetaverse.GroupOperationEventArgs)">
19421 <exclude /> 17261 <summary>Raises the GroupMemberEjected event</summary>
17262 <param name="e">An GroupMemberEjectedEventArgs object containing the
17263 data returned from the simulator</param>
19422 </member> 17264 </member>
19423 <member name="T:OpenMetaverse.Packets.ParcelOverlayPacket.ParcelDataBlock"> 17265 <member name="F:OpenMetaverse.GroupManager.m_GroupMemberEjectedLock">
19424 <exclude /> 17266 <summary>Thread sync lock object</summary>
19425 </member> 17267 </member>
19426 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket"> 17268 <member name="F:OpenMetaverse.GroupManager.m_GroupNoticesListReply">
19427 <exclude /> 17269 <summary>The event subscribers. null if no subcribers</summary>
19428 </member> 17270 </member>
19429 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket.AgentDataBlock"> 17271 <member name="M:OpenMetaverse.GroupManager.OnGroupNoticesListReply(OpenMetaverse.GroupNoticesListReplyEventArgs)">
19430 <exclude /> 17272 <summary>Raises the GroupNoticesListReply event</summary>
17273 <param name="e">An GroupNoticesListReplyEventArgs object containing the
17274 data returned from the simulator</param>
19431 </member> 17275 </member>
19432 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestByIDPacket.ParcelDataBlock"> 17276 <member name="F:OpenMetaverse.GroupManager.m_GroupNoticesListReplyLock">
19433 <exclude /> 17277 <summary>Thread sync lock object</summary>
19434 </member> 17278 </member>
19435 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket"> 17279 <member name="F:OpenMetaverse.GroupManager.m_GroupInvitation">
19436 <exclude /> 17280 <summary>The event subscribers. null if no subcribers</summary>
19437 </member> 17281 </member>
19438 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket.AgentDataBlock"> 17282 <member name="M:OpenMetaverse.GroupManager.OnGroupInvitation(OpenMetaverse.GroupInvitationEventArgs)">
19439 <exclude /> 17283 <summary>Raises the GroupInvitation event</summary>
17284 <param name="e">An GroupInvitationEventArgs object containing the
17285 data returned from the simulator</param>
19440 </member> 17286 </member>
19441 <member name="T:OpenMetaverse.Packets.ParcelPropertiesUpdatePacket.ParcelDataBlock"> 17287 <member name="F:OpenMetaverse.GroupManager.m_GroupInvitationLock">
19442 <exclude /> 17288 <summary>Thread sync lock object</summary>
19443 </member> 17289 </member>
19444 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket"> 17290 <member name="F:OpenMetaverse.GroupManager.Client">
19445 <exclude /> 17291 <summary>A reference to the current <seealso cref="T:OpenMetaverse.GridClient"/> instance</summary>
19446 </member> 17292 </member>
19447 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.AgentDataBlock"> 17293 <member name="F:OpenMetaverse.GroupManager.GroupMembersRequests">
19448 <exclude /> 17294 <summary>Currently-active group members requests</summary>
19449 </member> 17295 </member>
19450 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.ParcelDataBlock"> 17296 <member name="F:OpenMetaverse.GroupManager.GroupRolesRequests">
19451 <exclude /> 17297 <summary>Currently-active group roles requests</summary>
19452 </member> 17298 </member>
19453 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.TaskIDsBlock"> 17299 <member name="F:OpenMetaverse.GroupManager.GroupRolesMembersRequests">
19454 <exclude /> 17300 <summary>Currently-active group role-member requests</summary>
19455 </member> 17301 </member>
19456 <member name="T:OpenMetaverse.Packets.ParcelReturnObjectsPacket.OwnerIDsBlock"> 17302 <member name="F:OpenMetaverse.GroupManager.TempGroupMembers">
19457 <exclude /> 17303 <summary>Dictionary keeping group members while request is in progress</summary>
19458 </member> 17304 </member>
19459 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket"> 17305 <member name="F:OpenMetaverse.GroupManager.TempGroupRolesMembers">
19460 <exclude /> 17306 <summary>Dictionary keeping mebmer/role mapping while request is in progress</summary>
19461 </member> 17307 </member>
19462 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket.AgentDataBlock"> 17308 <member name="F:OpenMetaverse.GroupManager.TempGroupRoles">
19463 <exclude /> 17309 <summary>Dictionary keeping GroupRole information while request is in progress</summary>
19464 </member> 17310 </member>
19465 <member name="T:OpenMetaverse.Packets.ParcelSetOtherCleanTimePacket.ParcelDataBlock"> 17311 <member name="F:OpenMetaverse.GroupManager.GroupName2KeyCache">
19466 <exclude /> 17312 <summary>Caches group name lookups</summary>
19467 </member> 17313 </member>
19468 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket"> 17314 <member name="M:OpenMetaverse.GroupManager.#ctor(OpenMetaverse.GridClient)">
19469 <exclude /> 17315 <summary>
17316 Construct a new instance of the GroupManager class
17317 </summary>
17318 <param name="client">A reference to the current <seealso cref="T:OpenMetaverse.GridClient"/> instance</param>
19470 </member> 17319 </member>
19471 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.AgentDataBlock"> 17320 <member name="M:OpenMetaverse.GroupManager.RequestCurrentGroups">
19472 <exclude /> 17321 <summary>
17322 Request a current list of groups the avatar is a member of.
17323 </summary>
17324 <remarks>CAPS Event Queue must be running for this to work since the results
17325 come across CAPS.</remarks>
19473 </member> 17326 </member>
19474 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.ParcelDataBlock"> 17327 <member name="M:OpenMetaverse.GroupManager.RequestGroupName(OpenMetaverse.UUID)">
19475 <exclude /> 17328 <summary>
17329 Lookup name of group based on groupID
17330 </summary>
17331 <param name="groupID">groupID of group to lookup name for.</param>
19476 </member> 17332 </member>
19477 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.TaskIDsBlock"> 17333 <member name="M:OpenMetaverse.GroupManager.RequestGroupNames(System.Collections.Generic.List{OpenMetaverse.UUID})">
19478 <exclude /> 17334 <summary>
17335 Request lookup of multiple group names
17336 </summary>
17337 <param name="groupIDs">List of group IDs to request.</param>
19479 </member> 17338 </member>
19480 <member name="T:OpenMetaverse.Packets.ParcelDisableObjectsPacket.OwnerIDsBlock"> 17339 <member name="M:OpenMetaverse.GroupManager.RequestGroupProfile(OpenMetaverse.UUID)">
19481 <exclude /> 17340 <summary>Lookup group profile data such as name, enrollment, founder, logo, etc</summary>
17341 <remarks>Subscribe to <code>OnGroupProfile</code> event to receive the results.</remarks>
17342 <param name="group">group ID (UUID)</param>
19482 </member> 17343 </member>
19483 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket"> 17344 <member name="M:OpenMetaverse.GroupManager.RequestGroupMembers(OpenMetaverse.UUID)">
19484 <exclude /> 17345 <summary>Request a list of group members.</summary>
17346 <remarks>Subscribe to <code>OnGroupMembers</code> event to receive the results.</remarks>
17347 <param name="group">group ID (UUID)</param>
17348 <returns>UUID of the request, use to index into cache</returns>
19485 </member> 17349 </member>
19486 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.AgentDataBlock"> 17350 <member name="M:OpenMetaverse.GroupManager.RequestGroupRoles(OpenMetaverse.UUID)">
19487 <exclude /> 17351 <summary>Request group roles</summary>
17352 <remarks>Subscribe to <code>OnGroupRoles</code> event to receive the results.</remarks>
17353 <param name="group">group ID (UUID)</param>
17354 <returns>UUID of the request, use to index into cache</returns>
19488 </member> 17355 </member>
19489 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.ParcelDataBlock"> 17356 <member name="M:OpenMetaverse.GroupManager.RequestGroupRolesMembers(OpenMetaverse.UUID)">
19490 <exclude /> 17357 <summary>Request members (members,role) role mapping for a group.</summary>
17358 <remarks>Subscribe to <code>OnGroupRolesMembers</code> event to receive the results.</remarks>
17359 <param name="group">group ID (UUID)</param>
17360 <returns>UUID of the request, use to index into cache</returns>
19491 </member> 17361 </member>
19492 <member name="T:OpenMetaverse.Packets.ParcelSelectObjectsPacket.ReturnIDsBlock"> 17362 <member name="M:OpenMetaverse.GroupManager.RequestGroupTitles(OpenMetaverse.UUID)">
19493 <exclude /> 17363 <summary>Request a groups Titles</summary>
17364 <remarks>Subscribe to <code>OnGroupTitles</code> event to receive the results.</remarks>
17365 <param name="group">group ID (UUID)</param>
17366 <returns>UUID of the request, use to index into cache</returns>
19494 </member> 17367 </member>
19495 <member name="T:OpenMetaverse.Packets.EstateCovenantRequestPacket"> 17368 <member name="M:OpenMetaverse.GroupManager.RequestGroupAccountSummary(OpenMetaverse.UUID,System.Int32,System.Int32)">
19496 <exclude /> 17369 <summary>Begin to get the group account summary</summary>
17370 <remarks>Subscribe to the <code>OnGroupAccountSummary</code> event to receive the results.</remarks>
17371 <param name="group">group ID (UUID)</param>
17372 <param name="intervalDays">How long of an interval</param>
17373 <param name="currentInterval">Which interval (0 for current, 1 for last)</param>
19497 </member> 17374 </member>
19498 <member name="T:OpenMetaverse.Packets.EstateCovenantRequestPacket.AgentDataBlock"> 17375 <member name="M:OpenMetaverse.GroupManager.Invite(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.UUID},OpenMetaverse.UUID)">
19499 <exclude /> 17376 <summary>Invites a user to a group</summary>
17377 <param name="group">The group to invite to</param>
17378 <param name="roles">A list of roles to invite a person to</param>
17379 <param name="personkey">Key of person to invite</param>
19500 </member> 17380 </member>
19501 <member name="T:OpenMetaverse.Packets.EstateCovenantReplyPacket"> 17381 <member name="M:OpenMetaverse.GroupManager.ActivateGroup(OpenMetaverse.UUID)">
19502 <exclude /> 17382 <summary>Set a group as the current active group</summary>
17383 <param name="id">group ID (UUID)</param>
19503 </member> 17384 </member>
19504 <member name="T:OpenMetaverse.Packets.EstateCovenantReplyPacket.DataBlock"> 17385 <member name="M:OpenMetaverse.GroupManager.ActivateTitle(OpenMetaverse.UUID,OpenMetaverse.UUID)">
19505 <exclude /> 17386 <summary>Change the role that determines your active title</summary>
17387 <param name="group">Group ID to use</param>
17388 <param name="role">Role ID to change to</param>
19506 </member> 17389 </member>
19507 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket"> 17390 <member name="M:OpenMetaverse.GroupManager.SetGroupContribution(OpenMetaverse.UUID,System.Int32)">
19508 <exclude /> 17391 <summary>Set this avatar's tier contribution</summary>
17392 <param name="group">Group ID to change tier in</param>
17393 <param name="contribution">amount of tier to donate</param>
19509 </member> 17394 </member>
19510 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket.HeaderBlock"> 17395 <member name="M:OpenMetaverse.GroupManager.SetGroupAcceptNotices(OpenMetaverse.UUID,System.Boolean,System.Boolean)">
19511 <exclude /> 17396 <summary>
17397 Save wheather agent wants to accept group notices and list this group in their profile
17398 </summary>
17399 <param name="groupID">Group <see cref="T:OpenMetaverse.UUID"/></param>
17400 <param name="acceptNotices">Accept notices from this group</param>
17401 <param name="listInProfile">List this group in the profile</param>
19512 </member> 17402 </member>
19513 <member name="T:OpenMetaverse.Packets.ForceObjectSelectPacket.DataBlock"> 17403 <member name="M:OpenMetaverse.GroupManager.RequestJoinGroup(OpenMetaverse.UUID)">
19514 <exclude /> 17404 <summary>Request to join a group</summary>
17405 <remarks>Subscribe to <code>OnGroupJoined</code> event for confirmation.</remarks>
17406 <param name="id">group ID (UUID) to join.</param>
19515 </member> 17407 </member>
19516 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket"> 17408 <member name="M:OpenMetaverse.GroupManager.RequestCreateGroup(OpenMetaverse.Group)">
19517 <exclude /> 17409 <summary>
17410 Request to create a new group. If the group is successfully
17411 created, L$100 will automatically be deducted
17412 </summary>
17413 <remarks>Subscribe to <code>OnGroupCreated</code> event to receive confirmation.</remarks>
17414 <param name="group">Group struct containing the new group info</param>
19518 </member> 17415 </member>
19519 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket.AgentDataBlock"> 17416 <member name="M:OpenMetaverse.GroupManager.UpdateGroup(OpenMetaverse.UUID,OpenMetaverse.Group)">
19520 <exclude /> 17417 <summary>Update a group's profile and other information</summary>
17418 <param name="id">Groups ID (UUID) to update.</param>
17419 <param name="group">Group struct to update.</param>
19521 </member> 17420 </member>
19522 <member name="T:OpenMetaverse.Packets.ParcelBuyPassPacket.ParcelDataBlock"> 17421 <member name="M:OpenMetaverse.GroupManager.EjectUser(OpenMetaverse.UUID,OpenMetaverse.UUID)">
19523 <exclude /> 17422 <summary>Eject a user from a group</summary>
17423 <param name="group">Group ID to eject the user from</param>
17424 <param name="member">Avatar's key to eject</param>
19524 </member> 17425 </member>
19525 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket"> 17426 <member name="M:OpenMetaverse.GroupManager.UpdateRole(OpenMetaverse.GroupRole)">
19526 <exclude /> 17427 <summary>Update role information</summary>
17428 <param name="role">Modified role to be updated</param>
19527 </member> 17429 </member>
19528 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket.AgentDataBlock"> 17430 <member name="M:OpenMetaverse.GroupManager.CreateRole(OpenMetaverse.UUID,OpenMetaverse.GroupRole)">
19529 <exclude /> 17431 <summary>Create a new group role</summary>
17432 <param name="group">Group ID to update</param>
17433 <param name="role">Role to create</param>
19530 </member> 17434 </member>
19531 <member name="T:OpenMetaverse.Packets.ParcelDeedToGroupPacket.DataBlock"> 17435 <member name="M:OpenMetaverse.GroupManager.DeleteRole(OpenMetaverse.UUID,OpenMetaverse.UUID)">
19532 <exclude /> 17436 <summary>Delete a group role</summary>
17437 <param name="group">Group ID to update</param>
17438 <param name="roleID">Role to delete</param>
19533 </member> 17439 </member>
19534 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket"> 17440 <member name="M:OpenMetaverse.GroupManager.RemoveFromRole(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
19535 <exclude /> 17441 <summary>Remove an avatar from a role</summary>
17442 <param name="group">Group ID to update</param>
17443 <param name="role">Role ID to be removed from</param>
17444 <param name="member">Avatar's Key to remove</param>
19536 </member> 17445 </member>
19537 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket.AgentDataBlock"> 17446 <member name="M:OpenMetaverse.GroupManager.AddToRole(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID)">
19538 <exclude /> 17447 <summary>Assign an avatar to a role</summary>
17448 <param name="group">Group ID to update</param>
17449 <param name="role">Role ID to assign to</param>
17450 <param name="member">Avatar's ID to assign to role</param>
19539 </member> 17451 </member>
19540 <member name="T:OpenMetaverse.Packets.ParcelReclaimPacket.DataBlock"> 17452 <member name="M:OpenMetaverse.GroupManager.RequestGroupNoticesList(OpenMetaverse.UUID)">
19541 <exclude /> 17453 <summary>Request the group notices list</summary>
17454 <param name="group">Group ID to fetch notices for</param>
19542 </member> 17455 </member>
19543 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket"> 17456 <member name="M:OpenMetaverse.GroupManager.RequestGroupNotice(OpenMetaverse.UUID)">
19544 <exclude /> 17457 <summary>Request a group notice by key</summary>
17458 <param name="noticeID">ID of group notice</param>
19545 </member> 17459 </member>
19546 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.AgentDataBlock"> 17460 <member name="M:OpenMetaverse.GroupManager.SendGroupNotice(OpenMetaverse.UUID,OpenMetaverse.GroupNotice)">
19547 <exclude /> 17461 <summary>Send out a group notice</summary>
17462 <param name="group">Group ID to update</param>
17463 <param name="notice"><code>GroupNotice</code> structure containing notice data</param>
19548 </member> 17464 </member>
19549 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.DataBlock"> 17465 <member name="M:OpenMetaverse.GroupManager.StartProposal(OpenMetaverse.UUID,OpenMetaverse.GroupProposal)">
19550 <exclude /> 17466 <summary>Start a group proposal (vote)</summary>
17467 <param name="group">The Group ID to send proposal to</param>
17468 <param name="prop"><code>GroupProposal</code> structure containing the proposal</param>
19551 </member> 17469 </member>
19552 <member name="T:OpenMetaverse.Packets.ParcelClaimPacket.ParcelDataBlock"> 17470 <member name="M:OpenMetaverse.GroupManager.LeaveGroup(OpenMetaverse.UUID)">
19553 <exclude /> 17471 <summary>Request to leave a group</summary>
17472 <remarks>Subscribe to <code>OnGroupLeft</code> event to receive confirmation</remarks>
17473 <param name="groupID">The group to leave</param>
19554 </member> 17474 </member>
19555 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket"> 17475 <member name="M:OpenMetaverse.GroupManager.AgentDropGroupHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19556 <exclude /> 17476 <summary>Process an incoming packet and raise the appropriate events</summary>
17477 <param name="sender">The sender</param>
17478 <param name="e">The EventArgs object containing the packet data</param>
19557 </member> 17479 </member>
19558 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket.AgentDataBlock"> 17480 <member name="M:OpenMetaverse.GroupManager.GroupProfileReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19559 <exclude /> 17481 <summary>Process an incoming packet and raise the appropriate events</summary>
17482 <param name="sender">The sender</param>
17483 <param name="e">The EventArgs object containing the packet data</param>
19560 </member> 17484 </member>
19561 <member name="T:OpenMetaverse.Packets.ParcelJoinPacket.ParcelDataBlock"> 17485 <member name="M:OpenMetaverse.GroupManager.GroupNoticesListReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19562 <exclude /> 17486 <summary>Process an incoming packet and raise the appropriate events</summary>
17487 <param name="sender">The sender</param>
17488 <param name="e">The EventArgs object containing the packet data</param>
19563 </member> 17489 </member>
19564 <member name="T:OpenMetaverse.Packets.ParcelDividePacket"> 17490 <member name="M:OpenMetaverse.GroupManager.GroupTitlesReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19565 <exclude /> 17491 <summary>Process an incoming packet and raise the appropriate events</summary>
17492 <param name="sender">The sender</param>
17493 <param name="e">The EventArgs object containing the packet data</param>
19566 </member> 17494 </member>
19567 <member name="T:OpenMetaverse.Packets.ParcelDividePacket.AgentDataBlock"> 17495 <member name="M:OpenMetaverse.GroupManager.GroupMembersHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19568 <exclude /> 17496 <summary>Process an incoming packet and raise the appropriate events</summary>
17497 <param name="sender">The sender</param>
17498 <param name="e">The EventArgs object containing the packet data</param>
19569 </member> 17499 </member>
19570 <member name="T:OpenMetaverse.Packets.ParcelDividePacket.ParcelDataBlock"> 17500 <member name="M:OpenMetaverse.GroupManager.GroupRoleDataReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19571 <exclude /> 17501 <summary>Process an incoming packet and raise the appropriate events</summary>
17502 <param name="sender">The sender</param>
17503 <param name="e">The EventArgs object containing the packet data</param>
19572 </member> 17504 </member>
19573 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket"> 17505 <member name="M:OpenMetaverse.GroupManager.GroupRoleMembersReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19574 <exclude /> 17506 <summary>Process an incoming packet and raise the appropriate events</summary>
17507 <param name="sender">The sender</param>
17508 <param name="e">The EventArgs object containing the packet data</param>
19575 </member> 17509 </member>
19576 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket.AgentDataBlock"> 17510 <member name="M:OpenMetaverse.GroupManager.GroupActiveProposalItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19577 <exclude /> 17511 <summary>Process an incoming packet and raise the appropriate events</summary>
17512 <param name="sender">The sender</param>
17513 <param name="e">The EventArgs object containing the packet data</param>
19578 </member> 17514 </member>
19579 <member name="T:OpenMetaverse.Packets.ParcelReleasePacket.DataBlock"> 17515 <member name="M:OpenMetaverse.GroupManager.GroupVoteHistoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19580 <exclude /> 17516 <summary>Process an incoming packet and raise the appropriate events</summary>
17517 <param name="sender">The sender</param>
17518 <param name="e">The EventArgs object containing the packet data</param>
19581 </member> 17519 </member>
19582 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket"> 17520 <member name="M:OpenMetaverse.GroupManager.GroupAccountSummaryReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19583 <exclude /> 17521 <summary>Process an incoming packet and raise the appropriate events</summary>
17522 <param name="sender">The sender</param>
17523 <param name="e">The EventArgs object containing the packet data</param>
19584 </member> 17524 </member>
19585 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.AgentDataBlock"> 17525 <member name="M:OpenMetaverse.GroupManager.CreateGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19586 <exclude /> 17526 <summary>Process an incoming packet and raise the appropriate events</summary>
17527 <param name="sender">The sender</param>
17528 <param name="e">The EventArgs object containing the packet data</param>
19587 </member> 17529 </member>
19588 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.DataBlock"> 17530 <member name="M:OpenMetaverse.GroupManager.JoinGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19589 <exclude /> 17531 <summary>Process an incoming packet and raise the appropriate events</summary>
17532 <param name="sender">The sender</param>
17533 <param name="e">The EventArgs object containing the packet data</param>
19590 </member> 17534 </member>
19591 <member name="T:OpenMetaverse.Packets.ParcelBuyPacket.ParcelDataBlock"> 17535 <member name="M:OpenMetaverse.GroupManager.LeaveGroupReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19592 <exclude /> 17536 <summary>Process an incoming packet and raise the appropriate events</summary>
17537 <param name="sender">The sender</param>
17538 <param name="e">The EventArgs object containing the packet data</param>
19593 </member> 17539 </member>
19594 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket"> 17540 <member name="M:OpenMetaverse.GroupManager.UUIDGroupNameReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19595 <exclude /> 17541 <summary>Process an incoming packet and raise the appropriate events</summary>
17542 <param name="sender">The sender</param>
17543 <param name="e">The EventArgs object containing the packet data</param>
19596 </member> 17544 </member>
19597 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket.AgentDataBlock"> 17545 <member name="M:OpenMetaverse.GroupManager.EjectGroupMemberReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
19598 <exclude /> 17546 <summary>Process an incoming packet and raise the appropriate events</summary>
17547 <param name="sender">The sender</param>
17548 <param name="e">The EventArgs object containing the packet data</param>
19599 </member> 17549 </member>
19600 <member name="T:OpenMetaverse.Packets.ParcelGodForceOwnerPacket.DataBlock"> 17550 <member name="E:OpenMetaverse.GroupManager.CurrentGroups">
19601 <exclude /> 17551 <summary>Raised when the simulator sends us data containing
17552 our current group membership</summary>
19602 </member> 17553 </member>
19603 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket"> 17554 <member name="E:OpenMetaverse.GroupManager.GroupNamesReply">
19604 <exclude /> 17555 <summary>Raised when the simulator responds to a RequestGroupName
17556 or RequestGroupNames request</summary>
19605 </member> 17557 </member>
19606 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket.AgentDataBlock"> 17558 <member name="E:OpenMetaverse.GroupManager.GroupProfile">
19607 <exclude /> 17559 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupProfile(OpenMetaverse.UUID)"/> request</summary>
19608 </member> 17560 </member>
19609 <member name="T:OpenMetaverse.Packets.ParcelAccessListRequestPacket.DataBlock"> 17561 <member name="E:OpenMetaverse.GroupManager.GroupMembersReply">
19610 <exclude /> 17562 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupMembers(OpenMetaverse.UUID)"/> request</summary>
19611 </member> 17563 </member>
19612 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket"> 17564 <member name="E:OpenMetaverse.GroupManager.GroupRoleDataReply">
19613 <exclude /> 17565 <summary>Raised when the simulator responds to a <see cref="!:RequestGroupRoleData"/> request</summary>
19614 </member> 17566 </member>
19615 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket.DataBlock"> 17567 <member name="E:OpenMetaverse.GroupManager.GroupRoleMembersReply">
19616 <exclude /> 17568 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupRolesMembers(OpenMetaverse.UUID)"/> request</summary>
19617 </member> 17569 </member>
19618 <member name="T:OpenMetaverse.Packets.ParcelAccessListReplyPacket.ListBlock"> 17570 <member name="E:OpenMetaverse.GroupManager.GroupTitlesReply">
19619 <exclude /> 17571 <summary>Raised when the simulator responds to a <see cref="M:OpenMetaverse.GroupManager.RequestGroupTitles(OpenMetaverse.UUID)"/> request</summary>
19620 </member> 17572 </member>
19621 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket"> 17573 <member name="E:OpenMetaverse.GroupManager.GroupAccountSummaryReply">
19622 <exclude /> 17574 <summary>Raised when a response to a RequestGroupAccountSummary is returned
17575 by the simulator</summary>
19623 </member> 17576 </member>
19624 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.AgentDataBlock"> 17577 <member name="E:OpenMetaverse.GroupManager.GroupCreatedReply">
19625 <exclude /> 17578 <summary>Raised when a request to create a group is successful</summary>
19626 </member> 17579 </member>
19627 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.DataBlock"> 17580 <member name="E:OpenMetaverse.GroupManager.GroupJoinedReply">
19628 <exclude /> 17581 <summary>Raised when a request to join a group either
17582 fails or succeeds</summary>
19629 </member> 17583 </member>
19630 <member name="T:OpenMetaverse.Packets.ParcelAccessListUpdatePacket.ListBlock"> 17584 <member name="E:OpenMetaverse.GroupManager.GroupLeaveReply">
19631 <exclude /> 17585 <summary>Raised when a request to leave a group either
17586 fails or succeeds</summary>
19632 </member> 17587 </member>
19633 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket"> 17588 <member name="E:OpenMetaverse.GroupManager.GroupDropped">
19634 <exclude /> 17589 <summary>Raised when A group is removed from the group server</summary>
19635 </member> 17590 </member>
19636 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket.AgentDataBlock"> 17591 <member name="E:OpenMetaverse.GroupManager.GroupMemberEjected">
19637 <exclude /> 17592 <summary>Raised when a request to eject a member from a group either
17593 fails or succeeds</summary>
19638 </member> 17594 </member>
19639 <member name="T:OpenMetaverse.Packets.ParcelDwellRequestPacket.DataBlock"> 17595 <member name="E:OpenMetaverse.GroupManager.GroupNoticesListReply">
19640 <exclude /> 17596 <summary>Raised when the simulator sends us group notices</summary>
17597 <seealso cref="M:OpenMetaverse.GroupManager.RequestGroupNoticesList(OpenMetaverse.UUID)"/>
19641 </member> 17598 </member>
19642 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket"> 17599 <member name="E:OpenMetaverse.GroupManager.GroupInvitation">
19643 <exclude /> 17600 <summary>Raised when another agent invites our avatar to join a group</summary>
19644 </member> 17601 </member>
19645 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket.AgentDataBlock"> 17602 <member name="T:OpenMetaverse.CurrentGroupsEventArgs">
19646 <exclude /> 17603 <summary>Contains the current groups your agent is a member of</summary>
19647 </member> 17604 </member>
19648 <member name="T:OpenMetaverse.Packets.ParcelDwellReplyPacket.DataBlock"> 17605 <member name="M:OpenMetaverse.CurrentGroupsEventArgs.#ctor(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.Group})">
19649 <exclude /> 17606 <summary>Construct a new instance of the CurrentGroupsEventArgs class</summary>
17607 <param name="groups">The current groups your agent is a member of</param>
19650 </member> 17608 </member>
19651 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket"> 17609 <member name="P:OpenMetaverse.CurrentGroupsEventArgs.Groups">
19652 <exclude /> 17610 <summary>Get the current groups your agent is a member of</summary>
19653 </member> 17611 </member>
19654 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket.AgentDataBlock"> 17612 <member name="T:OpenMetaverse.GroupNamesEventArgs">
19655 <exclude /> 17613 <summary>A Dictionary of group names, where the Key is the groups ID and the value is the groups name</summary>
19656 </member> 17614 </member>
19657 <member name="T:OpenMetaverse.Packets.ParcelGodMarkAsContentPacket.ParcelDataBlock"> 17615 <member name="M:OpenMetaverse.GroupNamesEventArgs.#ctor(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,System.String})">
19658 <exclude /> 17616 <summary>Construct a new instance of the GroupNamesEventArgs class</summary>
17617 <param name="groupNames">The Group names dictionary</param>
19659 </member> 17618 </member>
19660 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket"> 17619 <member name="P:OpenMetaverse.GroupNamesEventArgs.GroupNames">
19661 <exclude /> 17620 <summary>Get the Group Names dictionary</summary>
19662 </member> 17621 </member>
19663 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket.AgentDataBlock"> 17622 <member name="T:OpenMetaverse.GroupMembersReplyEventArgs">
19664 <exclude /> 17623 <summary>Represents the members of a group</summary>
19665 </member> 17624 </member>
19666 <member name="T:OpenMetaverse.Packets.ViewerStartAuctionPacket.ParcelDataBlock"> 17625 <member name="M:OpenMetaverse.GroupMembersReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupMember})">
19667 <exclude /> 17626 <summary>
17627 Construct a new instance of the GroupMembersReplyEventArgs class
17628 </summary>
17629 <param name="requestID">The ID of the request</param>
17630 <param name="groupID">The ID of the group</param>
17631 <param name="members">The membership list of the group</param>
19668 </member> 17632 </member>
19669 <member name="T:OpenMetaverse.Packets.UUIDNameRequestPacket"> 17633 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.RequestID">
19670 <exclude /> 17634 <summary>Get the ID as returned by the request to correlate
17635 this result set and the request</summary>
19671 </member> 17636 </member>
19672 <member name="T:OpenMetaverse.Packets.UUIDNameRequestPacket.UUIDNameBlockBlock"> 17637 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.GroupID">
19673 <exclude /> 17638 <summary>Get the ID of the group</summary>
19674 </member> 17639 </member>
19675 <member name="T:OpenMetaverse.Packets.UUIDNameReplyPacket"> 17640 <member name="P:OpenMetaverse.GroupMembersReplyEventArgs.Members">
19676 <exclude /> 17641 <summary>Get the dictionary of members</summary>
19677 </member> 17642 </member>
19678 <member name="T:OpenMetaverse.Packets.UUIDNameReplyPacket.UUIDNameBlockBlock"> 17643 <member name="T:OpenMetaverse.GroupRolesDataReplyEventArgs">
19679 <exclude /> 17644 <summary>Represents the roles associated with a group</summary>
19680 </member> 17645 </member>
19681 <member name="T:OpenMetaverse.Packets.UUIDGroupNameRequestPacket"> 17646 <member name="M:OpenMetaverse.GroupRolesDataReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupRole})">
19682 <exclude /> 17647 <summary>Construct a new instance of the GroupRolesDataReplyEventArgs class</summary>
17648 <param name="requestID">The ID as returned by the request to correlate
17649 this result set and the request</param>
17650 <param name="groupID">The ID of the group</param>
17651 <param name="roles">The dictionary containing the roles</param>
19683 </member> 17652 </member>
19684 <member name="T:OpenMetaverse.Packets.UUIDGroupNameRequestPacket.UUIDNameBlockBlock"> 17653 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.RequestID">
19685 <exclude /> 17654 <summary>Get the ID as returned by the request to correlate
17655 this result set and the request</summary>
19686 </member> 17656 </member>
19687 <member name="T:OpenMetaverse.Packets.UUIDGroupNameReplyPacket"> 17657 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.GroupID">
19688 <exclude /> 17658 <summary>Get the ID of the group</summary>
19689 </member> 17659 </member>
19690 <member name="T:OpenMetaverse.Packets.UUIDGroupNameReplyPacket.UUIDNameBlockBlock"> 17660 <member name="P:OpenMetaverse.GroupRolesDataReplyEventArgs.Roles">
19691 <exclude /> 17661 <summary>Get the dictionary containing the roles</summary>
19692 </member> 17662 </member>
19693 <member name="T:OpenMetaverse.Packets.ChildAgentDyingPacket"> 17663 <member name="T:OpenMetaverse.GroupRolesMembersReplyEventArgs">
19694 <exclude /> 17664 <summary>Represents the Role to Member mappings for a group</summary>
19695 </member> 17665 </member>
19696 <member name="T:OpenMetaverse.Packets.ChildAgentDyingPacket.AgentDataBlock"> 17666 <member name="M:OpenMetaverse.GroupRolesMembersReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.List{System.Collections.Generic.KeyValuePair{OpenMetaverse.UUID,OpenMetaverse.UUID}})">
19697 <exclude /> 17667 <summary>Construct a new instance of the GroupRolesMembersReplyEventArgs class</summary>
17668 <param name="requestID">The ID as returned by the request to correlate
17669 this result set and the request</param>
17670 <param name="groupID">The ID of the group</param>
17671 <param name="rolesMembers">The member to roles map</param>
19698 </member> 17672 </member>
19699 <member name="T:OpenMetaverse.Packets.ChildAgentUnknownPacket"> 17673 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.RequestID">
19700 <exclude /> 17674 <summary>Get the ID as returned by the request to correlate
17675 this result set and the request</summary>
19701 </member> 17676 </member>
19702 <member name="T:OpenMetaverse.Packets.ChildAgentUnknownPacket.AgentDataBlock"> 17677 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.GroupID">
19703 <exclude /> 17678 <summary>Get the ID of the group</summary>
19704 </member> 17679 </member>
19705 <member name="T:OpenMetaverse.Packets.GetScriptRunningPacket"> 17680 <member name="P:OpenMetaverse.GroupRolesMembersReplyEventArgs.RolesMembers">
19706 <exclude /> 17681 <summary>Get the member to roles map</summary>
19707 </member> 17682 </member>
19708 <member name="T:OpenMetaverse.Packets.GetScriptRunningPacket.ScriptBlock"> 17683 <member name="T:OpenMetaverse.GroupTitlesReplyEventArgs">
19709 <exclude /> 17684 <summary>Represents the titles for a group</summary>
19710 </member> 17685 </member>
19711 <member name="T:OpenMetaverse.Packets.ScriptRunningReplyPacket"> 17686 <member name="M:OpenMetaverse.GroupTitlesReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.GroupTitle})">
19712 <exclude /> 17687 <summary>Construct a new instance of the GroupTitlesReplyEventArgs class</summary>
17688 <param name="requestID">The ID as returned by the request to correlate
17689 this result set and the request</param>
17690 <param name="groupID">The ID of the group</param>
17691 <param name="titles">The titles</param>
19713 </member> 17692 </member>
19714 <member name="T:OpenMetaverse.Packets.ScriptRunningReplyPacket.ScriptBlock"> 17693 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.RequestID">
19715 <exclude /> 17694 <summary>Get the ID as returned by the request to correlate
17695 this result set and the request</summary>
19716 </member> 17696 </member>
19717 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket"> 17697 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.GroupID">
19718 <exclude /> 17698 <summary>Get the ID of the group</summary>
19719 </member> 17699 </member>
19720 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket.AgentDataBlock"> 17700 <member name="P:OpenMetaverse.GroupTitlesReplyEventArgs.Titles">
19721 <exclude /> 17701 <summary>Get the titles</summary>
19722 </member> 17702 </member>
19723 <member name="T:OpenMetaverse.Packets.SetScriptRunningPacket.ScriptBlock"> 17703 <member name="T:OpenMetaverse.GroupAccountSummaryReplyEventArgs">
19724 <exclude /> 17704 <summary>Represents the summary data for a group</summary>
19725 </member> 17705 </member>
19726 <member name="T:OpenMetaverse.Packets.ScriptResetPacket"> 17706 <member name="M:OpenMetaverse.GroupAccountSummaryReplyEventArgs.#ctor(OpenMetaverse.UUID,OpenMetaverse.GroupAccountSummary)">
19727 <exclude /> 17707 <summary>Construct a new instance of the GroupAccountSummaryReplyEventArgs class</summary>
17708 <param name="groupID">The ID of the group</param>
17709 <param name="summary">The summary data</param>
19728 </member> 17710 </member>
19729 <member name="T:OpenMetaverse.Packets.ScriptResetPacket.AgentDataBlock"> 17711 <member name="P:OpenMetaverse.GroupAccountSummaryReplyEventArgs.GroupID">
19730 <exclude /> 17712 <summary>Get the ID of the group</summary>
19731 </member> 17713 </member>
19732 <member name="T:OpenMetaverse.Packets.ScriptResetPacket.ScriptBlock"> 17714 <member name="P:OpenMetaverse.GroupAccountSummaryReplyEventArgs.Summary">
19733 <exclude /> 17715 <summary>Get the summary data</summary>
19734 </member> 17716 </member>
19735 <member name="T:OpenMetaverse.Packets.ScriptSensorRequestPacket"> 17717 <member name="T:OpenMetaverse.GroupCreatedReplyEventArgs">
19736 <exclude /> 17718 <summary>A response to a group create request</summary>
19737 </member> 17719 </member>
19738 <member name="T:OpenMetaverse.Packets.ScriptSensorRequestPacket.RequesterBlock"> 17720 <member name="M:OpenMetaverse.GroupCreatedReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean,System.String)">
19739 <exclude /> 17721 <summary>Construct a new instance of the GroupCreatedReplyEventArgs class</summary>
17722 <param name="groupID">The ID of the group</param>
17723 <param name="success">the success or faulure of the request</param>
17724 <param name="messsage">A string containing additional information</param>
19740 </member> 17725 </member>
19741 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket"> 17726 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.GroupID">
19742 <exclude /> 17727 <summary>Get the ID of the group</summary>
19743 </member> 17728 </member>
19744 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket.RequesterBlock"> 17729 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.Success">
19745 <exclude /> 17730 <summary>true of the group was created successfully</summary>
19746 </member> 17731 </member>
19747 <member name="T:OpenMetaverse.Packets.ScriptSensorReplyPacket.SensedDataBlock"> 17732 <member name="P:OpenMetaverse.GroupCreatedReplyEventArgs.Message">
19748 <exclude /> 17733 <summary>A string containing the message</summary>
19749 </member> 17734 </member>
19750 <member name="T:OpenMetaverse.Packets.CompleteAgentMovementPacket"> 17735 <member name="T:OpenMetaverse.GroupOperationEventArgs">
19751 <exclude /> 17736 <summary>Represents a response to a request</summary>
19752 </member> 17737 </member>
19753 <member name="T:OpenMetaverse.Packets.CompleteAgentMovementPacket.AgentDataBlock"> 17738 <member name="M:OpenMetaverse.GroupOperationEventArgs.#ctor(OpenMetaverse.UUID,System.Boolean)">
19754 <exclude /> 17739 <summary>Construct a new instance of the GroupOperationEventArgs class</summary>
17740 <param name="groupID">The ID of the group</param>
17741 <param name="success">true of the request was successful</param>
19755 </member> 17742 </member>
19756 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket"> 17743 <member name="P:OpenMetaverse.GroupOperationEventArgs.GroupID">
19757 <exclude /> 17744 <summary>Get the ID of the group</summary>
19758 </member> 17745 </member>
19759 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.AgentDataBlock"> 17746 <member name="P:OpenMetaverse.GroupOperationEventArgs.Success">
19760 <exclude /> 17747 <summary>true of the request was successful</summary>
19761 </member> 17748 </member>
19762 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.DataBlock"> 17749 <member name="T:OpenMetaverse.GroupDroppedEventArgs">
19763 <exclude /> 17750 <summary>Represents your agent leaving a group</summary>
19764 </member> 17751 </member>
19765 <member name="T:OpenMetaverse.Packets.AgentMovementCompletePacket.SimDataBlock"> 17752 <member name="M:OpenMetaverse.GroupDroppedEventArgs.#ctor(OpenMetaverse.UUID)">
19766 <exclude /> 17753 <summary>Construct a new instance of the GroupDroppedEventArgs class</summary>
17754 <param name="groupID">The ID of the group</param>
19767 </member> 17755 </member>
19768 <member name="T:OpenMetaverse.Packets.LogoutRequestPacket"> 17756 <member name="P:OpenMetaverse.GroupDroppedEventArgs.GroupID">
19769 <exclude /> 17757 <summary>Get the ID of the group</summary>
19770 </member> 17758 </member>
19771 <member name="T:OpenMetaverse.Packets.LogoutRequestPacket.AgentDataBlock"> 17759 <member name="T:OpenMetaverse.GroupNoticesListReplyEventArgs">
19772 <exclude /> 17760 <summary>Represents a list of active group notices</summary>
19773 </member> 17761 </member>
19774 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket"> 17762 <member name="M:OpenMetaverse.GroupNoticesListReplyEventArgs.#ctor(OpenMetaverse.UUID,System.Collections.Generic.List{OpenMetaverse.GroupNoticesListEntry})">
19775 <exclude /> 17763 <summary>Construct a new instance of the GroupNoticesListReplyEventArgs class</summary>
17764 <param name="groupID">The ID of the group</param>
17765 <param name="notices">The list containing active notices</param>
19776 </member> 17766 </member>
19777 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket.AgentDataBlock"> 17767 <member name="P:OpenMetaverse.GroupNoticesListReplyEventArgs.GroupID">
19778 <exclude /> 17768 <summary>Get the ID of the group</summary>
19779 </member> 17769 </member>
19780 <member name="T:OpenMetaverse.Packets.LogoutReplyPacket.InventoryDataBlock"> 17770 <member name="P:OpenMetaverse.GroupNoticesListReplyEventArgs.Notices">
19781 <exclude /> 17771 <summary>Get the notices list</summary>
19782 </member> 17772 </member>
19783 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket"> 17773 <member name="T:OpenMetaverse.GroupProfileEventArgs">
19784 <exclude /> 17774 <summary>Represents the profile of a group</summary>
19785 </member> 17775 </member>
19786 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket.AgentDataBlock"> 17776 <member name="M:OpenMetaverse.GroupProfileEventArgs.#ctor(OpenMetaverse.Group)">
19787 <exclude /> 17777 <summary>Construct a new instance of the GroupProfileEventArgs class</summary>
17778 <param name="group">The group profile</param>
19788 </member> 17779 </member>
19789 <member name="T:OpenMetaverse.Packets.ImprovedInstantMessagePacket.MessageBlockBlock"> 17780 <member name="P:OpenMetaverse.GroupProfileEventArgs.Group">
19790 <exclude /> 17781 <summary>Get the group profile</summary>
19791 </member> 17782 </member>
19792 <member name="T:OpenMetaverse.Packets.RetrieveInstantMessagesPacket"> 17783 <member name="T:OpenMetaverse.GroupInvitationEventArgs">
19793 <exclude /> 17784 <summary>
17785 Provides notification of a group invitation request sent by another Avatar
17786 </summary>
17787 <remarks>The <see cref="!:GroupInvitation"/> invitation is raised when another avatar makes an offer for our avatar
17788 to join a group.</remarks>
19794 </member> 17789 </member>
19795 <member name="T:OpenMetaverse.Packets.RetrieveInstantMessagesPacket.AgentDataBlock"> 17790 <member name="P:OpenMetaverse.GroupInvitationEventArgs.AgentID">
19796 <exclude /> 17791 <summary>The ID of the Avatar sending the group invitation</summary>
19797 </member> 17792 </member>
19798 <member name="T:OpenMetaverse.Packets.FindAgentPacket"> 17793 <member name="P:OpenMetaverse.GroupInvitationEventArgs.FromName">
19799 <exclude /> 17794 <summary>The name of the Avatar sending the group invitation</summary>
19800 </member> 17795 </member>
19801 <member name="T:OpenMetaverse.Packets.FindAgentPacket.AgentBlockBlock"> 17796 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Message">
19802 <exclude /> 17797 <summary>A message containing the request information which includes
17798 the name of the group, the groups charter and the fee to join details</summary>
19803 </member> 17799 </member>
19804 <member name="T:OpenMetaverse.Packets.FindAgentPacket.LocationBlockBlock"> 17800 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Simulator">
19805 <exclude /> 17801 <summary>The Simulator</summary>
19806 </member> 17802 </member>
19807 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket"> 17803 <member name="P:OpenMetaverse.GroupInvitationEventArgs.Accept">
19808 <exclude /> 17804 <summary>Set to true to accept invitation, false to decline</summary>
19809 </member> 17805 </member>
19810 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket.AgentDataBlock"> 17806 <member name="T:OpenMetaverse.Imaging.Baker">
19811 <exclude /> 17807 <summary>
17808 A set of textures that are layered on texture of each other and "baked"
17809 in to a single texture, for avatar appearances
17810 </summary>
19812 </member> 17811 </member>
19813 <member name="T:OpenMetaverse.Packets.RequestGodlikePowersPacket.RequestBlockBlock"> 17812 <member name="F:OpenMetaverse.Imaging.Baker.bakedTexture">
19814 <exclude /> 17813 <summary>Final baked texture</summary>
19815 </member> 17814 </member>
19816 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket"> 17815 <member name="F:OpenMetaverse.Imaging.Baker.textures">
19817 <exclude /> 17816 <summary>Component layers</summary>
19818 </member> 17817 </member>
19819 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket.AgentDataBlock"> 17818 <member name="F:OpenMetaverse.Imaging.Baker.bakeWidth">
19820 <exclude /> 17819 <summary>Width of the final baked image and scratchpad</summary>
19821 </member> 17820 </member>
19822 <member name="T:OpenMetaverse.Packets.GrantGodlikePowersPacket.GrantDataBlock"> 17821 <member name="F:OpenMetaverse.Imaging.Baker.bakeHeight">
19823 <exclude /> 17822 <summary>Height of the final baked image and scratchpad</summary>
19824 </member> 17823 </member>
19825 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket"> 17824 <member name="F:OpenMetaverse.Imaging.Baker.bakeType">
19826 <exclude /> 17825 <summary>Bake type</summary>
19827 </member> 17826 </member>
19828 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.AgentDataBlock"> 17827 <member name="M:OpenMetaverse.Imaging.Baker.#ctor(OpenMetaverse.BakeType)">
19829 <exclude /> 17828 <summary>
17829 Default constructor
17830 </summary>
17831 <param name="bakeType">Bake type</param>
19830 </member> 17832 </member>
19831 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.MethodDataBlock"> 17833 <member name="M:OpenMetaverse.Imaging.Baker.AddTexture(OpenMetaverse.AppearanceManager.TextureData)">
19832 <exclude /> 17834 <summary>
17835 Adds layer for baking
17836 </summary>
17837 <param name="tdata">TexturaData struct that contains texture and its params</param>
19833 </member> 17838 </member>
19834 <member name="T:OpenMetaverse.Packets.GodlikeMessagePacket.ParamListBlock"> 17839 <member name="M:OpenMetaverse.Imaging.Baker.BakeTypeFor(OpenMetaverse.AvatarTextureIndex)">
19835 <exclude /> 17840 <summary>
17841 Converts avatar texture index (face) to Bake type
17842 </summary>
17843 <param name="index">Face number (AvatarTextureIndex)</param>
17844 <returns>BakeType, layer to which this texture belongs to</returns>
19836 </member> 17845 </member>
19837 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket"> 17846 <member name="M:OpenMetaverse.Imaging.Baker.SanitizeLayers(OpenMetaverse.Imaging.ManagedImage,OpenMetaverse.Imaging.ManagedImage)">
19838 <exclude /> 17847 <summary>
17848 Make sure images exist, resize source if needed to match the destination
17849 </summary>
17850 <param name="dest">Destination image</param>
17851 <param name="src">Source image</param>
17852 <returns>Sanitization was succefull</returns>
19839 </member> 17853 </member>
19840 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.AgentDataBlock"> 17854 <member name="M:OpenMetaverse.Imaging.Baker.InitBakedLayerColor(OpenMetaverse.Color4)">
19841 <exclude /> 17855 <summary>
17856 Fills a baked layer as a solid *appearing* color. The colors are
17857 subtly dithered on a 16x16 grid to prevent the JPEG2000 stage from
17858 compressing it too far since it seems to cause upload failures if
17859 the image is a pure solid color
17860 </summary>
17861 <param name="color">Color of the base of this layer</param>
19842 </member> 17862 </member>
19843 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.MethodDataBlock"> 17863 <member name="M:OpenMetaverse.Imaging.Baker.InitBakedLayerColor(System.Single,System.Single,System.Single)">
19844 <exclude /> 17864 <summary>
17865 Fills a baked layer as a solid *appearing* color. The colors are
17866 subtly dithered on a 16x16 grid to prevent the JPEG2000 stage from
17867 compressing it too far since it seems to cause upload failures if
17868 the image is a pure solid color
17869 </summary>
17870 <param name="r">Red value</param>
17871 <param name="g">Green value</param>
17872 <param name="b">Blue value</param>
19845 </member> 17873 </member>
19846 <member name="T:OpenMetaverse.Packets.EstateOwnerMessagePacket.ParamListBlock"> 17874 <member name="P:OpenMetaverse.Imaging.Baker.BakedTexture">
19847 <exclude /> 17875 <summary>Final baked texture</summary>
19848 </member> 17876 </member>
19849 <member name="T:OpenMetaverse.Packets.GenericMessagePacket"> 17877 <member name="P:OpenMetaverse.Imaging.Baker.Textures">
19850 <exclude /> 17878 <summary>Component layers</summary>
19851 </member> 17879 </member>
19852 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.AgentDataBlock"> 17880 <member name="P:OpenMetaverse.Imaging.Baker.BakeWidth">
19853 <exclude /> 17881 <summary>Width of the final baked image and scratchpad</summary>
19854 </member> 17882 </member>
19855 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.MethodDataBlock"> 17883 <member name="P:OpenMetaverse.Imaging.Baker.BakeHeight">
19856 <exclude /> 17884 <summary>Height of the final baked image and scratchpad</summary>
19857 </member> 17885 </member>
19858 <member name="T:OpenMetaverse.Packets.GenericMessagePacket.ParamListBlock"> 17886 <member name="P:OpenMetaverse.Imaging.Baker.BakeType">
19859 <exclude /> 17887 <summary>Bake type</summary>
19860 </member> 17888 </member>
19861 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket"> 17889 <member name="P:OpenMetaverse.Imaging.Baker.IsSkin">
19862 <exclude /> 17890 <summary>Is this one of the 3 skin bakes</summary>
19863 </member> 17891 </member>
19864 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket.AgentDataBlock"> 17892 <member name="T:OpenMetaverse.Assets.AssetSound">
19865 <exclude /> 17893 <summary>
17894 Represents a Sound Asset
17895 </summary>
19866 </member> 17896 </member>
19867 <member name="T:OpenMetaverse.Packets.MuteListRequestPacket.MuteDataBlock"> 17897 <member name="M:OpenMetaverse.Assets.AssetSound.#ctor">
19868 <exclude /> 17898 <summary>Initializes a new instance of an AssetSound object</summary>
19869 </member> 17899 </member>
19870 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket"> 17900 <member name="M:OpenMetaverse.Assets.AssetSound.#ctor(OpenMetaverse.UUID,System.Byte[])">
19871 <exclude /> 17901 <summary>Initializes a new instance of an AssetSound object with parameters</summary>
17902 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
17903 <param name="assetData">A byte array containing the raw asset data</param>
19872 </member> 17904 </member>
19873 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket.AgentDataBlock"> 17905 <member name="M:OpenMetaverse.Assets.AssetSound.Encode">
19874 <exclude /> 17906 <summary>
17907 TODO: Encodes a sound file
17908 </summary>
19875 </member> 17909 </member>
19876 <member name="T:OpenMetaverse.Packets.UpdateMuteListEntryPacket.MuteDataBlock"> 17910 <member name="M:OpenMetaverse.Assets.AssetSound.Decode">
19877 <exclude /> 17911 <summary>
17912 TODO: Decode a sound file
17913 </summary>
17914 <returns>true</returns>
19878 </member> 17915 </member>
19879 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket"> 17916 <member name="P:OpenMetaverse.Assets.AssetSound.AssetType">
19880 <exclude /> 17917 <summary>Override the base classes AssetType</summary>
19881 </member> 17918 </member>
19882 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket.AgentDataBlock"> 17919 <member name="T:OpenMetaverse.Assets.AssetBodypart">
19883 <exclude /> 17920 <summary>
17921 Represents an <seealso cref="T:OpenMetaverse.Assets.AssetWearable"/> that represents an avatars body ie: Hair, Etc.
17922 </summary>
19884 </member> 17923 </member>
19885 <member name="T:OpenMetaverse.Packets.RemoveMuteListEntryPacket.MuteDataBlock"> 17924 <member name="M:OpenMetaverse.Assets.AssetBodypart.#ctor">
19886 <exclude /> 17925 <summary>Initializes a new instance of an AssetBodyPart object</summary>
19887 </member> 17926 </member>
19888 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket"> 17927 <member name="M:OpenMetaverse.Assets.AssetBodypart.#ctor(OpenMetaverse.UUID,System.Byte[])">
19889 <exclude /> 17928 <summary>Initializes a new instance of an AssetBodyPart object with parameters</summary>
17929 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
17930 <param name="assetData">A byte array containing the raw asset data</param>
19890 </member> 17931 </member>
19891 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.AgentDataBlock"> 17932 <member name="P:OpenMetaverse.Assets.AssetBodypart.AssetType">
19892 <exclude /> 17933 <summary>Override the base classes AssetType</summary>
19893 </member> 17934 </member>
19894 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.NotecardDataBlock"> 17935 <member name="T:OpenMetaverse.ProfileFlags">
19895 <exclude /> 17936 <summary>
17937 Avatar profile flags
17938 </summary>
19896 </member> 17939 </member>
19897 <member name="T:OpenMetaverse.Packets.CopyInventoryFromNotecardPacket.InventoryDataBlock"> 17940 <member name="T:OpenMetaverse.Avatar">
19898 <exclude /> 17941 <summary>
17942 Represents an avatar (other than your own)
17943 </summary>
19899 </member> 17944 </member>
19900 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket"> 17945 <member name="F:OpenMetaverse.Avatar.Groups">
19901 <exclude /> 17946 <summary>Groups that this avatar is a member of</summary>
19902 </member> 17947 </member>
19903 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket.AgentDataBlock"> 17948 <member name="F:OpenMetaverse.Avatar.ProfileStatistics">
19904 <exclude /> 17949 <summary>Positive and negative ratings</summary>
19905 </member> 17950 </member>
19906 <member name="T:OpenMetaverse.Packets.UpdateInventoryItemPacket.InventoryDataBlock"> 17951 <member name="F:OpenMetaverse.Avatar.ProfileProperties">
19907 <exclude /> 17952 <summary>Avatar properties including about text, profile URL, image IDs and
17953 publishing settings</summary>
19908 </member> 17954 </member>
19909 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket"> 17955 <member name="F:OpenMetaverse.Avatar.ProfileInterests">
19910 <exclude /> 17956 <summary>Avatar interests including spoken languages, skills, and "want to"
17957 choices</summary>
19911 </member> 17958 </member>
19912 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket.AgentDataBlock"> 17959 <member name="F:OpenMetaverse.Avatar.ControlFlags">
19913 <exclude /> 17960 <summary>Movement control flags for avatars. Typically not set or used by
17961 clients. To move your avatar, use Client.Self.Movement instead</summary>
19914 </member> 17962 </member>
19915 <member name="T:OpenMetaverse.Packets.UpdateCreateInventoryItemPacket.InventoryDataBlock"> 17963 <member name="F:OpenMetaverse.Avatar.VisualParameters">
19916 <exclude /> 17964 <summary>
17965 Contains the visual parameters describing the deformation of the avatar
17966 </summary>
19917 </member> 17967 </member>
19918 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket"> 17968 <member name="F:OpenMetaverse.Avatar.AppearanceVersion">
19919 <exclude /> 17969 <summary>
17970 Appearance version. Value greater than 0 indicates using server side baking
17971 </summary>
19920 </member> 17972 </member>
19921 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket.AgentDataBlock"> 17973 <member name="F:OpenMetaverse.Avatar.COFVersion">
19922 <exclude /> 17974 <summary>
17975 Version of the Current Outfit Folder that the appearance is based on
17976 </summary>
19923 </member> 17977 </member>
19924 <member name="T:OpenMetaverse.Packets.MoveInventoryItemPacket.InventoryDataBlock"> 17978 <member name="F:OpenMetaverse.Avatar.AppearanceFlags">
19925 <exclude /> 17979 <summary>
17980 Appearance flags. Introduced with server side baking, currently unused.
17981 </summary>
19926 </member> 17982 </member>
19927 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket"> 17983 <member name="F:OpenMetaverse.Avatar.Animations">
19928 <exclude /> 17984 <summary>
17985 List of current avatar animations
17986 </summary>
19929 </member> 17987 </member>
19930 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket.AgentDataBlock"> 17988 <member name="M:OpenMetaverse.Avatar.#ctor">
19931 <exclude /> 17989 <summary>
17990 Default constructor
17991 </summary>
19932 </member> 17992 </member>
19933 <member name="T:OpenMetaverse.Packets.CopyInventoryItemPacket.InventoryDataBlock"> 17993 <member name="P:OpenMetaverse.Avatar.FirstName">
19934 <exclude /> 17994 <summary>First name</summary>
19935 </member> 17995 </member>
19936 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket"> 17996 <member name="P:OpenMetaverse.Avatar.LastName">
19937 <exclude /> 17997 <summary>Last name</summary>
19938 </member> 17998 </member>
19939 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket.AgentDataBlock"> 17999 <member name="P:OpenMetaverse.Avatar.Name">
19940 <exclude /> 18000 <summary>Full name</summary>
19941 </member> 18001 </member>
19942 <member name="T:OpenMetaverse.Packets.RemoveInventoryItemPacket.InventoryDataBlock"> 18002 <member name="P:OpenMetaverse.Avatar.GroupName">
19943 <exclude /> 18003 <summary>Active group</summary>
19944 </member> 18004 </member>
19945 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket"> 18005 <member name="T:OpenMetaverse.Avatar.Statistics">
19946 <exclude /> 18006 <summary>
18007 Positive and negative ratings
18008 </summary>
19947 </member> 18009 </member>
19948 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket.AgentDataBlock"> 18010 <member name="F:OpenMetaverse.Avatar.Statistics.BehaviorPositive">
19949 <exclude /> 18011 <summary>Positive ratings for Behavior</summary>
19950 </member> 18012 </member>
19951 <member name="T:OpenMetaverse.Packets.ChangeInventoryItemFlagsPacket.InventoryDataBlock"> 18013 <member name="F:OpenMetaverse.Avatar.Statistics.BehaviorNegative">
19952 <exclude /> 18014 <summary>Negative ratings for Behavior</summary>
19953 </member> 18015 </member>
19954 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket"> 18016 <member name="F:OpenMetaverse.Avatar.Statistics.AppearancePositive">
19955 <exclude /> 18017 <summary>Positive ratings for Appearance</summary>
19956 </member> 18018 </member>
19957 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket.AgentDataBlock"> 18019 <member name="F:OpenMetaverse.Avatar.Statistics.AppearanceNegative">
19958 <exclude /> 18020 <summary>Negative ratings for Appearance</summary>
19959 </member> 18021 </member>
19960 <member name="T:OpenMetaverse.Packets.SaveAssetIntoInventoryPacket.InventoryDataBlock"> 18022 <member name="F:OpenMetaverse.Avatar.Statistics.BuildingPositive">
19961 <exclude /> 18023 <summary>Positive ratings for Building</summary>
19962 </member> 18024 </member>
19963 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket"> 18025 <member name="F:OpenMetaverse.Avatar.Statistics.BuildingNegative">
19964 <exclude /> 18026 <summary>Negative ratings for Building</summary>
19965 </member> 18027 </member>
19966 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket.AgentDataBlock"> 18028 <member name="F:OpenMetaverse.Avatar.Statistics.GivenPositive">
19967 <exclude /> 18029 <summary>Positive ratings given by this avatar</summary>
19968 </member> 18030 </member>
19969 <member name="T:OpenMetaverse.Packets.CreateInventoryFolderPacket.FolderDataBlock"> 18031 <member name="F:OpenMetaverse.Avatar.Statistics.GivenNegative">
19970 <exclude /> 18032 <summary>Negative ratings given by this avatar</summary>
19971 </member> 18033 </member>
19972 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket"> 18034 <member name="T:OpenMetaverse.Avatar.AvatarProperties">
19973 <exclude /> 18035 <summary>
18036 Avatar properties including about text, profile URL, image IDs and
18037 publishing settings
18038 </summary>
19974 </member> 18039 </member>
19975 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket.AgentDataBlock"> 18040 <member name="F:OpenMetaverse.Avatar.AvatarProperties.FirstLifeText">
19976 <exclude /> 18041 <summary>First Life about text</summary>
19977 </member> 18042 </member>
19978 <member name="T:OpenMetaverse.Packets.UpdateInventoryFolderPacket.FolderDataBlock"> 18043 <member name="F:OpenMetaverse.Avatar.AvatarProperties.FirstLifeImage">
19979 <exclude /> 18044 <summary>First Life image ID</summary>
19980 </member> 18045 </member>
19981 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket"> 18046 <member name="F:OpenMetaverse.Avatar.AvatarProperties.Partner">
19982 <exclude /> 18047 <summary></summary>
19983 </member> 18048 </member>
19984 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket.AgentDataBlock"> 18049 <member name="F:OpenMetaverse.Avatar.AvatarProperties.AboutText">
19985 <exclude /> 18050 <summary></summary>
19986 </member> 18051 </member>
19987 <member name="T:OpenMetaverse.Packets.MoveInventoryFolderPacket.InventoryDataBlock"> 18052 <member name="F:OpenMetaverse.Avatar.AvatarProperties.BornOn">
19988 <exclude /> 18053 <summary></summary>
19989 </member> 18054 </member>
19990 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket"> 18055 <member name="F:OpenMetaverse.Avatar.AvatarProperties.CharterMember">
19991 <exclude /> 18056 <summary></summary>
19992 </member> 18057 </member>
19993 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket.AgentDataBlock"> 18058 <member name="F:OpenMetaverse.Avatar.AvatarProperties.ProfileImage">
19994 <exclude /> 18059 <summary>Profile image ID</summary>
19995 </member> 18060 </member>
19996 <member name="T:OpenMetaverse.Packets.RemoveInventoryFolderPacket.FolderDataBlock"> 18061 <member name="F:OpenMetaverse.Avatar.AvatarProperties.Flags">
19997 <exclude /> 18062 <summary>Flags of the profile</summary>
19998 </member> 18063 </member>
19999 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket"> 18064 <member name="F:OpenMetaverse.Avatar.AvatarProperties.ProfileURL">
20000 <exclude /> 18065 <summary>Web URL for this profile</summary>
20001 </member> 18066 </member>
20002 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket.AgentDataBlock"> 18067 <member name="P:OpenMetaverse.Avatar.AvatarProperties.AllowPublish">
20003 <exclude /> 18068 <summary>Should this profile be published on the web</summary>
20004 </member> 18069 </member>
20005 <member name="T:OpenMetaverse.Packets.FetchInventoryDescendentsPacket.InventoryDataBlock"> 18070 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Online">
20006 <exclude /> 18071 <summary>Avatar Online Status</summary>
20007 </member> 18072 </member>
20008 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket"> 18073 <member name="P:OpenMetaverse.Avatar.AvatarProperties.MaturePublish">
20009 <exclude /> 18074 <summary>Is this a mature profile</summary>
20010 </member> 18075 </member>
20011 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.AgentDataBlock"> 18076 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Identified">
20012 <exclude /> 18077 <summary></summary>
20013 </member> 18078 </member>
20014 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.FolderDataBlock"> 18079 <member name="P:OpenMetaverse.Avatar.AvatarProperties.Transacted">
20015 <exclude /> 18080 <summary></summary>
20016 </member> 18081 </member>
20017 <member name="T:OpenMetaverse.Packets.InventoryDescendentsPacket.ItemDataBlock"> 18082 <member name="T:OpenMetaverse.Avatar.Interests">
20018 <exclude /> 18083 <summary>
18084 Avatar interests including spoken languages, skills, and "want to"
18085 choices
18086 </summary>
20019 </member> 18087 </member>
20020 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket"> 18088 <member name="F:OpenMetaverse.Avatar.Interests.LanguagesText">
20021 <exclude /> 18089 <summary>Languages profile field</summary>
20022 </member> 18090 </member>
20023 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket.AgentDataBlock"> 18091 <member name="F:OpenMetaverse.Avatar.Interests.SkillsMask">
20024 <exclude /> 18092 <summary></summary>
20025 </member> 18093 </member>
20026 <member name="T:OpenMetaverse.Packets.FetchInventoryPacket.InventoryDataBlock"> 18094 <member name="F:OpenMetaverse.Avatar.Interests.SkillsText">
20027 <exclude /> 18095 <summary></summary>
20028 </member> 18096 </member>
20029 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket"> 18097 <member name="F:OpenMetaverse.Avatar.Interests.WantToMask">
20030 <exclude /> 18098 <summary></summary>
20031 </member> 18099 </member>
20032 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket.AgentDataBlock"> 18100 <member name="F:OpenMetaverse.Avatar.Interests.WantToText">
20033 <exclude /> 18101 <summary></summary>
20034 </member> 18102 </member>
20035 <member name="T:OpenMetaverse.Packets.FetchInventoryReplyPacket.InventoryDataBlock"> 18103 <member name="T:OpenMetaverse.AvatarTextureIndex">
20036 <exclude /> 18104 <summary>
18105 Index of TextureEntry slots for avatar appearances
18106 </summary>
20037 </member> 18107 </member>
20038 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket"> 18108 <member name="T:OpenMetaverse.BakeType">
20039 <exclude /> 18109 <summary>
18110 Bake layers for avatar appearance
18111 </summary>
20040 </member> 18112 </member>
20041 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.AgentDataBlock"> 18113 <member name="T:OpenMetaverse.AppearanceFlags">
20042 <exclude /> 18114 <summary>
18115 Appearance Flags, introdued with server side baking, currently unused
18116 </summary>
20043 </member> 18117 </member>
20044 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.FolderDataBlock"> 18118 <member name="F:OpenMetaverse.AppearanceManager.MAX_CONCURRENT_DOWNLOADS">
20045 <exclude /> 18119 <summary>Maximum number of concurrent downloads for wearable assets and textures</summary>
20046 </member> 18120 </member>
20047 <member name="T:OpenMetaverse.Packets.BulkUpdateInventoryPacket.ItemDataBlock"> 18121 <member name="F:OpenMetaverse.AppearanceManager.MAX_CONCURRENT_UPLOADS">
20048 <exclude /> 18122 <summary>Maximum number of concurrent uploads for baked textures</summary>
20049 </member> 18123 </member>
20050 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket"> 18124 <member name="F:OpenMetaverse.AppearanceManager.INVENTORY_TIMEOUT">
20051 <exclude /> 18125 <summary>Timeout for fetching inventory listings</summary>
20052 </member> 18126 </member>
20053 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.AgentDataBlock"> 18127 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_TIMEOUT">
20054 <exclude /> 18128 <summary>Timeout for fetching a single wearable, or receiving a single packet response</summary>
20055 </member> 18129 </member>
20056 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.FolderDataBlock"> 18130 <member name="F:OpenMetaverse.AppearanceManager.TEXTURE_TIMEOUT">
20057 <exclude /> 18131 <summary>Timeout for fetching a single texture</summary>
20058 </member> 18132 </member>
20059 <member name="T:OpenMetaverse.Packets.RemoveInventoryObjectsPacket.ItemDataBlock"> 18133 <member name="F:OpenMetaverse.AppearanceManager.UPLOAD_TIMEOUT">
20060 <exclude /> 18134 <summary>Timeout for uploading a single baked texture</summary>
20061 </member> 18135 </member>
20062 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket"> 18136 <member name="F:OpenMetaverse.AppearanceManager.UPLOAD_RETRIES">
20063 <exclude /> 18137 <summary>Number of times to retry bake upload</summary>
20064 </member> 18138 </member>
20065 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket.AgentDataBlock"> 18139 <member name="F:OpenMetaverse.AppearanceManager.REBAKE_DELAY">
20066 <exclude /> 18140 <summary>When changing outfit, kick off rebake after
18141 20 seconds has passed since the last change</summary>
20067 </member> 18142 </member>
20068 <member name="T:OpenMetaverse.Packets.PurgeInventoryDescendentsPacket.InventoryDataBlock"> 18143 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_COUNT">
20069 <exclude /> 18144 <summary>Total number of wearables for each avatar</summary>
20070 </member> 18145 </member>
20071 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket"> 18146 <member name="F:OpenMetaverse.AppearanceManager.BAKED_TEXTURE_COUNT">
20072 <exclude /> 18147 <summary>Total number of baked textures on each avatar</summary>
20073 </member> 18148 </member>
20074 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.AgentDataBlock"> 18149 <member name="F:OpenMetaverse.AppearanceManager.WEARABLES_PER_LAYER">
20075 <exclude /> 18150 <summary>Total number of wearables per bake layer</summary>
20076 </member> 18151 </member>
20077 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.UpdateDataBlock"> 18152 <member name="F:OpenMetaverse.AppearanceManager.ATTACHMENT_ADD">
20078 <exclude /> 18153 <summary>Mask for multiple attachments</summary>
20079 </member> 18154 </member>
20080 <member name="T:OpenMetaverse.Packets.UpdateTaskInventoryPacket.InventoryDataBlock"> 18155 <member name="F:OpenMetaverse.AppearanceManager.BakeIndexToTextureIndex">
20081 <exclude /> 18156 <summary>Mapping between BakeType and AvatarTextureIndex</summary>
20082 </member> 18157 </member>
20083 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket"> 18158 <member name="F:OpenMetaverse.AppearanceManager.WEARABLE_BAKE_MAP">
20084 <exclude /> 18159 <summary>Map of what wearables are included in each bake</summary>
20085 </member> 18160 </member>
20086 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket.AgentDataBlock"> 18161 <member name="F:OpenMetaverse.AppearanceManager.BAKED_TEXTURE_HASH">
20087 <exclude /> 18162 <summary>Magic values to finalize the cache check hashes for each
18163 bake</summary>
20088 </member> 18164 </member>
20089 <member name="T:OpenMetaverse.Packets.RemoveTaskInventoryPacket.InventoryDataBlock"> 18165 <member name="F:OpenMetaverse.AppearanceManager.DEFAULT_AVATAR_TEXTURE">
20090 <exclude /> 18166 <summary>Default avatar texture, used to detect when a custom
18167 texture is not set for a face</summary>
20091 </member> 18168 </member>
20092 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket"> 18169 <member name="F:OpenMetaverse.AppearanceManager.m_AgentWearablesReply">
20093 <exclude /> 18170 <summary>The event subscribers. null if no subcribers</summary>
20094 </member> 18171 </member>
20095 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket.AgentDataBlock"> 18172 <member name="M:OpenMetaverse.AppearanceManager.OnAgentWearables(OpenMetaverse.AgentWearablesReplyEventArgs)">
20096 <exclude /> 18173 <summary>Raises the AgentWearablesReply event</summary>
18174 <param name="e">An AgentWearablesReplyEventArgs object containing the
18175 data returned from the data server</param>
20097 </member> 18176 </member>
20098 <member name="T:OpenMetaverse.Packets.MoveTaskInventoryPacket.InventoryDataBlock"> 18177 <member name="F:OpenMetaverse.AppearanceManager.m_AgentWearablesLock">
20099 <exclude /> 18178 <summary>Thread sync lock object</summary>
20100 </member> 18179 </member>
20101 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket"> 18180 <member name="F:OpenMetaverse.AppearanceManager.m_AgentCachedBakesReply">
20102 <exclude /> 18181 <summary>The event subscribers. null if no subcribers</summary>
20103 </member> 18182 </member>
20104 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket.AgentDataBlock"> 18183 <member name="M:OpenMetaverse.AppearanceManager.OnAgentCachedBakes(OpenMetaverse.AgentCachedBakesReplyEventArgs)">
20105 <exclude /> 18184 <summary>Raises the CachedBakesReply event</summary>
18185 <param name="e">An AgentCachedBakesReplyEventArgs object containing the
18186 data returned from the data server AgentCachedTextureResponse</param>
20106 </member> 18187 </member>
20107 <member name="T:OpenMetaverse.Packets.RequestTaskInventoryPacket.InventoryDataBlock"> 18188 <member name="F:OpenMetaverse.AppearanceManager.m_AgentCachedBakesLock">
20108 <exclude /> 18189 <summary>Thread sync lock object</summary>
20109 </member> 18190 </member>
20110 <member name="T:OpenMetaverse.Packets.ReplyTaskInventoryPacket"> 18191 <member name="F:OpenMetaverse.AppearanceManager.m_AppearanceSet">
20111 <exclude /> 18192 <summary>The event subscribers. null if no subcribers</summary>
20112 </member> 18193 </member>
20113 <member name="T:OpenMetaverse.Packets.ReplyTaskInventoryPacket.InventoryDataBlock"> 18194 <member name="M:OpenMetaverse.AppearanceManager.OnAppearanceSet(OpenMetaverse.AppearanceSetEventArgs)">
20114 <exclude /> 18195 <summary>Raises the AppearanceSet event</summary>
18196 <param name="e">An AppearanceSetEventArgs object indicating if the operatin was successfull</param>
20115 </member> 18197 </member>
20116 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket"> 18198 <member name="F:OpenMetaverse.AppearanceManager.m_AppearanceSetLock">
20117 <exclude /> 18199 <summary>Thread sync lock object</summary>
20118 </member> 18200 </member>
20119 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.AgentDataBlock"> 18201 <member name="F:OpenMetaverse.AppearanceManager.m_RebakeAvatarReply">
20120 <exclude /> 18202 <summary>The event subscribers. null if no subcribers</summary>
20121 </member> 18203 </member>
20122 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.AgentBlockBlock"> 18204 <member name="M:OpenMetaverse.AppearanceManager.OnRebakeAvatar(OpenMetaverse.RebakeAvatarTexturesEventArgs)">
20123 <exclude /> 18205 <summary>Raises the RebakeAvatarRequested event</summary>
18206 <param name="e">An RebakeAvatarTexturesEventArgs object containing the
18207 data returned from the data server</param>
20124 </member> 18208 </member>
20125 <member name="T:OpenMetaverse.Packets.DeRezObjectPacket.ObjectDataBlock"> 18209 <member name="F:OpenMetaverse.AppearanceManager.m_RebakeAvatarLock">
20126 <exclude /> 18210 <summary>Thread sync lock object</summary>
20127 </member> 18211 </member>
20128 <member name="T:OpenMetaverse.Packets.DeRezAckPacket"> 18212 <member name="F:OpenMetaverse.AppearanceManager.MyVisualParameters">
20129 <exclude /> 18213 <summary>Visual parameters last sent to the sim</summary>
20130 </member> 18214 </member>
20131 <member name="T:OpenMetaverse.Packets.DeRezAckPacket.TransactionDataBlock"> 18215 <member name="F:OpenMetaverse.AppearanceManager.MyTextures">
20132 <exclude /> 18216 <summary>Textures about this client sent to the sim</summary>
20133 </member> 18217 </member>
20134 <member name="T:OpenMetaverse.Packets.RezObjectPacket"> 18218 <member name="F:OpenMetaverse.AppearanceManager.Wearables">
20135 <exclude /> 18219 <summary>A cache of wearables currently being worn</summary>
20136 </member> 18220 </member>
20137 <member name="T:OpenMetaverse.Packets.RezObjectPacket.AgentDataBlock"> 18221 <member name="F:OpenMetaverse.AppearanceManager.Textures">
20138 <exclude /> 18222 <summary>A cache of textures currently being worn</summary>
20139 </member> 18223 </member>
20140 <member name="T:OpenMetaverse.Packets.RezObjectPacket.RezDataBlock"> 18224 <member name="F:OpenMetaverse.AppearanceManager.CacheCheckSerialNum">
20141 <exclude /> 18225 <summary>Incrementing serial number for AgentCachedTexture packets</summary>
20142 </member> 18226 </member>
20143 <member name="T:OpenMetaverse.Packets.RezObjectPacket.InventoryDataBlock"> 18227 <member name="F:OpenMetaverse.AppearanceManager.SetAppearanceSerialNum">
20144 <exclude /> 18228 <summary>Incrementing serial number for AgentSetAppearance packets</summary>
20145 </member> 18229 </member>
20146 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket"> 18230 <member name="F:OpenMetaverse.AppearanceManager.GotWearables">
20147 <exclude /> 18231 <summary>Indicates if WearablesRequest succeeded</summary>
20148 </member> 18232 </member>
20149 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.AgentDataBlock"> 18233 <member name="F:OpenMetaverse.AppearanceManager.AppearanceThreadRunning">
20150 <exclude /> 18234 <summary>Indicates whether or not the appearance thread is currently
18235 running, to prevent multiple appearance threads from running
18236 simultaneously</summary>
20151 </member> 18237 </member>
20152 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.RezDataBlock"> 18238 <member name="F:OpenMetaverse.AppearanceManager.Client">
20153 <exclude /> 18239 <summary>Reference to our agent</summary>
20154 </member> 18240 </member>
20155 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.NotecardDataBlock"> 18241 <member name="F:OpenMetaverse.AppearanceManager.RebakeScheduleTimer">
20156 <exclude /> 18242 <summary>
18243 Timer used for delaying rebake on changing outfit
18244 </summary>
20157 </member> 18245 </member>
20158 <member name="T:OpenMetaverse.Packets.RezObjectFromNotecardPacket.InventoryDataBlock"> 18246 <member name="F:OpenMetaverse.AppearanceManager.AppearanceThread">
20159 <exclude /> 18247 <summary>
18248 Main appearance thread
18249 </summary>
20160 </member> 18250 </member>
20161 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket"> 18251 <member name="F:OpenMetaverse.AppearanceManager.ServerBakingDone">
20162 <exclude /> 18252 <summary>
18253 Is server baking complete. It needs doing only once
18254 </summary>
20163 </member> 18255 </member>
20164 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.AgentDataBlock"> 18256 <member name="M:OpenMetaverse.AppearanceManager.#ctor(OpenMetaverse.GridClient)">
20165 <exclude /> 18257 <summary>
18258 Default constructor
18259 </summary>
18260 <param name="client">A reference to our agent</param>
20166 </member> 18261 </member>
20167 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.TransactionBlockBlock"> 18262 <member name="M:OpenMetaverse.AppearanceManager.SetPreviousAppearance">
20168 <exclude /> 18263 <summary>
18264 Obsolete method for setting appearance. This function no longer does anything.
18265 Use RequestSetAppearance() to manually start the appearance thread
18266 </summary>
20169 </member> 18267 </member>
20170 <member name="T:OpenMetaverse.Packets.AcceptFriendshipPacket.FolderDataBlock"> 18268 <member name="M:OpenMetaverse.AppearanceManager.SetPreviousAppearance(System.Boolean)">
20171 <exclude /> 18269 <summary>
18270 Obsolete method for setting appearance. This function no longer does anything.
18271 Use RequestSetAppearance() to manually start the appearance thread
18272 </summary>
18273 <param name="allowBake">Unused parameter</param>
20172 </member> 18274 </member>
20173 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket"> 18275 <member name="M:OpenMetaverse.AppearanceManager.RequestSetAppearance">
20174 <exclude /> 18276 <summary>
18277 Starts the appearance setting thread
18278 </summary>
20175 </member> 18279 </member>
20176 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket.AgentDataBlock"> 18280 <member name="M:OpenMetaverse.AppearanceManager.RequestSetAppearance(System.Boolean)">
20177 <exclude /> 18281 <summary>
18282 Starts the appearance setting thread
18283 </summary>
18284 <param name="forceRebake">True to force rebaking, otherwise false</param>
20178 </member> 18285 </member>
20179 <member name="T:OpenMetaverse.Packets.DeclineFriendshipPacket.TransactionBlockBlock"> 18286 <member name="M:OpenMetaverse.AppearanceManager.ServerBakingRegion">
20180 <exclude /> 18287 <summary>
18288 Check if current region supports server side baking
18289 </summary>
18290 <returns>True if server side baking support is detected</returns>
20181 </member> 18291 </member>
20182 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket"> 18292 <member name="M:OpenMetaverse.AppearanceManager.RequestAgentWearables">
20183 <exclude /> 18293 <summary>
18294 Ask the server what textures our agent is currently wearing
18295 </summary>
20184 </member> 18296 </member>
20185 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket.AgentDataBlock"> 18297 <member name="M:OpenMetaverse.AppearanceManager.RequestCachedBakes">
20186 <exclude /> 18298 <summary>
18299 Build hashes out of the texture assetIDs for each baking layer to
18300 ask the simulator whether it has cached copies of each baked texture
18301 </summary>
20187 </member> 18302 </member>
20188 <member name="T:OpenMetaverse.Packets.TerminateFriendshipPacket.ExBlockBlock"> 18303 <member name="M:OpenMetaverse.AppearanceManager.GetWearableAsset(OpenMetaverse.WearableType)">
20189 <exclude /> 18304 <summary>
18305 Returns the AssetID of the asset that is currently being worn in a
18306 given WearableType slot
18307 </summary>
18308 <param name="type">WearableType slot to get the AssetID for</param>
18309 <returns>The UUID of the asset being worn in the given slot, or
18310 UUID.Zero if no wearable is attached to the given slot or wearables
18311 have not been downloaded yet</returns>
20190 </member> 18312 </member>
20191 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket"> 18313 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(OpenMetaverse.InventoryItem)">
20192 <exclude /> 18314 <summary>
18315 Add a wearable to the current outfit and set appearance
18316 </summary>
18317 <param name="wearableItem">Wearable to be added to the outfit</param>
20193 </member> 18318 </member>
20194 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket.AgentDataBlock"> 18319 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(OpenMetaverse.InventoryItem,System.Boolean)">
20195 <exclude /> 18320 <summary>
18321 Add a wearable to the current outfit and set appearance
18322 </summary>
18323 <param name="wearableItem">Wearable to be added to the outfit</param>
18324 <param name="replace">Should existing item on the same point or of the same type be replaced</param>
20196 </member> 18325 </member>
20197 <member name="T:OpenMetaverse.Packets.OfferCallingCardPacket.AgentBlockBlock"> 18326 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})">
20198 <exclude /> 18327 <summary>
18328 Add a list of wearables to the current outfit and set appearance
18329 </summary>
18330 <param name="wearableItems">List of wearable inventory items to
18331 be added to the outfit</param>
18332 <param name="replace">Should existing item on the same point or of the same type be replaced</param>
20199 </member> 18333 </member>
20200 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket"> 18334 <member name="M:OpenMetaverse.AppearanceManager.AddToOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean)">
20201 <exclude /> 18335 <summary>
18336 Add a list of wearables to the current outfit and set appearance
18337 </summary>
18338 <param name="wearableItems">List of wearable inventory items to
18339 be added to the outfit</param>
18340 <param name="replace">Should existing item on the same point or of the same type be replaced</param>
20202 </member> 18341 </member>
20203 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.AgentDataBlock"> 18342 <member name="M:OpenMetaverse.AppearanceManager.RemoveFromOutfit(OpenMetaverse.InventoryItem)">
20204 <exclude /> 18343 <summary>
18344 Remove a wearable from the current outfit and set appearance
18345 </summary>
18346 <param name="wearableItem">Wearable to be removed from the outfit</param>
20205 </member> 18347 </member>
20206 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.TransactionBlockBlock"> 18348 <member name="M:OpenMetaverse.AppearanceManager.RemoveFromOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})">
20207 <exclude /> 18349 <summary>
18350 Removes a list of wearables from the current outfit and set appearance
18351 </summary>
18352 <param name="wearableItems">List of wearable inventory items to
18353 be removed from the outfit</param>
20208 </member> 18354 </member>
20209 <member name="T:OpenMetaverse.Packets.AcceptCallingCardPacket.FolderDataBlock"> 18355 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})">
20210 <exclude /> 18356 <summary>
18357 Replace the current outfit with a list of wearables and set appearance
18358 </summary>
18359 <param name="wearableItems">List of wearable inventory items that
18360 define a new outfit</param>
20211 </member> 18361 </member>
20212 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket"> 18362 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean)">
20213 <exclude /> 18363 <summary>
18364 Replace the current outfit with a list of wearables and set appearance
18365 </summary>
18366 <param name="wearableItems">List of wearable inventory items that
18367 define a new outfit</param>
18368 <param name="safe">Check if we have all body parts, set this to false only
18369 if you know what you're doing</param>
20214 </member> 18370 </member>
20215 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket.AgentDataBlock"> 18371 <member name="M:OpenMetaverse.AppearanceManager.IsItemWorn(OpenMetaverse.InventoryItem)">
20216 <exclude /> 18372 <summary>
18373 Checks if an inventory item is currently being worn
18374 </summary>
18375 <param name="item">The inventory item to check against the agent
18376 wearables</param>
18377 <returns>The WearableType slot that the item is being worn in,
18378 or WearbleType.Invalid if it is not currently being worn</returns>
20217 </member> 18379 </member>
20218 <member name="T:OpenMetaverse.Packets.DeclineCallingCardPacket.TransactionBlockBlock"> 18380 <member name="M:OpenMetaverse.AppearanceManager.GetWearables">
20219 <exclude /> 18381 <summary>
18382 Returns a copy of the agents currently worn wearables
18383 </summary>
18384 <returns>A copy of the agents currently worn wearables</returns>
18385 <remarks>Avoid calling this function multiple times as it will make
18386 a copy of all of the wearable data each time</remarks>
20220 </member> 18387 </member>
20221 <member name="T:OpenMetaverse.Packets.RezScriptPacket"> 18388 <member name="M:OpenMetaverse.AppearanceManager.WearOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryBase},System.Boolean)">
20222 <exclude /> 18389 <summary>
18390 Calls either <seealso cref="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryItem})"/> or
18391 <seealso cref="M:OpenMetaverse.AppearanceManager.AddToOutfit(OpenMetaverse.InventoryItem)"/> depending on the value of
18392 replaceItems
18393 </summary>
18394 <param name="wearables">List of wearable inventory items to add
18395 to the outfit or become a new outfit</param>
18396 <param name="replaceItems">True to replace existing items with the
18397 new list of items, false to add these items to the existing outfit</param>
20223 </member> 18398 </member>
20224 <member name="T:OpenMetaverse.Packets.RezScriptPacket.AgentDataBlock"> 18399 <member name="M:OpenMetaverse.AppearanceManager.AddAttachments(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean)">
20225 <exclude /> 18400 <summary>
18401 Adds a list of attachments to our agent
18402 </summary>
18403 <param name="attachments">A List containing the attachments to add</param>
18404 <param name="removeExistingFirst">If true, tells simulator to remove existing attachment
18405 first</param>
20226 </member> 18406 </member>
20227 <member name="T:OpenMetaverse.Packets.RezScriptPacket.UpdateBlockBlock"> 18407 <member name="M:OpenMetaverse.AppearanceManager.AddAttachments(System.Collections.Generic.List{OpenMetaverse.InventoryItem},System.Boolean,System.Boolean)">
20228 <exclude /> 18408 <summary>
18409 Adds a list of attachments to our agent
18410 </summary>
18411 <param name="attachments">A List containing the attachments to add</param>
18412 <param name="removeExistingFirst">If true, tells simulator to remove existing attachment
18413 <param name="replace">If true replace existing attachment on this attachment point, otherwise add to it (multi-attachments)</param>
18414 first</param>
20229 </member> 18415 </member>
20230 <member name="T:OpenMetaverse.Packets.RezScriptPacket.InventoryBlockBlock"> 18416 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.InventoryItem,OpenMetaverse.AttachmentPoint)">
20231 <exclude /> 18417 <summary>
18418 Attach an item to our agent at a specific attach point
18419 </summary>
18420 <param name="item">A <seealso cref="T:OpenMetaverse.InventoryItem"/> to attach</param>
18421 <param name="attachPoint">the <seealso cref="T:OpenMetaverse.AttachmentPoint"/> on the avatar
18422 to attach the item to</param>
20232 </member> 18423 </member>
20233 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket"> 18424 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.InventoryItem,OpenMetaverse.AttachmentPoint,System.Boolean)">
20234 <exclude /> 18425 <summary>
18426 Attach an item to our agent at a specific attach point
18427 </summary>
18428 <param name="item">A <seealso cref="T:OpenMetaverse.InventoryItem"/> to attach</param>
18429 <param name="attachPoint">the <seealso cref="T:OpenMetaverse.AttachmentPoint"/> on the avatar
18430 <param name="replace">If true replace existing attachment on this attachment point, otherwise add to it (multi-attachments)</param>
18431 to attach the item to</param>
20235 </member> 18432 </member>
20236 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket.AgentDataBlock"> 18433 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.Permissions,System.UInt32,OpenMetaverse.AttachmentPoint)">
20237 <exclude /> 18434 <summary>
18435 Attach an item to our agent specifying attachment details
18436 </summary>
18437 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the item to attach</param>
18438 <param name="ownerID">The <seealso cref="T:OpenMetaverse.UUID"/> attachments owner</param>
18439 <param name="name">The name of the attachment</param>
18440 <param name="description">The description of the attahment</param>
18441 <param name="perms">The <seealso cref="T:OpenMetaverse.Permissions"/> to apply when attached</param>
18442 <param name="itemFlags">The <seealso cref="T:OpenMetaverse.InventoryItemFlags"/> of the attachment</param>
18443 <param name="attachPoint">The <seealso cref="T:OpenMetaverse.AttachmentPoint"/> on the agent
18444 to attach the item to</param>
20238 </member> 18445 </member>
20239 <member name="T:OpenMetaverse.Packets.CreateInventoryItemPacket.InventoryBlockBlock"> 18446 <member name="M:OpenMetaverse.AppearanceManager.Attach(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.Permissions,System.UInt32,OpenMetaverse.AttachmentPoint,System.Boolean)">
20240 <exclude /> 18447 <summary>
18448 Attach an item to our agent specifying attachment details
18449 </summary>
18450 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the item to attach</param>
18451 <param name="ownerID">The <seealso cref="T:OpenMetaverse.UUID"/> attachments owner</param>
18452 <param name="name">The name of the attachment</param>
18453 <param name="description">The description of the attahment</param>
18454 <param name="perms">The <seealso cref="T:OpenMetaverse.Permissions"/> to apply when attached</param>
18455 <param name="itemFlags">The <seealso cref="T:OpenMetaverse.InventoryItemFlags"/> of the attachment</param>
18456 <param name="attachPoint">The <seealso cref="T:OpenMetaverse.AttachmentPoint"/> on the agent
18457 <param name="replace">If true replace existing attachment on this attachment point, otherwise add to it (multi-attachments)</param>
18458 to attach the item to</param>
20241 </member> 18459 </member>
20242 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket"> 18460 <member name="M:OpenMetaverse.AppearanceManager.Detach(OpenMetaverse.InventoryItem)">
20243 <exclude /> 18461 <summary>
18462 Detach an item from our agent using an <seealso cref="T:OpenMetaverse.InventoryItem"/> object
18463 </summary>
18464 <param name="item">An <seealso cref="T:OpenMetaverse.InventoryItem"/> object</param>
20244 </member> 18465 </member>
20245 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.AgentDataBlock"> 18466 <member name="M:OpenMetaverse.AppearanceManager.Detach(OpenMetaverse.UUID)">
20246 <exclude /> 18467 <summary>
18468 Detach an item from our agent
18469 </summary>
18470 <param name="itemID">The inventory itemID of the item to detach</param>
20247 </member> 18471 </member>
20248 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.EventDataBlock"> 18472 <member name="M:OpenMetaverse.AppearanceManager.SendAgentIsNowWearing">
20249 <exclude /> 18473 <summary>
18474 Inform the sim which wearables are part of our current outfit
18475 </summary>
20250 </member> 18476 </member>
20251 <member name="T:OpenMetaverse.Packets.CreateLandmarkForEventPacket.InventoryBlockBlock"> 18477 <member name="M:OpenMetaverse.AppearanceManager.ReplaceOutfit(System.Collections.Generic.List{OpenMetaverse.InventoryWearable})">
20252 <exclude /> 18478 <summary>
18479 Replaces the Wearables collection with a list of new wearable items
18480 </summary>
18481 <param name="wearableItems">Wearable items to replace the Wearables collection with</param>
20253 </member> 18482 </member>
20254 <member name="T:OpenMetaverse.Packets.RegionHandleRequestPacket"> 18483 <member name="M:OpenMetaverse.AppearanceManager.GetColorFromParams(System.Collections.Generic.List{OpenMetaverse.AppearanceManager.ColorParamInfo})">
20255 <exclude /> 18484 <summary>
18485 Calculates base color/tint for a specific wearable
18486 based on its params
18487 </summary>
18488 <param name="param">All the color info gathered from wearable's VisualParams
18489 passed as list of ColorParamInfo tuples</param>
18490 <returns>Base color/tint for the wearable</returns>
20256 </member> 18491 </member>
20257 <member name="T:OpenMetaverse.Packets.RegionHandleRequestPacket.RequestBlockBlock"> 18492 <member name="M:OpenMetaverse.AppearanceManager.GetAgentWearables">
20258 <exclude /> 18493 <summary>
18494 Blocking method to populate the Wearables dictionary
18495 </summary>
18496 <returns>True on success, otherwise false</returns>
20259 </member> 18497 </member>
20260 <member name="T:OpenMetaverse.Packets.RegionIDAndHandleReplyPacket"> 18498 <member name="M:OpenMetaverse.AppearanceManager.GetCachedBakes">
20261 <exclude /> 18499 <summary>
18500 Blocking method to populate the Textures array with cached bakes
18501 </summary>
18502 <returns>True on success, otherwise false</returns>
20262 </member> 18503 </member>
20263 <member name="T:OpenMetaverse.Packets.RegionIDAndHandleReplyPacket.ReplyBlockBlock"> 18504 <member name="M:OpenMetaverse.AppearanceManager.DecodeWearableParams(OpenMetaverse.AppearanceManager.WearableData)">
20264 <exclude /> 18505 <summary>
18506 Populates textures and visual params from a decoded asset
18507 </summary>
18508 <param name="wearable">Wearable to decode</param>
20265 </member> 18509 </member>
20266 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket"> 18510 <member name="M:OpenMetaverse.AppearanceManager.DownloadWearables">
20267 <exclude /> 18511 <summary>
18512 Blocking method to download and parse currently worn wearable assets
18513 </summary>
18514 <returns>True on success, otherwise false</returns>
20268 </member> 18515 </member>
20269 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket.AgentDataBlock"> 18516 <member name="M:OpenMetaverse.AppearanceManager.GetTextureDownloadList(OpenMetaverse.BakeType)">
20270 <exclude /> 18517 <summary>
18518 Get a list of all of the textures that need to be downloaded for a
18519 single bake layer
18520 </summary>
18521 <param name="bakeType">Bake layer to get texture AssetIDs for</param>
18522 <returns>A list of texture AssetIDs to download</returns>
20271 </member> 18523 </member>
20272 <member name="T:OpenMetaverse.Packets.MoneyTransferRequestPacket.MoneyDataBlock"> 18524 <member name="M:OpenMetaverse.AppearanceManager.AddTextureDownload(OpenMetaverse.AvatarTextureIndex,System.Collections.Generic.List{OpenMetaverse.UUID})">
20273 <exclude /> 18525 <summary>
18526 Helper method to lookup the TextureID for a single layer and add it
18527 to a list if it is not already present
18528 </summary>
18529 <param name="index"></param>
18530 <param name="textures"></param>
20274 </member> 18531 </member>
20275 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket"> 18532 <member name="M:OpenMetaverse.AppearanceManager.DownloadTextures(System.Collections.Generic.List{OpenMetaverse.BakeType})">
20276 <exclude /> 18533 <summary>
18534 Blocking method to download all of the textures needed for baking
18535 the given bake layers
18536 </summary>
18537 <param name="bakeLayers">A list of layers that need baking</param>
18538 <remarks>No return value is given because the baking will happen
18539 whether or not all textures are successfully downloaded</remarks>
20277 </member> 18540 </member>
20278 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket.AgentDataBlock"> 18541 <member name="M:OpenMetaverse.AppearanceManager.CreateBakes">
20279 <exclude /> 18542 <summary>
18543 Blocking method to create and upload baked textures for all of the
18544 missing bakes
18545 </summary>
18546 <returns>True on success, otherwise false</returns>
20280 </member> 18547 </member>
20281 <member name="T:OpenMetaverse.Packets.MoneyBalanceRequestPacket.MoneyDataBlock"> 18548 <member name="M:OpenMetaverse.AppearanceManager.CreateBake(OpenMetaverse.BakeType)">
20282 <exclude /> 18549 <summary>
18550 Blocking method to create and upload a baked texture for a single
18551 bake layer
18552 </summary>
18553 <param name="bakeType">Layer to bake</param>
18554 <returns>True on success, otherwise false</returns>
20283 </member> 18555 </member>
20284 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket"> 18556 <member name="M:OpenMetaverse.AppearanceManager.UploadBake(System.Byte[])">
20285 <exclude /> 18557 <summary>
18558 Blocking method to upload a baked texture
18559 </summary>
18560 <param name="textureData">Five channel JPEG2000 texture data to upload</param>
18561 <returns>UUID of the newly created asset on success, otherwise UUID.Zero</returns>
20286 </member> 18562 </member>
20287 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket.MoneyDataBlock"> 18563 <member name="M:OpenMetaverse.AppearanceManager.MakeParamValues">
20288 <exclude /> 18564 <summary>
18565 Creates a dictionary of visual param values from the downloaded wearables
18566 </summary>
18567 <returns>A dictionary of visual param indices mapping to visual param
18568 values for our agent that can be fed to the Baker class</returns>
20289 </member> 18569 </member>
20290 <member name="T:OpenMetaverse.Packets.MoneyBalanceReplyPacket.TransactionInfoBlock"> 18570 <member name="M:OpenMetaverse.AppearanceManager.UpdateAvatarAppearance">
20291 <exclude /> 18571 <summary>
18572 Initate server baking process
18573 </summary>
18574 <returns>True if the server baking was successful</returns>
20292 </member> 18575 </member>
20293 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket"> 18576 <member name="M:OpenMetaverse.AppearanceManager.GetCOF">
20294 <exclude /> 18577 <summary>
18578 Get the latest version of COF
18579 </summary>
18580 <returns>Current Outfit Folder (or null if getting the data failed)</returns>
20295 </member> 18581 </member>
20296 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.TargetBlockBlock"> 18582 <member name="M:OpenMetaverse.AppearanceManager.RequestAgentSetAppearance">
20297 <exclude /> 18583 <summary>
18584 Create an AgentSetAppearance packet from Wearables data and the
18585 Textures array and send it
18586 </summary>
20298 </member> 18587 </member>
20299 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.MoneyDataBlock"> 18588 <member name="M:OpenMetaverse.AppearanceManager.WearableTypeToAssetType(OpenMetaverse.WearableType)">
20300 <exclude /> 18589 <summary>
18590 Converts a WearableType to a bodypart or clothing WearableType
18591 </summary>
18592 <param name="type">A WearableType</param>
18593 <returns>AssetType.Bodypart or AssetType.Clothing or AssetType.Unknown</returns>
20301 </member> 18594 </member>
20302 <member name="T:OpenMetaverse.Packets.RoutedMoneyBalanceReplyPacket.TransactionInfoBlock"> 18595 <member name="M:OpenMetaverse.AppearanceManager.BakeTypeToAgentTextureIndex(OpenMetaverse.BakeType)">
20303 <exclude /> 18596 <summary>
18597 Converts a BakeType to the corresponding baked texture slot in AvatarTextureIndex
18598 </summary>
18599 <param name="index">A BakeType</param>
18600 <returns>The AvatarTextureIndex slot that holds the given BakeType</returns>
20304 </member> 18601 </member>
20305 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket"> 18602 <member name="M:OpenMetaverse.AppearanceManager.MorphLayerForBakeType(OpenMetaverse.BakeType)">
20306 <exclude /> 18603 <summary>
18604 Gives the layer number that is used for morph mask
18605 </summary>
18606 <param name="bakeType">>A BakeType</param>
18607 <returns>Which layer number as defined in BakeTypeToTextures is used for morph mask</returns>
20307 </member> 18608 </member>
20308 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket.AgentDataBlock"> 18609 <member name="M:OpenMetaverse.AppearanceManager.BakeTypeToTextures(OpenMetaverse.BakeType)">
20309 <exclude /> 18610 <summary>
18611 Converts a BakeType to a list of the texture slots that make up that bake
18612 </summary>
18613 <param name="bakeType">A BakeType</param>
18614 <returns>A list of texture slots that are inputs for the given bake</returns>
20310 </member> 18615 </member>
20311 <member name="T:OpenMetaverse.Packets.ActivateGesturesPacket.DataBlock"> 18616 <member name="E:OpenMetaverse.AppearanceManager.AgentWearablesReply">
20312 <exclude /> 18617 <summary>Triggered when an AgentWearablesUpdate packet is received,
18618 telling us what our avatar is currently wearing
18619 <see cref="M:OpenMetaverse.AppearanceManager.RequestAgentWearables"/> request.</summary>
20313 </member> 18620 </member>
20314 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket"> 18621 <member name="E:OpenMetaverse.AppearanceManager.CachedBakesReply">
20315 <exclude /> 18622 <summary>Raised when an AgentCachedTextureResponse packet is
18623 received, giving a list of cached bakes that were found on the
18624 simulator
18625 <seealso cref="M:OpenMetaverse.AppearanceManager.RequestCachedBakes"/> request.</summary>
20316 </member> 18626 </member>
20317 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket.AgentDataBlock"> 18627 <member name="E:OpenMetaverse.AppearanceManager.AppearanceSet">
20318 <exclude /> 18628 <summary>
18629 Raised when appearance data is sent to the simulator, also indicates
18630 the main appearance thread is finished.
18631 </summary>
18632 <seealso cref="M:OpenMetaverse.AppearanceManager.RequestAgentSetAppearance"/> request.
20319 </member> 18633 </member>
20320 <member name="T:OpenMetaverse.Packets.DeactivateGesturesPacket.DataBlock"> 18634 <member name="E:OpenMetaverse.AppearanceManager.RebakeAvatarRequested">
20321 <exclude /> 18635 <summary>
18636 Triggered when the simulator requests the agent rebake its appearance.
18637 </summary>
18638 <seealso cref="!:RebakeAvatarRequest"/>
20322 </member> 18639 </member>
20323 <member name="T:OpenMetaverse.Packets.MuteListUpdatePacket"> 18640 <member name="P:OpenMetaverse.AppearanceManager.ManagerBusy">
20324 <exclude /> 18641 <summary>
18642 Returns true if AppearanceManager is busy and trying to set or change appearance will fail
18643 </summary>
20325 </member> 18644 </member>
20326 <member name="T:OpenMetaverse.Packets.MuteListUpdatePacket.MuteDataBlock"> 18645 <member name="T:OpenMetaverse.AppearanceManager.WearableData">
20327 <exclude /> 18646 <summary>
18647 Contains information about a wearable inventory item
18648 </summary>
20328 </member> 18649 </member>
20329 <member name="T:OpenMetaverse.Packets.UseCachedMuteListPacket"> 18650 <member name="F:OpenMetaverse.AppearanceManager.WearableData.ItemID">
20330 <exclude /> 18651 <summary>Inventory ItemID of the wearable</summary>
20331 </member> 18652 </member>
20332 <member name="T:OpenMetaverse.Packets.UseCachedMuteListPacket.AgentDataBlock"> 18653 <member name="F:OpenMetaverse.AppearanceManager.WearableData.AssetID">
20333 <exclude /> 18654 <summary>AssetID of the wearable asset</summary>
20334 </member> 18655 </member>
20335 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket"> 18656 <member name="F:OpenMetaverse.AppearanceManager.WearableData.WearableType">
20336 <exclude /> 18657 <summary>WearableType of the wearable</summary>
20337 </member> 18658 </member>
20338 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket.AgentDataBlock"> 18659 <member name="F:OpenMetaverse.AppearanceManager.WearableData.AssetType">
20339 <exclude /> 18660 <summary>AssetType of the wearable</summary>
20340 </member> 18661 </member>
20341 <member name="T:OpenMetaverse.Packets.GrantUserRightsPacket.RightsBlock"> 18662 <member name="F:OpenMetaverse.AppearanceManager.WearableData.Asset">
20342 <exclude /> 18663 <summary>Asset data for the wearable</summary>
20343 </member> 18664 </member>
20344 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket"> 18665 <member name="T:OpenMetaverse.AppearanceManager.ColorParamInfo">
20345 <exclude /> 18666 <summary>
18667 Data collected from visual params for each wearable
18668 needed for the calculation of the color
18669 </summary>
20346 </member> 18670 </member>
20347 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket.AgentDataBlock"> 18671 <member name="T:OpenMetaverse.AppearanceManager.TextureData">
20348 <exclude /> 18672 <summary>
18673 Holds a texture assetID and the data needed to bake this layer into
18674 an outfit texture. Used to keep track of currently worn textures
18675 and baking data
18676 </summary>
20349 </member> 18677 </member>
20350 <member name="T:OpenMetaverse.Packets.ChangeUserRightsPacket.RightsBlock"> 18678 <member name="F:OpenMetaverse.AppearanceManager.TextureData.TextureID">
20351 <exclude /> 18679 <summary>A texture AssetID</summary>
20352 </member> 18680 </member>
20353 <member name="T:OpenMetaverse.Packets.OnlineNotificationPacket"> 18681 <member name="F:OpenMetaverse.AppearanceManager.TextureData.Texture">
20354 <exclude /> 18682 <summary>Asset data for the texture</summary>
20355 </member> 18683 </member>
20356 <member name="T:OpenMetaverse.Packets.OnlineNotificationPacket.AgentBlockBlock"> 18684 <member name="F:OpenMetaverse.AppearanceManager.TextureData.AlphaMasks">
20357 <exclude /> 18685 <summary>Collection of alpha masks that needs applying</summary>
20358 </member> 18686 </member>
20359 <member name="T:OpenMetaverse.Packets.OfflineNotificationPacket"> 18687 <member name="F:OpenMetaverse.AppearanceManager.TextureData.Color">
20360 <exclude /> 18688 <summary>Tint that should be applied to the texture</summary>
20361 </member> 18689 </member>
20362 <member name="T:OpenMetaverse.Packets.OfflineNotificationPacket.AgentBlockBlock"> 18690 <member name="F:OpenMetaverse.AppearanceManager.TextureData.TextureIndex">
20363 <exclude /> 18691 <summary>Where on avatar does this texture belong</summary>
20364 </member> 18692 </member>
20365 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket"> 18693 <member name="T:OpenMetaverse.AgentWearablesReplyEventArgs">
20366 <exclude /> 18694 <summary>Contains the Event data returned from the data server from an AgentWearablesRequest</summary>
20367 </member> 18695 </member>
20368 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket.AgentDataBlock"> 18696 <member name="M:OpenMetaverse.AgentWearablesReplyEventArgs.#ctor">
20369 <exclude /> 18697 <summary>Construct a new instance of the AgentWearablesReplyEventArgs class</summary>
20370 </member> 18698 </member>
20371 <member name="T:OpenMetaverse.Packets.SetStartLocationRequestPacket.StartLocationDataBlock"> 18699 <member name="T:OpenMetaverse.AgentCachedBakesReplyEventArgs">
20372 <exclude /> 18700 <summary>Contains the Event data returned from the data server from an AgentCachedTextureResponse</summary>
20373 </member> 18701 </member>
20374 <member name="T:OpenMetaverse.Packets.AssetUploadRequestPacket"> 18702 <member name="M:OpenMetaverse.AgentCachedBakesReplyEventArgs.#ctor">
20375 <exclude /> 18703 <summary>Construct a new instance of the AgentCachedBakesReplyEventArgs class</summary>
20376 </member> 18704 </member>
20377 <member name="T:OpenMetaverse.Packets.AssetUploadRequestPacket.AssetBlockBlock"> 18705 <member name="T:OpenMetaverse.AppearanceSetEventArgs">
20378 <exclude /> 18706 <summary>Contains the Event data returned from an AppearanceSetRequest</summary>
20379 </member> 18707 </member>
20380 <member name="T:OpenMetaverse.Packets.AssetUploadCompletePacket"> 18708 <member name="M:OpenMetaverse.AppearanceSetEventArgs.#ctor(System.Boolean)">
20381 <exclude /> 18709 <summary>
18710 Triggered when appearance data is sent to the sim and
18711 the main appearance thread is done.</summary>
18712 <param name="success">Indicates whether appearance setting was successful</param>
20382 </member> 18713 </member>
20383 <member name="T:OpenMetaverse.Packets.AssetUploadCompletePacket.AssetBlockBlock"> 18714 <member name="P:OpenMetaverse.AppearanceSetEventArgs.Success">
20384 <exclude /> 18715 <summary>Indicates whether appearance setting was successful</summary>
20385 </member> 18716 </member>
20386 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket"> 18717 <member name="T:OpenMetaverse.RebakeAvatarTexturesEventArgs">
20387 <exclude /> 18718 <summary>Contains the Event data returned from the data server from an RebakeAvatarTextures</summary>
20388 </member> 18719 </member>
20389 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket.AgentDataBlock"> 18720 <member name="M:OpenMetaverse.RebakeAvatarTexturesEventArgs.#ctor(OpenMetaverse.UUID)">
20390 <exclude /> 18721 <summary>
18722 Triggered when the simulator sends a request for this agent to rebake
18723 its appearance
18724 </summary>
18725 <param name="textureID">The ID of the Texture Layer to bake</param>
20391 </member> 18726 </member>
20392 <member name="T:OpenMetaverse.Packets.CreateGroupRequestPacket.GroupDataBlock"> 18727 <member name="P:OpenMetaverse.RebakeAvatarTexturesEventArgs.TextureID">
20393 <exclude /> 18728 <summary>The ID of the Texture Layer to bake</summary>
20394 </member> 18729 </member>
20395 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket"> 18730 <member name="T:OpenMetaverse.Assets.AssetAnimation">
20396 <exclude /> 18731 <summary>
18732 Represents an Animation
18733 </summary>
20397 </member> 18734 </member>
20398 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket.AgentDataBlock"> 18735 <member name="M:OpenMetaverse.Assets.AssetAnimation.#ctor">
20399 <exclude /> 18736 <summary>Default Constructor</summary>
20400 </member> 18737 </member>
20401 <member name="T:OpenMetaverse.Packets.CreateGroupReplyPacket.ReplyDataBlock"> 18738 <member name="M:OpenMetaverse.Assets.AssetAnimation.#ctor(OpenMetaverse.UUID,System.Byte[])">
20402 <exclude /> 18739 <summary>
18740 Construct an Asset object of type Animation
18741 </summary>
18742 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
18743 <param name="assetData">A byte array containing the raw asset data</param>
20403 </member> 18744 </member>
20404 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket"> 18745 <member name="P:OpenMetaverse.Assets.AssetAnimation.AssetType">
20405 <exclude /> 18746 <summary>Override the base classes AssetType</summary>
20406 </member> 18747 </member>
20407 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket.AgentDataBlock"> 18748 <member name="T:OpenMetaverse.DictionaryEventAction">
20408 <exclude /> 18749 <summary>
18750
18751 </summary>
20409 </member> 18752 </member>
20410 <member name="T:OpenMetaverse.Packets.UpdateGroupInfoPacket.GroupDataBlock"> 18753 <member name="F:OpenMetaverse.DictionaryEventAction.Add">
20411 <exclude /> 18754 <summary>
18755
18756 </summary>
20412 </member> 18757 </member>
20413 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket"> 18758 <member name="F:OpenMetaverse.DictionaryEventAction.Remove">
20414 <exclude /> 18759 <summary>
18760
18761 </summary>
20415 </member> 18762 </member>
20416 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket.AgentDataBlock"> 18763 <member name="F:OpenMetaverse.DictionaryEventAction.Change">
20417 <exclude /> 18764 <summary>
18765
18766 </summary>
20418 </member> 18767 </member>
20419 <member name="T:OpenMetaverse.Packets.GroupRoleChangesPacket.RoleChangeBlock"> 18768 <member name="T:OpenMetaverse.DictionaryChangeCallback">
20420 <exclude /> 18769 <summary>
18770
18771 </summary>
18772 <param name="action"></param>
18773 <param name="entry"></param>
20421 </member> 18774 </member>
20422 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket"> 18775 <member name="T:OpenMetaverse.ObservableDictionary`2">
20423 <exclude /> 18776 <summary>
18777 The ObservableDictionary class is used for storing key/value pairs. It has methods for firing
18778 events to subscribers when items are added, removed, or changed.
18779 </summary>
18780 <typeparam name="TKey">Key <see langword="Tkey"/></typeparam>
18781 <typeparam name="TValue">Value <see langword="TValue"/></typeparam>
20424 </member> 18782 </member>
20425 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket.AgentDataBlock"> 18783 <member name="F:OpenMetaverse.ObservableDictionary`2.Delegates">
20426 <exclude /> 18784 <summary>
18785 A dictionary of callbacks to fire when specified action occurs
18786 </summary>
20427 </member> 18787 </member>
20428 <member name="T:OpenMetaverse.Packets.JoinGroupRequestPacket.GroupDataBlock"> 18788 <member name="M:OpenMetaverse.ObservableDictionary`2.AddDelegate(OpenMetaverse.DictionaryEventAction,OpenMetaverse.DictionaryChangeCallback)">
20429 <exclude /> 18789 <summary>
18790 Register a callback to be fired when an action occurs
18791 </summary>
18792 <param name="action">The action</param>
18793 <param name="callback">The callback to fire</param>
20430 </member> 18794 </member>
20431 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket"> 18795 <member name="M:OpenMetaverse.ObservableDictionary`2.RemoveDelegate(OpenMetaverse.DictionaryEventAction,OpenMetaverse.DictionaryChangeCallback)">
20432 <exclude /> 18796 <summary>
18797 Unregister a callback
18798 </summary>
18799 <param name="action">The action</param>
18800 <param name="callback">The callback to fire</param>
20433 </member> 18801 </member>
20434 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket.AgentDataBlock"> 18802 <member name="M:OpenMetaverse.ObservableDictionary`2.FireChangeEvent(OpenMetaverse.DictionaryEventAction,System.Collections.DictionaryEntry)">
20435 <exclude /> 18803 <summary>
18804
18805 </summary>
18806 <param name="action"></param>
18807 <param name="entry"></param>
20436 </member> 18808 </member>
20437 <member name="T:OpenMetaverse.Packets.JoinGroupReplyPacket.GroupDataBlock"> 18809 <member name="F:OpenMetaverse.ObservableDictionary`2.Dictionary">
20438 <exclude /> 18810 <summary>Internal dictionary that this class wraps around. Do not
18811 modify or enumerate the contents of this dictionary without locking</summary>
20439 </member> 18812 </member>
20440 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket"> 18813 <member name="M:OpenMetaverse.ObservableDictionary`2.#ctor">
20441 <exclude /> 18814 <summary>
18815 Initializes a new instance of the <seealso cref="T:ObservableDictionary"/> Class
18816 with the specified key/value, has the default initial capacity.
18817 </summary>
18818 <example>
18819 <code>
18820 // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value.
18821 public ObservableDictionary&lt;string, int&gt; testDict = new ObservableDictionary&lt;string, int&gt;();
18822 </code>
18823 </example>
20442 </member> 18824 </member>
20443 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.AgentDataBlock"> 18825 <member name="M:OpenMetaverse.ObservableDictionary`2.#ctor(System.Int32)">
20444 <exclude /> 18826 <summary>
18827 Initializes a new instance of the <seealso cref="T:OpenMetaverse.ObservableDictionary"/> Class
18828 with the specified key/value, With its initial capacity specified.
18829 </summary>
18830 <param name="capacity">Initial size of dictionary</param>
18831 <example>
18832 <code>
18833 // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
18834 // initially allocated room for 10 entries.
18835 public ObservableDictionary&lt;string, int&gt; testDict = new ObservableDictionary&lt;string, int&gt;(10);
18836 </code>
18837 </example>
20445 </member> 18838 </member>
20446 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.GroupDataBlock"> 18839 <member name="M:OpenMetaverse.ObservableDictionary`2.TryGetValue(`0,`1@)">
20447 <exclude /> 18840 <summary>
18841 Try to get entry from the <seealso cref="!:ObservableDictionary"/> with specified key
18842 </summary>
18843 <param name="key">Key to use for lookup</param>
18844 <param name="value">Value returned</param>
18845 <returns><see langword="true"/> if specified key exists, <see langword="false"/> if not found</returns>
18846 <example>
18847 <code>
18848 // find your avatar using the Simulator.ObjectsAvatars ObservableDictionary:
18849 Avatar av;
18850 if (Client.Network.CurrentSim.ObjectsAvatars.TryGetValue(Client.Self.AgentID, out av))
18851 Console.WriteLine("Found Avatar {0}", av.Name);
18852 </code>
18853 <seealso cref="F:OpenMetaverse.Simulator.ObjectsAvatars"/>
18854 </example>
20448 </member> 18855 </member>
20449 <member name="T:OpenMetaverse.Packets.EjectGroupMemberRequestPacket.EjectDataBlock"> 18856 <member name="M:OpenMetaverse.ObservableDictionary`2.Find(System.Predicate{`1})">
20450 <exclude /> 18857 <summary>
18858 Finds the specified match.
18859 </summary>
18860 <param name="match">The match.</param>
18861 <returns>Matched value</returns>
18862 <example>
18863 <code>
18864 // use a delegate to find a prim in the ObjectsPrimitives ObservableDictionary
18865 // with the ID 95683496
18866 uint findID = 95683496;
18867 Primitive findPrim = sim.ObjectsPrimitives.Find(
18868 delegate(Primitive prim) { return prim.ID == findID; });
18869 </code>
18870 </example>
20451 </member> 18871 </member>
20452 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket"> 18872 <member name="M:OpenMetaverse.ObservableDictionary`2.FindAll(System.Predicate{`1})">
20453 <exclude /> 18873 <summary>Find All items in an <seealso cref="T:ObservableDictionary"/></summary>
18874 <param name="match">return matching items.</param>
18875 <returns>a <seealso cref="T:System.Collections.Generic.List"/> containing found items.</returns>
18876 <example>
18877 Find All prims within 20 meters and store them in a List
18878 <code>
18879 int radius = 20;
18880 List&lt;Primitive&gt; prims = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
18881 delegate(Primitive prim) {
18882 Vector3 pos = prim.Position;
18883 return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
18884 }
18885 );
18886 </code>
18887 </example>
20454 </member> 18888 </member>
20455 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.AgentDataBlock"> 18889 <member name="M:OpenMetaverse.ObservableDictionary`2.FindAll(System.Predicate{`0})">
20456 <exclude /> 18890 <summary>Find All items in an <seealso cref="T:ObservableDictionary"/></summary>
18891 <param name="match">return matching keys.</param>
18892 <returns>a <seealso cref="T:System.Collections.Generic.List"/> containing found keys.</returns>
18893 <example>
18894 Find All keys which also exist in another dictionary
18895 <code>
18896 List&lt;UUID&gt; matches = myDict.FindAll(
18897 delegate(UUID id) {
18898 return myOtherDict.ContainsKey(id);
18899 }
18900 );
18901 </code>
18902 </example>
20457 </member> 18903 </member>
20458 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.GroupDataBlock"> 18904 <member name="M:OpenMetaverse.ObservableDictionary`2.ContainsKey(`0)">
20459 <exclude /> 18905 <summary>Check if Key exists in Dictionary</summary>
18906 <param name="key">Key to check for</param>
18907 <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
20460 </member> 18908 </member>
20461 <member name="T:OpenMetaverse.Packets.EjectGroupMemberReplyPacket.EjectDataBlock"> 18909 <member name="M:OpenMetaverse.ObservableDictionary`2.ContainsValue(`1)">
20462 <exclude /> 18910 <summary>Check if Value exists in Dictionary</summary>
18911 <param name="value">Value to check for</param>
18912 <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
20463 </member> 18913 </member>
20464 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket"> 18914 <member name="M:OpenMetaverse.ObservableDictionary`2.Add(`0,`1)">
20465 <exclude /> 18915 <summary>
18916 Adds the specified key to the dictionary, dictionary locking is not performed,
18917 <see cref="!:SafeAdd"/>
18918 </summary>
18919 <param name="key">The key</param>
18920 <param name="value">The value</param>
20466 </member> 18921 </member>
20467 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket.AgentDataBlock"> 18922 <member name="M:OpenMetaverse.ObservableDictionary`2.Remove(`0)">
20468 <exclude /> 18923 <summary>
18924 Removes the specified key, dictionary locking is not performed
18925 </summary>
18926 <param name="key">The key.</param>
18927 <returns><see langword="true"/> if successful, <see langword="false"/> otherwise</returns>
20469 </member> 18928 </member>
20470 <member name="T:OpenMetaverse.Packets.LeaveGroupRequestPacket.GroupDataBlock"> 18929 <member name="M:OpenMetaverse.ObservableDictionary`2.Clear">
20471 <exclude /> 18930 <summary>
18931 Clear the contents of the dictionary
18932 </summary>
20472 </member> 18933 </member>
20473 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket"> 18934 <member name="M:OpenMetaverse.ObservableDictionary`2.GetEnumerator">
20474 <exclude /> 18935 <summary>
18936 Enumerator for iterating dictionary entries
18937 </summary>
18938 <returns></returns>
20475 </member> 18939 </member>
20476 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket.AgentDataBlock"> 18940 <member name="P:OpenMetaverse.ObservableDictionary`2.Count">
20477 <exclude /> 18941 <summary>
18942 Gets the number of Key/Value pairs contained in the <seealso cref="T:ObservableDictionary"/>
18943 </summary>
20478 </member> 18944 </member>
20479 <member name="T:OpenMetaverse.Packets.LeaveGroupReplyPacket.GroupDataBlock"> 18945 <member name="P:OpenMetaverse.ObservableDictionary`2.Item(`0)">
20480 <exclude /> 18946 <summary>
18947 Indexer for the dictionary
18948 </summary>
18949 <param name="key">The key</param>
18950 <returns>The value</returns>
20481 </member> 18951 </member>
20482 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket"> 18952 <member name="M:OpenMetaverse.InventoryNode.#ctor">
20483 <exclude /> 18953 <summary>
18954
18955 </summary>
20484 </member> 18956 </member>
20485 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.AgentDataBlock"> 18957 <member name="M:OpenMetaverse.InventoryNode.#ctor(OpenMetaverse.InventoryBase)">
20486 <exclude /> 18958 <summary>
18959
18960 </summary>
18961 <param name="data"></param>
20487 </member> 18962 </member>
20488 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.GroupDataBlock"> 18963 <member name="M:OpenMetaverse.InventoryNode.#ctor(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryNode)">
20489 <exclude /> 18964 <summary>
18965 De-serialization constructor for the InventoryNode Class
18966 </summary>
20490 </member> 18967 </member>
20491 <member name="T:OpenMetaverse.Packets.InviteGroupRequestPacket.InviteDataBlock"> 18968 <member name="M:OpenMetaverse.InventoryNode.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
20492 <exclude /> 18969 <summary>
18970 Serialization handler for the InventoryNode Class
18971 </summary>
20493 </member> 18972 </member>
20494 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket"> 18973 <member name="M:OpenMetaverse.InventoryNode.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
20495 <exclude /> 18974 <summary>
18975 De-serialization handler for the InventoryNode Class
18976 </summary>
20496 </member> 18977 </member>
20497 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket.AgentDataBlock"> 18978 <member name="M:OpenMetaverse.InventoryNode.ToString">
20498 <exclude /> 18979 <summary>
18980
18981 </summary>
18982 <returns></returns>
20499 </member> 18983 </member>
20500 <member name="T:OpenMetaverse.Packets.GroupProfileRequestPacket.GroupDataBlock"> 18984 <member name="P:OpenMetaverse.InventoryNode.Data">
20501 <exclude /> 18985 <summary></summary>
20502 </member> 18986 </member>
20503 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket"> 18987 <member name="P:OpenMetaverse.InventoryNode.Parent">
20504 <exclude /> 18988 <summary></summary>
20505 </member> 18989 </member>
20506 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket.AgentDataBlock"> 18990 <member name="P:OpenMetaverse.InventoryNode.ParentID">
20507 <exclude /> 18991 <summary></summary>
20508 </member> 18992 </member>
20509 <member name="T:OpenMetaverse.Packets.GroupProfileReplyPacket.GroupDataBlock"> 18993 <member name="P:OpenMetaverse.InventoryNode.Nodes">
20510 <exclude /> 18994 <summary></summary>
20511 </member> 18995 </member>
20512 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket"> 18996 <member name="P:OpenMetaverse.InventoryNode.NeedsUpdate">
20513 <exclude /> 18997 <summary>
18998 For inventory folder nodes specifies weather the folder needs to be
18999 refreshed from the server
19000 </summary>
20514 </member> 19001 </member>
20515 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket.AgentDataBlock"> 19002 <member name="T:OpenMetaverse.Imaging.LoadTGAClass">
20516 <exclude /> 19003 <summary>
19004 Capability to load TGAs to Bitmap
19005 </summary>
20517 </member> 19006 </member>
20518 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryRequestPacket.MoneyDataBlock"> 19007 <member name="T:OpenMetaverse.Assets.AssetNotecard">
20519 <exclude /> 19008 <summary>
19009 Represents a string of characters encoded with specific formatting properties
19010 </summary>
20520 </member> 19011 </member>
20521 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket"> 19012 <member name="F:OpenMetaverse.Assets.AssetNotecard.BodyText">
20522 <exclude /> 19013 <summary>A text string containing main text of the notecard</summary>
20523 </member> 19014 </member>
20524 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket.AgentDataBlock"> 19015 <member name="F:OpenMetaverse.Assets.AssetNotecard.EmbeddedItems">
20525 <exclude /> 19016 <summary>List of <see cref="T:OpenMetaverse.InventoryItem"/>s embedded on the notecard</summary>
20526 </member> 19017 </member>
20527 <member name="T:OpenMetaverse.Packets.GroupAccountSummaryReplyPacket.MoneyDataBlock"> 19018 <member name="M:OpenMetaverse.Assets.AssetNotecard.#ctor">
20528 <exclude /> 19019 <summary>Construct an Asset of type Notecard</summary>
20529 </member> 19020 </member>
20530 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket"> 19021 <member name="M:OpenMetaverse.Assets.AssetNotecard.#ctor(OpenMetaverse.UUID,System.Byte[])">
20531 <exclude /> 19022 <summary>
19023 Construct an Asset object of type Notecard
19024 </summary>
19025 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
19026 <param name="assetData">A byte array containing the raw asset data</param>
20532 </member> 19027 </member>
20533 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket.AgentDataBlock"> 19028 <member name="M:OpenMetaverse.Assets.AssetNotecard.Encode">
20534 <exclude /> 19029 <summary>
19030 Encode the raw contents of a string with the specific Linden Text properties
19031 </summary>
20535 </member> 19032 </member>
20536 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsRequestPacket.MoneyDataBlock"> 19033 <member name="M:OpenMetaverse.Assets.AssetNotecard.Decode">
20537 <exclude /> 19034 <summary>
19035 Decode the raw asset data including the Linden Text properties
19036 </summary>
19037 <returns>true if the AssetData was successfully decoded</returns>
20538 </member> 19038 </member>
20539 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket"> 19039 <member name="P:OpenMetaverse.Assets.AssetNotecard.AssetType">
20540 <exclude /> 19040 <summary>Override the base classes AssetType</summary>
20541 </member> 19041 </member>
20542 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.AgentDataBlock"> 19042 <member name="T:OpenMetaverse.RegionFlags">
20543 <exclude /> 19043 <summary>
19044 Simulator (region) properties
19045 </summary>
20544 </member> 19046 </member>
20545 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.MoneyDataBlock"> 19047 <member name="F:OpenMetaverse.RegionFlags.None">
20546 <exclude /> 19048 <summary>No flags set</summary>
20547 </member> 19049 </member>
20548 <member name="T:OpenMetaverse.Packets.GroupAccountDetailsReplyPacket.HistoryDataBlock"> 19050 <member name="F:OpenMetaverse.RegionFlags.AllowDamage">
20549 <exclude /> 19051 <summary>Agents can take damage and be killed</summary>
20550 </member> 19052 </member>
20551 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket"> 19053 <member name="F:OpenMetaverse.RegionFlags.AllowLandmark">
20552 <exclude /> 19054 <summary>Landmarks can be created here</summary>
20553 </member> 19055 </member>
20554 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket.AgentDataBlock"> 19056 <member name="F:OpenMetaverse.RegionFlags.AllowSetHome">
20555 <exclude /> 19057 <summary>Home position can be set in this sim</summary>
20556 </member> 19058 </member>
20557 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsRequestPacket.MoneyDataBlock"> 19059 <member name="F:OpenMetaverse.RegionFlags.ResetHomeOnTeleport">
20558 <exclude /> 19060 <summary>Home position is reset when an agent teleports away</summary>
20559 </member> 19061 </member>
20560 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket"> 19062 <member name="F:OpenMetaverse.RegionFlags.SunFixed">
20561 <exclude /> 19063 <summary>Sun does not move</summary>
20562 </member> 19064 </member>
20563 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.AgentDataBlock"> 19065 <member name="F:OpenMetaverse.RegionFlags.TaxFree">
20564 <exclude /> 19066 <summary>No object, land, etc. taxes</summary>
20565 </member> 19067 </member>
20566 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.MoneyDataBlock"> 19068 <member name="F:OpenMetaverse.RegionFlags.BlockTerraform">
20567 <exclude /> 19069 <summary>Disable heightmap alterations (agents can still plant
19070 foliage)</summary>
20568 </member> 19071 </member>
20569 <member name="T:OpenMetaverse.Packets.GroupAccountTransactionsReplyPacket.HistoryDataBlock"> 19072 <member name="F:OpenMetaverse.RegionFlags.BlockLandResell">
20570 <exclude /> 19073 <summary>Land cannot be released, sold, or purchased</summary>
20571 </member> 19074 </member>
20572 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket"> 19075 <member name="F:OpenMetaverse.RegionFlags.Sandbox">
20573 <exclude /> 19076 <summary>All content is wiped nightly</summary>
20574 </member> 19077 </member>
20575 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.AgentDataBlock"> 19078 <member name="F:OpenMetaverse.RegionFlags.NullLayer">
20576 <exclude /> 19079 <summary>Unknown: Related to the availability of an overview world map tile.(Think mainland images when zoomed out.)</summary>
20577 </member> 19080 </member>
20578 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.GroupDataBlock"> 19081 <member name="F:OpenMetaverse.RegionFlags.SkipAgentAction">
20579 <exclude /> 19082 <summary>Unknown: Related to region debug flags. Possibly to skip processing of agent interaction with world. </summary>
20580 </member> 19083 </member>
20581 <member name="T:OpenMetaverse.Packets.GroupActiveProposalsRequestPacket.TransactionDataBlock"> 19084 <member name="F:OpenMetaverse.RegionFlags.SkipUpdateInterestList">
20582 <exclude /> 19085 <summary>Region does not update agent prim interest lists. Internal debugging option.</summary>
20583 </member> 19086 </member>
20584 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket"> 19087 <member name="F:OpenMetaverse.RegionFlags.SkipCollisions">
20585 <exclude /> 19088 <summary>No collision detection for non-agent objects</summary>
20586 </member> 19089 </member>
20587 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.AgentDataBlock"> 19090 <member name="F:OpenMetaverse.RegionFlags.SkipScripts">
20588 <exclude /> 19091 <summary>No scripts are ran</summary>
20589 </member> 19092 </member>
20590 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.TransactionDataBlock"> 19093 <member name="F:OpenMetaverse.RegionFlags.SkipPhysics">
20591 <exclude /> 19094 <summary>All physics processing is turned off</summary>
20592 </member> 19095 </member>
20593 <member name="T:OpenMetaverse.Packets.GroupActiveProposalItemReplyPacket.ProposalDataBlock"> 19096 <member name="F:OpenMetaverse.RegionFlags.ExternallyVisible">
20594 <exclude /> 19097 <summary>Region can be seen from other regions on world map. (Legacy world map option?) </summary>
20595 </member> 19098 </member>
20596 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket"> 19099 <member name="F:OpenMetaverse.RegionFlags.MainlandVisible">
20597 <exclude /> 19100 <summary>Region can be seen from mainland on world map. (Legacy world map option?) </summary>
20598 </member> 19101 </member>
20599 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.AgentDataBlock"> 19102 <member name="F:OpenMetaverse.RegionFlags.PublicAllowed">
20600 <exclude /> 19103 <summary>Agents not explicitly on the access list can visit the region. </summary>
20601 </member> 19104 </member>
20602 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.GroupDataBlock"> 19105 <member name="F:OpenMetaverse.RegionFlags.BlockDwell">
20603 <exclude /> 19106 <summary>Traffic calculations are not run across entire region, overrides parcel settings. </summary>
20604 </member> 19107 </member>
20605 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryRequestPacket.TransactionDataBlock"> 19108 <member name="F:OpenMetaverse.RegionFlags.NoFly">
20606 <exclude /> 19109 <summary>Flight is disabled (not currently enforced by the sim)</summary>
20607 </member> 19110 </member>
20608 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket"> 19111 <member name="F:OpenMetaverse.RegionFlags.AllowDirectTeleport">
20609 <exclude /> 19112 <summary>Allow direct (p2p) teleporting</summary>
20610 </member> 19113 </member>
20611 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.AgentDataBlock"> 19114 <member name="F:OpenMetaverse.RegionFlags.EstateSkipScripts">
20612 <exclude /> 19115 <summary>Estate owner has temporarily disabled scripting</summary>
20613 </member> 19116 </member>
20614 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.TransactionDataBlock"> 19117 <member name="F:OpenMetaverse.RegionFlags.RestrictPushObject">
20615 <exclude /> 19118 <summary>Restricts the usage of the LSL llPushObject function, applies to whole region.</summary>
20616 </member> 19119 </member>
20617 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.HistoryItemDataBlock"> 19120 <member name="F:OpenMetaverse.RegionFlags.DenyAnonymous">
20618 <exclude /> 19121 <summary>Deny agents with no payment info on file</summary>
20619 </member> 19122 </member>
20620 <member name="T:OpenMetaverse.Packets.GroupVoteHistoryItemReplyPacket.VoteItemBlock"> 19123 <member name="F:OpenMetaverse.RegionFlags.DenyIdentified">
20621 <exclude /> 19124 <summary>Deny agents with payment info on file</summary>
20622 </member> 19125 </member>
20623 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket"> 19126 <member name="F:OpenMetaverse.RegionFlags.DenyTransacted">
20624 <exclude /> 19127 <summary>Deny agents who have made a monetary transaction</summary>
20625 </member> 19128 </member>
20626 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket.AgentDataBlock"> 19129 <member name="F:OpenMetaverse.RegionFlags.AllowParcelChanges">
20627 <exclude /> 19130 <summary>Parcels within the region may be joined or divided by anyone, not just estate owners/managers. </summary>
20628 </member> 19131 </member>
20629 <member name="T:OpenMetaverse.Packets.StartGroupProposalPacket.ProposalDataBlock"> 19132 <member name="F:OpenMetaverse.RegionFlags.AbuseEmailToEstateOwner">
20630 <exclude /> 19133 <summary>Abuse reports sent from within this region are sent to the estate owner defined email. </summary>
20631 </member> 19134 </member>
20632 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket"> 19135 <member name="F:OpenMetaverse.RegionFlags.AllowVoice">
20633 <exclude /> 19136 <summary>Region is Voice Enabled</summary>
20634 </member> 19137 </member>
20635 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket.AgentDataBlock"> 19138 <member name="F:OpenMetaverse.RegionFlags.BlockParcelSearch">
20636 <exclude /> 19139 <summary>Removes the ability from parcel owners to set their parcels to show in search.</summary>
20637 </member> 19140 </member>
20638 <member name="T:OpenMetaverse.Packets.GroupProposalBallotPacket.ProposalDataBlock"> 19141 <member name="F:OpenMetaverse.RegionFlags.DenyAgeUnverified">
20639 <exclude /> 19142 <summary>Deny agents who have not been age verified from entering the region.</summary>
20640 </member> 19143 </member>
20641 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket"> 19144 <member name="T:OpenMetaverse.RegionProtocols">
20642 <exclude /> 19145 <summary>
19146 Region protocol flags
19147 </summary>
20643 </member> 19148 </member>
20644 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket.AgentDataBlock"> 19149 <member name="T:OpenMetaverse.SimAccess">
20645 <exclude /> 19150 <summary>
19151 Access level for a simulator
19152 </summary>
20646 </member> 19153 </member>
20647 <member name="T:OpenMetaverse.Packets.GroupMembersRequestPacket.GroupDataBlock"> 19154 <member name="F:OpenMetaverse.SimAccess.Unknown">
20648 <exclude /> 19155 <summary>Unknown or invalid access level</summary>
20649 </member> 19156 </member>
20650 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket"> 19157 <member name="F:OpenMetaverse.SimAccess.Trial">
20651 <exclude /> 19158 <summary>Trial accounts allowed</summary>
20652 </member> 19159 </member>
20653 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.AgentDataBlock"> 19160 <member name="F:OpenMetaverse.SimAccess.PG">
20654 <exclude /> 19161 <summary>PG rating</summary>
20655 </member> 19162 </member>
20656 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.GroupDataBlock"> 19163 <member name="F:OpenMetaverse.SimAccess.Mature">
20657 <exclude /> 19164 <summary>Mature rating</summary>
20658 </member> 19165 </member>
20659 <member name="T:OpenMetaverse.Packets.GroupMembersReplyPacket.MemberDataBlock"> 19166 <member name="F:OpenMetaverse.SimAccess.Adult">
20660 <exclude /> 19167 <summary>Adult rating</summary>
20661 </member> 19168 </member>
20662 <member name="T:OpenMetaverse.Packets.ActivateGroupPacket"> 19169 <member name="F:OpenMetaverse.SimAccess.Down">
20663 <exclude /> 19170 <summary>Simulator is offline</summary>
20664 </member> 19171 </member>
20665 <member name="T:OpenMetaverse.Packets.ActivateGroupPacket.AgentDataBlock"> 19172 <member name="F:OpenMetaverse.SimAccess.NonExistent">
20666 <exclude /> 19173 <summary>Simulator does not exist</summary>
20667 </member> 19174 </member>
20668 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket"> 19175 <member name="T:OpenMetaverse.Simulator">
20669 <exclude /> 19176 <summary>
19177
19178 </summary>
20670 </member> 19179 </member>
20671 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket.AgentDataBlock"> 19180 <member name="F:OpenMetaverse.Simulator.Client">
20672 <exclude /> 19181 <summary>A public reference to the client that this Simulator object
19182 is attached to</summary>
20673 </member> 19183 </member>
20674 <member name="T:OpenMetaverse.Packets.SetGroupContributionPacket.DataBlock"> 19184 <member name="F:OpenMetaverse.Simulator.ID">
20675 <exclude /> 19185 <summary>A Unique Cache identifier for this simulator</summary>
20676 </member> 19186 </member>
20677 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket"> 19187 <member name="F:OpenMetaverse.Simulator.Caps">
20678 <exclude /> 19188 <summary>The capabilities for this simulator</summary>
20679 </member> 19189 </member>
20680 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.AgentDataBlock"> 19190 <member name="F:OpenMetaverse.Simulator.Handle">
20681 <exclude /> 19191 <summary></summary>
20682 </member> 19192 </member>
20683 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.DataBlock"> 19193 <member name="F:OpenMetaverse.Simulator.SimVersion">
20684 <exclude /> 19194 <summary>The current version of software this simulator is running</summary>
20685 </member> 19195 </member>
20686 <member name="T:OpenMetaverse.Packets.SetGroupAcceptNoticesPacket.NewDataBlock"> 19196 <member name="F:OpenMetaverse.Simulator.Name">
20687 <exclude /> 19197 <summary></summary>
20688 </member> 19198 </member>
20689 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket"> 19199 <member name="F:OpenMetaverse.Simulator.ParcelOverlay">
20690 <exclude /> 19200 <summary>A 64x64 grid of parcel coloring values. The values stored
19201 in this array are of the <seealso cref="!:ParcelArrayType"/> type</summary>
20691 </member> 19202 </member>
20692 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket.AgentDataBlock"> 19203 <member name="F:OpenMetaverse.Simulator.ParcelOverlaysReceived">
20693 <exclude /> 19204 <summary></summary>
20694 </member> 19205 </member>
20695 <member name="T:OpenMetaverse.Packets.GroupRoleDataRequestPacket.GroupDataBlock"> 19206 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange00">
20696 <exclude /> 19207 <summary></summary>
20697 </member> 19208 </member>
20698 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket"> 19209 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange01">
20699 <exclude /> 19210 <summary></summary>
20700 </member> 19211 </member>
20701 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.AgentDataBlock"> 19212 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange10">
20702 <exclude /> 19213 <summary></summary>
20703 </member> 19214 </member>
20704 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.GroupDataBlock"> 19215 <member name="F:OpenMetaverse.Simulator.TerrainHeightRange11">
20705 <exclude /> 19216 <summary></summary>
20706 </member> 19217 </member>
20707 <member name="T:OpenMetaverse.Packets.GroupRoleDataReplyPacket.RoleDataBlock"> 19218 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight00">
20708 <exclude /> 19219 <summary></summary>
20709 </member> 19220 </member>
20710 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket"> 19221 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight01">
20711 <exclude /> 19222 <summary></summary>
20712 </member> 19223 </member>
20713 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket.AgentDataBlock"> 19224 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight10">
20714 <exclude /> 19225 <summary></summary>
20715 </member> 19226 </member>
20716 <member name="T:OpenMetaverse.Packets.GroupRoleMembersRequestPacket.GroupDataBlock"> 19227 <member name="F:OpenMetaverse.Simulator.TerrainStartHeight11">
20717 <exclude /> 19228 <summary></summary>
20718 </member> 19229 </member>
20719 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket"> 19230 <member name="F:OpenMetaverse.Simulator.WaterHeight">
20720 <exclude /> 19231 <summary></summary>
20721 </member> 19232 </member>
20722 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket.AgentDataBlock"> 19233 <member name="F:OpenMetaverse.Simulator.SimOwner">
20723 <exclude /> 19234 <summary></summary>
20724 </member> 19235 </member>
20725 <member name="T:OpenMetaverse.Packets.GroupRoleMembersReplyPacket.MemberDataBlock"> 19236 <member name="F:OpenMetaverse.Simulator.TerrainBase0">
20726 <exclude /> 19237 <summary></summary>
20727 </member> 19238 </member>
20728 <member name="T:OpenMetaverse.Packets.GroupTitlesRequestPacket"> 19239 <member name="F:OpenMetaverse.Simulator.TerrainBase1">
20729 <exclude /> 19240 <summary></summary>
20730 </member> 19241 </member>
20731 <member name="T:OpenMetaverse.Packets.GroupTitlesRequestPacket.AgentDataBlock"> 19242 <member name="F:OpenMetaverse.Simulator.TerrainBase2">
20732 <exclude /> 19243 <summary></summary>
20733 </member> 19244 </member>
20734 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket"> 19245 <member name="F:OpenMetaverse.Simulator.TerrainBase3">
20735 <exclude /> 19246 <summary></summary>
20736 </member> 19247 </member>
20737 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket.AgentDataBlock"> 19248 <member name="F:OpenMetaverse.Simulator.TerrainDetail0">
20738 <exclude /> 19249 <summary></summary>
20739 </member> 19250 </member>
20740 <member name="T:OpenMetaverse.Packets.GroupTitlesReplyPacket.GroupDataBlock"> 19251 <member name="F:OpenMetaverse.Simulator.TerrainDetail1">
20741 <exclude /> 19252 <summary></summary>
20742 </member> 19253 </member>
20743 <member name="T:OpenMetaverse.Packets.GroupTitleUpdatePacket"> 19254 <member name="F:OpenMetaverse.Simulator.TerrainDetail2">
20744 <exclude /> 19255 <summary></summary>
20745 </member> 19256 </member>
20746 <member name="T:OpenMetaverse.Packets.GroupTitleUpdatePacket.AgentDataBlock"> 19257 <member name="F:OpenMetaverse.Simulator.TerrainDetail3">
20747 <exclude /> 19258 <summary></summary>
20748 </member> 19259 </member>
20749 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket"> 19260 <member name="F:OpenMetaverse.Simulator.IsEstateManager">
20750 <exclude /> 19261 <summary>true if your agent has Estate Manager rights on this region</summary>
20751 </member> 19262 </member>
20752 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket.AgentDataBlock"> 19263 <member name="F:OpenMetaverse.Simulator.Flags">
20753 <exclude /> 19264 <summary></summary>
20754 </member> 19265 </member>
20755 <member name="T:OpenMetaverse.Packets.GroupRoleUpdatePacket.RoleDataBlock"> 19266 <member name="F:OpenMetaverse.Simulator.Access">
20756 <exclude /> 19267 <summary></summary>
20757 </member> 19268 </member>
20758 <member name="T:OpenMetaverse.Packets.LiveHelpGroupRequestPacket"> 19269 <member name="F:OpenMetaverse.Simulator.BillableFactor">
20759 <exclude /> 19270 <summary></summary>
20760 </member> 19271 </member>
20761 <member name="T:OpenMetaverse.Packets.LiveHelpGroupRequestPacket.RequestDataBlock"> 19272 <member name="F:OpenMetaverse.Simulator.Stats">
20762 <exclude /> 19273 <summary>Statistics information for this simulator and the
19274 connection to the simulator, calculated by the simulator itself
19275 and the library</summary>
20763 </member> 19276 </member>
20764 <member name="T:OpenMetaverse.Packets.LiveHelpGroupReplyPacket"> 19277 <member name="F:OpenMetaverse.Simulator.RegionID">
20765 <exclude /> 19278 <summary>The regions Unique ID</summary>
20766 </member> 19279 </member>
20767 <member name="T:OpenMetaverse.Packets.LiveHelpGroupReplyPacket.ReplyDataBlock"> 19280 <member name="F:OpenMetaverse.Simulator.ColoLocation">
20768 <exclude /> 19281 <summary>The physical data center the simulator is located</summary>
19282 <remarks>Known values are:
19283 <list type="table">
19284 <item>Dallas</item>
19285 <item>Chandler</item>
19286 <item>SF</item>
19287 </list>
19288 </remarks>
20769 </member> 19289 </member>
20770 <member name="T:OpenMetaverse.Packets.AgentWearablesRequestPacket"> 19290 <member name="F:OpenMetaverse.Simulator.CPUClass">
20771 <exclude /> 19291 <summary>The CPU Class of the simulator</summary>
19292 <remarks>Most full mainland/estate sims appear to be 5,
19293 Homesteads and Openspace appear to be 501</remarks>
20772 </member> 19294 </member>
20773 <member name="T:OpenMetaverse.Packets.AgentWearablesRequestPacket.AgentDataBlock"> 19295 <member name="F:OpenMetaverse.Simulator.CPURatio">
20774 <exclude /> 19296 <summary>The number of regions sharing the same CPU as this one</summary>
19297 <remarks>"Full Sims" appear to be 1, Homesteads appear to be 4</remarks>
20775 </member> 19298 </member>
20776 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket"> 19299 <member name="F:OpenMetaverse.Simulator.ProductName">
20777 <exclude /> 19300 <summary>The billing product name</summary>
19301 <remarks>Known values are:
19302 <list type="table">
19303 <item>Mainland / Full Region (Sku: 023)</item>
19304 <item>Estate / Full Region (Sku: 024)</item>
19305 <item>Estate / Openspace (Sku: 027)</item>
19306 <item>Estate / Homestead (Sku: 029)</item>
19307 <item>Mainland / Homestead (Sku: 129) (Linden Owned)</item>
19308 <item>Mainland / Linden Homes (Sku: 131)</item>
19309 </list>
19310 </remarks>
20778 </member> 19311 </member>
20779 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket.AgentDataBlock"> 19312 <member name="F:OpenMetaverse.Simulator.ProductSku">
20780 <exclude /> 19313 <summary>The billing product SKU</summary>
19314 <remarks>Known values are:
19315 <list type="table">
19316 <item>023 Mainland / Full Region</item>
19317 <item>024 Estate / Full Region</item>
19318 <item>027 Estate / Openspace</item>
19319 <item>029 Estate / Homestead</item>
19320 <item>129 Mainland / Homestead (Linden Owned)</item>
19321 <item>131 Linden Homes / Full Region</item>
19322 </list>
19323 </remarks>
20781 </member> 19324 </member>
20782 <member name="T:OpenMetaverse.Packets.AgentWearablesUpdatePacket.WearableDataBlock"> 19325 <member name="F:OpenMetaverse.Simulator.Protocols">
20783 <exclude /> 19326 <summary>
19327 Flags indicating which protocols this region supports
19328 </summary>
20784 </member> 19329 </member>
20785 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket"> 19330 <member name="F:OpenMetaverse.Simulator.Sequence">
20786 <exclude /> 19331 <summary>The current sequence number for packets sent to this
19332 simulator. Must be Interlocked before modifying. Only
19333 useful for applications manipulating sequence numbers</summary>
20787 </member> 19334 </member>
20788 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket.AgentDataBlock"> 19335 <member name="F:OpenMetaverse.Simulator.ObjectsAvatars">
20789 <exclude /> 19336 <summary>
19337 A thread-safe dictionary containing avatars in a simulator
19338 </summary>
20790 </member> 19339 </member>
20791 <member name="T:OpenMetaverse.Packets.AgentIsNowWearingPacket.WearableDataBlock"> 19340 <member name="F:OpenMetaverse.Simulator.ObjectsPrimitives">
20792 <exclude /> 19341 <summary>
19342 A thread-safe dictionary containing primitives in a simulator
19343 </summary>
20793 </member> 19344 </member>
20794 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket"> 19345 <member name="M:OpenMetaverse.Simulator.IsParcelMapFull">
20795 <exclude /> 19346 <summary>
19347 Checks simulator parcel map to make sure it has downloaded all data successfully
19348 </summary>
19349 <returns>true if map is full (contains no 0's)</returns>
20796 </member> 19350 </member>
20797 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket.AgentDataBlock"> 19351 <member name="F:OpenMetaverse.Simulator.AgentMovementComplete">
20798 <exclude /> 19352 <summary>
19353 Is it safe to send agent updates to this sim
19354 AgentMovementComplete message received
19355 </summary>
20799 </member> 19356 </member>
20800 <member name="T:OpenMetaverse.Packets.AgentCachedTexturePacket.WearableDataBlock"> 19357 <member name="F:OpenMetaverse.Simulator.DisconnectCandidate">
20801 <exclude /> 19358 <summary>Used internally to track sim disconnections</summary>
20802 </member> 19359 </member>
20803 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket"> 19360 <member name="F:OpenMetaverse.Simulator.ConnectedEvent">
20804 <exclude /> 19361 <summary>Event that is triggered when the simulator successfully
19362 establishes a connection</summary>
20805 </member> 19363 </member>
20806 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket.AgentDataBlock"> 19364 <member name="F:OpenMetaverse.Simulator.connected">
20807 <exclude /> 19365 <summary>Whether this sim is currently connected or not. Hooked up
19366 to the property Connected</summary>
20808 </member> 19367 </member>
20809 <member name="T:OpenMetaverse.Packets.AgentCachedTextureResponsePacket.WearableDataBlock"> 19368 <member name="F:OpenMetaverse.Simulator.avatarPositions">
20810 <exclude /> 19369 <summary>Coarse locations of avatars in this simulator</summary>
20811 </member> 19370 </member>
20812 <member name="T:OpenMetaverse.Packets.AgentDataUpdateRequestPacket"> 19371 <member name="F:OpenMetaverse.Simulator.preyID">
20813 <exclude /> 19372 <summary>AvatarPositions key representing TrackAgent target</summary>
20814 </member> 19373 </member>
20815 <member name="T:OpenMetaverse.Packets.AgentDataUpdateRequestPacket.AgentDataBlock"> 19374 <member name="F:OpenMetaverse.Simulator.PacketArchive">
20816 <exclude /> 19375 <summary>Sequence numbers of packets we've received
19376 (for duplicate checking)</summary>
20817 </member> 19377 </member>
20818 <member name="T:OpenMetaverse.Packets.AgentDataUpdatePacket"> 19378 <member name="F:OpenMetaverse.Simulator.NeedAck">
20819 <exclude /> 19379 <summary>Packets we sent out that need ACKs from the simulator</summary>
20820 </member> 19380 </member>
20821 <member name="T:OpenMetaverse.Packets.AgentDataUpdatePacket.AgentDataBlock"> 19381 <member name="F:OpenMetaverse.Simulator.pauseSerial">
20822 <exclude /> 19382 <summary>Sequence number for pause/resume</summary>
20823 </member> 19383 </member>
20824 <member name="T:OpenMetaverse.Packets.GroupDataUpdatePacket"> 19384 <member name="F:OpenMetaverse.Simulator.handshakeComplete">
20825 <exclude /> 19385 <summary>Indicates if UDP connection to the sim is fully established</summary>
20826 </member> 19386 </member>
20827 <member name="T:OpenMetaverse.Packets.GroupDataUpdatePacket.AgentGroupDataBlock"> 19387 <member name="M:OpenMetaverse.Simulator.#ctor(OpenMetaverse.GridClient,System.Net.IPEndPoint,System.UInt64)">
20828 <exclude /> 19388 <summary>
19389
19390 </summary>
19391 <param name="client">Reference to the GridClient object</param>
19392 <param name="address">IPEndPoint of the simulator</param>
19393 <param name="handle">handle of the simulator</param>
20829 </member> 19394 </member>
20830 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket"> 19395 <member name="M:OpenMetaverse.Simulator.Dispose">
20831 <exclude /> 19396 <summary>
19397 Called when this Simulator object is being destroyed
19398 </summary>
20832 </member> 19399 </member>
20833 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket.AgentDataBlock"> 19400 <member name="M:OpenMetaverse.Simulator.Connect(System.Boolean)">
20834 <exclude /> 19401 <summary>
19402 Attempt to connect to this simulator
19403 </summary>
19404 <param name="moveToSim">Whether to move our agent in to this sim or not</param>
19405 <returns>True if the connection succeeded or connection status is
19406 unknown, false if there was a failure</returns>
20835 </member> 19407 </member>
20836 <member name="T:OpenMetaverse.Packets.AgentGroupDataUpdatePacket.GroupDataBlock"> 19408 <member name="M:OpenMetaverse.Simulator.UseCircuitCode(System.Boolean)">
20837 <exclude /> 19409 <summary>
19410 Initiates connection to the simulator
19411 </summary>
19412 <param name="waitForAck">Should we block until ack for this packet is recieved</param>
20838 </member> 19413 </member>
20839 <member name="T:OpenMetaverse.Packets.AgentDropGroupPacket"> 19414 <member name="M:OpenMetaverse.Simulator.Disconnect(System.Boolean)">
20840 <exclude /> 19415 <summary>
19416 Disconnect from this simulator
19417 </summary>
20841 </member> 19418 </member>
20842 <member name="T:OpenMetaverse.Packets.AgentDropGroupPacket.AgentDataBlock"> 19419 <member name="M:OpenMetaverse.Simulator.Pause">
20843 <exclude /> 19420 <summary>
19421 Instructs the simulator to stop sending update (and possibly other) packets
19422 </summary>
20844 </member> 19423 </member>
20845 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket"> 19424 <member name="M:OpenMetaverse.Simulator.Resume">
20846 <exclude /> 19425 <summary>
19426 Instructs the simulator to resume sending update packets (unpause)
19427 </summary>
20847 </member> 19428 </member>
20848 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket.AgentDataBlock"> 19429 <member name="M:OpenMetaverse.Simulator.TerrainHeightAtPoint(System.Int32,System.Int32,System.Single@)">
20849 <exclude /> 19430 <summary>
19431 Retrieve the terrain height at a given coordinate
19432 </summary>
19433 <param name="x">Sim X coordinate, valid range is from 0 to 255</param>
19434 <param name="y">Sim Y coordinate, valid range is from 0 to 255</param>
19435 <param name="height">The terrain height at the given point if the
19436 lookup was successful, otherwise 0.0f</param>
19437 <returns>True if the lookup was successful, otherwise false</returns>
20850 </member> 19438 </member>
20851 <member name="T:OpenMetaverse.Packets.RezSingleAttachmentFromInvPacket.ObjectDataBlock"> 19439 <member name="M:OpenMetaverse.Simulator.SendPacket(OpenMetaverse.Packets.Packet)">
20852 <exclude /> 19440 <summary>
19441 Sends a packet
19442 </summary>
19443 <param name="packet">Packet to be sent</param>
20853 </member> 19444 </member>
20854 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket"> 19445 <member name="M:OpenMetaverse.Simulator.SendPing">
20855 <exclude /> 19446 <summary>
19447
19448 </summary>
20856 </member> 19449 </member>
20857 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.AgentDataBlock"> 19450 <member name="M:OpenMetaverse.Simulator.ToString">
20858 <exclude /> 19451 <summary>
19452 Returns Simulator Name as a String
19453 </summary>
19454 <returns></returns>
20859 </member> 19455 </member>
20860 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.HeaderDataBlock"> 19456 <member name="M:OpenMetaverse.Simulator.GetHashCode">
20861 <exclude /> 19457 <summary>
19458
19459 </summary>
19460 <returns></returns>
20862 </member> 19461 </member>
20863 <member name="T:OpenMetaverse.Packets.RezMultipleAttachmentsFromInvPacket.ObjectDataBlock"> 19462 <member name="M:OpenMetaverse.Simulator.Equals(System.Object)">
20864 <exclude /> 19463 <summary>
19464
19465 </summary>
19466 <param name="obj"></param>
19467 <returns></returns>
20865 </member> 19468 </member>
20866 <member name="T:OpenMetaverse.Packets.DetachAttachmentIntoInvPacket"> 19469 <member name="M:OpenMetaverse.Simulator.SendAcks">
20867 <exclude /> 19470 <summary>
19471 Sends out pending acknowledgements
19472 </summary>
19473 <returns>Number of ACKs sent</returns>
20868 </member> 19474 </member>
20869 <member name="T:OpenMetaverse.Packets.DetachAttachmentIntoInvPacket.ObjectDataBlock"> 19475 <member name="M:OpenMetaverse.Simulator.ResendUnacked">
20870 <exclude /> 19476 <summary>
19477 Resend unacknowledged packets
19478 </summary>
20871 </member> 19479 </member>
20872 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket"> 19480 <member name="P:OpenMetaverse.Simulator.Parcels">
20873 <exclude /> 19481 <summary>
19482 Provides access to an internal thread-safe dictionary containing parcel
19483 information found in this simulator
19484 </summary>
20874 </member> 19485 </member>
20875 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.AgentDataBlock"> 19486 <member name="P:OpenMetaverse.Simulator.ParcelMap">
20876 <exclude /> 19487 <summary>
19488 Provides access to an internal thread-safe multidimensional array containing a x,y grid mapped
19489 to each 64x64 parcel's LocalID.
19490 </summary>
20877 </member> 19491 </member>
20878 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.HeaderDataBlock"> 19492 <member name="P:OpenMetaverse.Simulator.IPEndPoint">
20879 <exclude /> 19493 <summary>The IP address and port of the server</summary>
20880 </member> 19494 </member>
20881 <member name="T:OpenMetaverse.Packets.CreateNewOutfitAttachmentsPacket.ObjectDataBlock"> 19495 <member name="P:OpenMetaverse.Simulator.Connected">
20882 <exclude /> 19496 <summary>Whether there is a working connection to the simulator or
19497 not</summary>
20883 </member> 19498 </member>
20884 <member name="T:OpenMetaverse.Packets.UserInfoRequestPacket"> 19499 <member name="P:OpenMetaverse.Simulator.AvatarPositions">
20885 <exclude /> 19500 <summary>Coarse locations of avatars in this simulator</summary>
20886 </member> 19501 </member>
20887 <member name="T:OpenMetaverse.Packets.UserInfoRequestPacket.AgentDataBlock"> 19502 <member name="P:OpenMetaverse.Simulator.PreyID">
20888 <exclude /> 19503 <summary>AvatarPositions key representing TrackAgent target</summary>
20889 </member> 19504 </member>
20890 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket"> 19505 <member name="P:OpenMetaverse.Simulator.HandshakeComplete">
20891 <exclude /> 19506 <summary>Indicates if UDP connection to the sim is fully established</summary>
20892 </member> 19507 </member>
20893 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket.AgentDataBlock"> 19508 <member name="T:OpenMetaverse.Simulator.SimStats">
20894 <exclude /> 19509 <summary>
19510 Simulator Statistics
19511 </summary>
20895 </member> 19512 </member>
20896 <member name="T:OpenMetaverse.Packets.UserInfoReplyPacket.UserDataBlock"> 19513 <member name="F:OpenMetaverse.Simulator.SimStats.SentPackets">
20897 <exclude /> 19514 <summary>Total number of packets sent by this simulator to this agent</summary>
20898 </member> 19515 </member>
20899 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket"> 19516 <member name="F:OpenMetaverse.Simulator.SimStats.RecvPackets">
20900 <exclude /> 19517 <summary>Total number of packets received by this simulator to this agent</summary>
20901 </member> 19518 </member>
20902 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket.AgentDataBlock"> 19519 <member name="F:OpenMetaverse.Simulator.SimStats.SentBytes">
20903 <exclude /> 19520 <summary>Total number of bytes sent by this simulator to this agent</summary>
20904 </member> 19521 </member>
20905 <member name="T:OpenMetaverse.Packets.UpdateUserInfoPacket.UserDataBlock"> 19522 <member name="F:OpenMetaverse.Simulator.SimStats.RecvBytes">
20906 <exclude /> 19523 <summary>Total number of bytes received by this simulator to this agent</summary>
20907 </member> 19524 </member>
20908 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket"> 19525 <member name="F:OpenMetaverse.Simulator.SimStats.ConnectTime">
20909 <exclude /> 19526 <summary>Time in seconds agent has been connected to simulator</summary>
20910 </member> 19527 </member>
20911 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket.AgentDataBlock"> 19528 <member name="F:OpenMetaverse.Simulator.SimStats.ResentPackets">
20912 <exclude /> 19529 <summary>Total number of packets that have been resent</summary>
20913 </member> 19530 </member>
20914 <member name="T:OpenMetaverse.Packets.InitiateDownloadPacket.FileDataBlock"> 19531 <member name="F:OpenMetaverse.Simulator.SimStats.ReceivedResends">
20915 <exclude /> 19532 <summary>Total number of resent packets recieved</summary>
20916 </member> 19533 </member>
20917 <member name="T:OpenMetaverse.Packets.MapLayerRequestPacket"> 19534 <member name="F:OpenMetaverse.Simulator.SimStats.SentPings">
20918 <exclude /> 19535 <summary>Total number of pings sent to this simulator by this agent</summary>
20919 </member> 19536 </member>
20920 <member name="T:OpenMetaverse.Packets.MapLayerRequestPacket.AgentDataBlock"> 19537 <member name="F:OpenMetaverse.Simulator.SimStats.ReceivedPongs">
20921 <exclude /> 19538 <summary>Total number of ping replies sent to this agent by this simulator</summary>
20922 </member> 19539 </member>
20923 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket"> 19540 <member name="F:OpenMetaverse.Simulator.SimStats.IncomingBPS">
20924 <exclude /> 19541 <summary>
19542 Incoming bytes per second
19543 </summary>
19544 <remarks>It would be nice to have this claculated on the fly, but
19545 this is far, far easier</remarks>
20925 </member> 19546 </member>
20926 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket.AgentDataBlock"> 19547 <member name="F:OpenMetaverse.Simulator.SimStats.OutgoingBPS">
20927 <exclude /> 19548 <summary>
19549 Outgoing bytes per second
19550 </summary>
19551 <remarks>It would be nice to have this claculated on the fly, but
19552 this is far, far easier</remarks>
20928 </member> 19553 </member>
20929 <member name="T:OpenMetaverse.Packets.MapLayerReplyPacket.LayerDataBlock"> 19554 <member name="F:OpenMetaverse.Simulator.SimStats.LastPingSent">
20930 <exclude /> 19555 <summary>Time last ping was sent</summary>
20931 </member> 19556 </member>
20932 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket"> 19557 <member name="F:OpenMetaverse.Simulator.SimStats.LastPingID">
20933 <exclude /> 19558 <summary>ID of last Ping sent</summary>
20934 </member> 19559 </member>
20935 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket.AgentDataBlock"> 19560 <member name="F:OpenMetaverse.Simulator.SimStats.LastLag">
20936 <exclude /> 19561 <summary></summary>
20937 </member> 19562 </member>
20938 <member name="T:OpenMetaverse.Packets.MapBlockRequestPacket.PositionDataBlock"> 19563 <member name="F:OpenMetaverse.Simulator.SimStats.MissedPings">
20939 <exclude /> 19564 <summary></summary>
20940 </member> 19565 </member>
20941 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket"> 19566 <member name="F:OpenMetaverse.Simulator.SimStats.Dilation">
20942 <exclude /> 19567 <summary>Current time dilation of this simulator</summary>
20943 </member> 19568 </member>
20944 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket.AgentDataBlock"> 19569 <member name="F:OpenMetaverse.Simulator.SimStats.FPS">
20945 <exclude /> 19570 <summary>Current Frames per second of simulator</summary>
20946 </member> 19571 </member>
20947 <member name="T:OpenMetaverse.Packets.MapNameRequestPacket.NameDataBlock"> 19572 <member name="F:OpenMetaverse.Simulator.SimStats.PhysicsFPS">
20948 <exclude /> 19573 <summary>Current Physics frames per second of simulator</summary>
20949 </member> 19574 </member>
20950 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket"> 19575 <member name="F:OpenMetaverse.Simulator.SimStats.AgentUpdates">
20951 <exclude /> 19576 <summary></summary>
20952 </member> 19577 </member>
20953 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket.AgentDataBlock"> 19578 <member name="F:OpenMetaverse.Simulator.SimStats.FrameTime">
20954 <exclude /> 19579 <summary></summary>
20955 </member> 19580 </member>
20956 <member name="T:OpenMetaverse.Packets.MapBlockReplyPacket.DataBlock"> 19581 <member name="F:OpenMetaverse.Simulator.SimStats.NetTime">
20957 <exclude /> 19582 <summary></summary>
20958 </member> 19583 </member>
20959 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket"> 19584 <member name="F:OpenMetaverse.Simulator.SimStats.PhysicsTime">
20960 <exclude /> 19585 <summary></summary>
20961 </member> 19586 </member>
20962 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket.AgentDataBlock"> 19587 <member name="F:OpenMetaverse.Simulator.SimStats.ImageTime">
20963 <exclude /> 19588 <summary></summary>
20964 </member> 19589 </member>
20965 <member name="T:OpenMetaverse.Packets.MapItemRequestPacket.RequestDataBlock"> 19590 <member name="F:OpenMetaverse.Simulator.SimStats.ScriptTime">
20966 <exclude /> 19591 <summary></summary>
20967 </member> 19592 </member>
20968 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket"> 19593 <member name="F:OpenMetaverse.Simulator.SimStats.AgentTime">
20969 <exclude /> 19594 <summary></summary>
20970 </member> 19595 </member>
20971 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.AgentDataBlock"> 19596 <member name="F:OpenMetaverse.Simulator.SimStats.OtherTime">
20972 <exclude /> 19597 <summary></summary>
20973 </member> 19598 </member>
20974 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.RequestDataBlock"> 19599 <member name="F:OpenMetaverse.Simulator.SimStats.Objects">
20975 <exclude /> 19600 <summary>Total number of objects Simulator is simulating</summary>
20976 </member> 19601 </member>
20977 <member name="T:OpenMetaverse.Packets.MapItemReplyPacket.DataBlock"> 19602 <member name="F:OpenMetaverse.Simulator.SimStats.ScriptedObjects">
20978 <exclude /> 19603 <summary>Total number of Active (Scripted) objects running</summary>
20979 </member> 19604 </member>
20980 <member name="T:OpenMetaverse.Packets.SendPostcardPacket"> 19605 <member name="F:OpenMetaverse.Simulator.SimStats.Agents">
20981 <exclude /> 19606 <summary>Number of agents currently in this simulator</summary>
20982 </member> 19607 </member>
20983 <member name="T:OpenMetaverse.Packets.SendPostcardPacket.AgentDataBlock"> 19608 <member name="F:OpenMetaverse.Simulator.SimStats.ChildAgents">
20984 <exclude /> 19609 <summary>Number of agents in neighbor simulators</summary>
20985 </member> 19610 </member>
20986 <member name="T:OpenMetaverse.Packets.ParcelMediaCommandMessagePacket"> 19611 <member name="F:OpenMetaverse.Simulator.SimStats.ActiveScripts">
20987 <exclude /> 19612 <summary>Number of Active scripts running in this simulator</summary>
20988 </member> 19613 </member>
20989 <member name="T:OpenMetaverse.Packets.ParcelMediaCommandMessagePacket.CommandBlockBlock"> 19614 <member name="F:OpenMetaverse.Simulator.SimStats.LSLIPS">
20990 <exclude /> 19615 <summary></summary>
20991 </member> 19616 </member>
20992 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket"> 19617 <member name="F:OpenMetaverse.Simulator.SimStats.INPPS">
20993 <exclude /> 19618 <summary></summary>
20994 </member> 19619 </member>
20995 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket.DataBlockBlock"> 19620 <member name="F:OpenMetaverse.Simulator.SimStats.OUTPPS">
20996 <exclude /> 19621 <summary></summary>
20997 </member> 19622 </member>
20998 <member name="T:OpenMetaverse.Packets.ParcelMediaUpdatePacket.DataBlockExtendedBlock"> 19623 <member name="F:OpenMetaverse.Simulator.SimStats.PendingDownloads">
20999 <exclude /> 19624 <summary>Number of downloads pending</summary>
21000 </member> 19625 </member>
21001 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket"> 19626 <member name="F:OpenMetaverse.Simulator.SimStats.PendingUploads">
21002 <exclude /> 19627 <summary>Number of uploads pending</summary>
21003 </member> 19628 </member>
21004 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket.AgentDataBlock"> 19629 <member name="F:OpenMetaverse.Simulator.SimStats.VirtualSize">
21005 <exclude /> 19630 <summary></summary>
21006 </member> 19631 </member>
21007 <member name="T:OpenMetaverse.Packets.LandStatRequestPacket.RequestDataBlock"> 19632 <member name="F:OpenMetaverse.Simulator.SimStats.ResidentSize">
21008 <exclude /> 19633 <summary></summary>
21009 </member> 19634 </member>
21010 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket"> 19635 <member name="F:OpenMetaverse.Simulator.SimStats.PendingLocalUploads">
21011 <exclude /> 19636 <summary>Number of local uploads pending</summary>
21012 </member> 19637 </member>
21013 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket.RequestDataBlock"> 19638 <member name="F:OpenMetaverse.Simulator.SimStats.UnackedBytes">
21014 <exclude /> 19639 <summary>Unacknowledged bytes in queue</summary>
21015 </member> 19640 </member>
21016 <member name="T:OpenMetaverse.Packets.LandStatReplyPacket.ReportDataBlock"> 19641 <member name="F:OpenMetaverse.SimulatorDataPool.Handle">
21017 <exclude /> 19642 <summary>
19643 Simulator handle
19644 </summary>
21018 </member> 19645 </member>
21019 <member name="T:OpenMetaverse.Packets.ErrorPacket"> 19646 <member name="F:OpenMetaverse.SimulatorDataPool.ActiveClients">
21020 <exclude /> 19647 <summary>
19648 Number of GridClients using this datapool
19649 </summary>
21021 </member> 19650 </member>
21022 <member name="T:OpenMetaverse.Packets.ErrorPacket.AgentDataBlock"> 19651 <member name="F:OpenMetaverse.SimulatorDataPool.InactiveSince">
21023 <exclude /> 19652 <summary>
19653 Time that the last client disconnected from the simulator
19654 </summary>
21024 </member> 19655 </member>
21025 <member name="T:OpenMetaverse.Packets.ErrorPacket.DataBlock"> 19656 <member name="F:OpenMetaverse.SimulatorDataPool.PrimCache">
21026 <exclude /> 19657 <summary>
19658 The cache of prims used and unused in this simulator
19659 </summary>
21027 </member> 19660 </member>
21028 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket"> 19661 <member name="F:OpenMetaverse.SimulatorDataPool.Parcels">
21029 <exclude /> 19662 <summary>
19663 Shared parcel info only when POOL_PARCEL_DATA == true
19664 </summary>
21030 </member> 19665 </member>
21031 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket.AgentDataBlock"> 19666 <member name="T:OpenMetaverse.FieldType">
21032 <exclude /> 19667 <summary>
19668
19669 </summary>
21033 </member> 19670 </member>
21034 <member name="T:OpenMetaverse.Packets.ObjectIncludeInSearchPacket.ObjectDataBlock"> 19671 <member name="F:OpenMetaverse.FieldType.U8">
21035 <exclude /> 19672 <summary></summary>
21036 </member> 19673 </member>
21037 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket"> 19674 <member name="F:OpenMetaverse.FieldType.U16">
21038 <exclude /> 19675 <summary></summary>
21039 </member> 19676 </member>
21040 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket.AgentDataBlock"> 19677 <member name="F:OpenMetaverse.FieldType.U32">
21041 <exclude /> 19678 <summary></summary>
21042 </member> 19679 </member>
21043 <member name="T:OpenMetaverse.Packets.RezRestoreToWorldPacket.InventoryDataBlock"> 19680 <member name="F:OpenMetaverse.FieldType.U64">
21044 <exclude /> 19681 <summary></summary>
21045 </member> 19682 </member>
21046 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket"> 19683 <member name="F:OpenMetaverse.FieldType.S8">
21047 <exclude /> 19684 <summary></summary>
21048 </member> 19685 </member>
21049 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket.AgentDataBlock"> 19686 <member name="F:OpenMetaverse.FieldType.S16">
21050 <exclude /> 19687 <summary></summary>
21051 </member> 19688 </member>
21052 <member name="T:OpenMetaverse.Packets.LinkInventoryItemPacket.InventoryBlockBlock"> 19689 <member name="F:OpenMetaverse.FieldType.S32">
21053 <exclude /> 19690 <summary></summary>
21054 </member> 19691 </member>
21055 <member name="T:OpenMetaverse.Packets.PacketAckPacket"> 19692 <member name="F:OpenMetaverse.FieldType.F32">
21056 <exclude /> 19693 <summary></summary>
21057 </member> 19694 </member>
21058 <member name="T:OpenMetaverse.Packets.PacketAckPacket.PacketsBlock"> 19695 <member name="F:OpenMetaverse.FieldType.F64">
21059 <exclude /> 19696 <summary></summary>
21060 </member> 19697 </member>
21061 <member name="T:OpenMetaverse.Packets.OpenCircuitPacket"> 19698 <member name="F:OpenMetaverse.FieldType.UUID">
21062 <exclude /> 19699 <summary></summary>
21063 </member> 19700 </member>
21064 <member name="T:OpenMetaverse.Packets.OpenCircuitPacket.CircuitInfoBlock"> 19701 <member name="F:OpenMetaverse.FieldType.BOOL">
21065 <exclude /> 19702 <summary></summary>
21066 </member> 19703 </member>
21067 <member name="T:OpenMetaverse.Packets.CloseCircuitPacket"> 19704 <member name="F:OpenMetaverse.FieldType.Vector3">
21068 <exclude /> 19705 <summary></summary>
21069 </member> 19706 </member>
21070 <member name="T:OpenMetaverse.Packets.ObjectAddPacket"> 19707 <member name="F:OpenMetaverse.FieldType.Vector3d">
21071 <exclude /> 19708 <summary></summary>
21072 </member> 19709 </member>
21073 <member name="T:OpenMetaverse.Packets.ObjectAddPacket.AgentDataBlock"> 19710 <member name="F:OpenMetaverse.FieldType.Vector4">
21074 <exclude /> 19711 <summary></summary>
21075 </member> 19712 </member>
21076 <member name="T:OpenMetaverse.Packets.ObjectAddPacket.ObjectDataBlock"> 19713 <member name="F:OpenMetaverse.FieldType.Quaternion">
21077 <exclude /> 19714 <summary></summary>
21078 </member> 19715 </member>
21079 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket"> 19716 <member name="F:OpenMetaverse.FieldType.IPADDR">
21080 <exclude /> 19717 <summary></summary>
21081 </member> 19718 </member>
21082 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket.AgentDataBlock"> 19719 <member name="F:OpenMetaverse.FieldType.IPPORT">
21083 <exclude /> 19720 <summary></summary>
21084 </member> 19721 </member>
21085 <member name="T:OpenMetaverse.Packets.MultipleObjectUpdatePacket.ObjectDataBlock"> 19722 <member name="F:OpenMetaverse.FieldType.Variable">
21086 <exclude /> 19723 <summary></summary>
21087 </member> 19724 </member>
21088 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket"> 19725 <member name="F:OpenMetaverse.FieldType.Fixed">
21089 <exclude /> 19726 <summary></summary>
21090 </member> 19727 </member>
21091 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket.AgentDataBlock"> 19728 <member name="F:OpenMetaverse.FieldType.Single">
21092 <exclude /> 19729 <summary></summary>
21093 </member> 19730 </member>
21094 <member name="T:OpenMetaverse.Packets.RequestMultipleObjectsPacket.ObjectDataBlock"> 19731 <member name="F:OpenMetaverse.FieldType.Multiple">
21095 <exclude /> 19732 <summary></summary>
21096 </member> 19733 </member>
21097 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket"> 19734 <member name="T:OpenMetaverse.MapField">
21098 <exclude /> 19735 <summary>
19736
19737 </summary>
21099 </member> 19738 </member>
21100 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket.AgentDataBlock"> 19739 <member name="F:OpenMetaverse.MapField.KeywordPosition">
21101 <exclude /> 19740 <summary></summary>
21102 </member> 19741 </member>
21103 <member name="T:OpenMetaverse.Packets.ObjectPositionPacket.ObjectDataBlock"> 19742 <member name="F:OpenMetaverse.MapField.Name">
21104 <exclude /> 19743 <summary></summary>
21105 </member> 19744 </member>
21106 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket"> 19745 <member name="F:OpenMetaverse.MapField.Type">
21107 <exclude /> 19746 <summary></summary>
21108 </member> 19747 </member>
21109 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket.AgentDataBlock"> 19748 <member name="F:OpenMetaverse.MapField.Count">
21110 <exclude /> 19749 <summary></summary>
21111 </member> 19750 </member>
21112 <member name="T:OpenMetaverse.Packets.RequestObjectPropertiesFamilyPacket.ObjectDataBlock"> 19751 <member name="M:OpenMetaverse.MapField.CompareTo(System.Object)">
21113 <exclude /> 19752 <summary>
19753
19754 </summary>
19755 <param name="obj"></param>
19756 <returns></returns>
21114 </member> 19757 </member>
21115 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket"> 19758 <member name="T:OpenMetaverse.MapBlock">
21116 <exclude /> 19759 <summary>
19760
19761 </summary>
21117 </member> 19762 </member>
21118 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.LocationBlock"> 19763 <member name="F:OpenMetaverse.MapBlock.KeywordPosition">
21119 <exclude /> 19764 <summary></summary>
21120 </member> 19765 </member>
21121 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.IndexBlock"> 19766 <member name="F:OpenMetaverse.MapBlock.Name">
21122 <exclude /> 19767 <summary></summary>
21123 </member> 19768 </member>
21124 <member name="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket.AgentDataBlock"> 19769 <member name="F:OpenMetaverse.MapBlock.Count">
21125 <exclude /> 19770 <summary></summary>
21126 </member> 19771 </member>
21127 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket"> 19772 <member name="F:OpenMetaverse.MapBlock.Fields">
21128 <exclude /> 19773 <summary></summary>
21129 </member> 19774 </member>
21130 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.AgentDataBlock"> 19775 <member name="M:OpenMetaverse.MapBlock.CompareTo(System.Object)">
21131 <exclude /> 19776 <summary>
19777
19778 </summary>
19779 <param name="obj"></param>
19780 <returns></returns>
21132 </member> 19781 </member>
21133 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.RegionDataBlock"> 19782 <member name="T:OpenMetaverse.MapPacket">
21134 <exclude /> 19783 <summary>
19784
19785 </summary>
21135 </member> 19786 </member>
21136 <member name="T:OpenMetaverse.Packets.CrossedRegionPacket.InfoBlock"> 19787 <member name="F:OpenMetaverse.MapPacket.ID">
21137 <exclude /> 19788 <summary></summary>
21138 </member> 19789 </member>
21139 <member name="T:OpenMetaverse.Packets.ConfirmEnableSimulatorPacket"> 19790 <member name="F:OpenMetaverse.MapPacket.Name">
21140 <exclude /> 19791 <summary></summary>
21141 </member> 19792 </member>
21142 <member name="T:OpenMetaverse.Packets.ConfirmEnableSimulatorPacket.AgentDataBlock"> 19793 <member name="F:OpenMetaverse.MapPacket.Frequency">
21143 <exclude /> 19794 <summary></summary>
21144 </member> 19795 </member>
21145 <member name="T:OpenMetaverse.Packets.ObjectPropertiesPacket"> 19796 <member name="F:OpenMetaverse.MapPacket.Trusted">
21146 <exclude /> 19797 <summary></summary>
21147 </member> 19798 </member>
21148 <member name="T:OpenMetaverse.Packets.ObjectPropertiesPacket.ObjectDataBlock"> 19799 <member name="F:OpenMetaverse.MapPacket.Encoded">
21149 <exclude /> 19800 <summary></summary>
21150 </member> 19801 </member>
21151 <member name="T:OpenMetaverse.Packets.ObjectPropertiesFamilyPacket"> 19802 <member name="F:OpenMetaverse.MapPacket.Blocks">
21152 <exclude /> 19803 <summary></summary>
21153 </member> 19804 </member>
21154 <member name="T:OpenMetaverse.Packets.ObjectPropertiesFamilyPacket.ObjectDataBlock"> 19805 <member name="T:OpenMetaverse.ProtocolManager">
21155 <exclude /> 19806 <summary>
19807
19808 </summary>
21156 </member> 19809 </member>
21157 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket"> 19810 <member name="F:OpenMetaverse.ProtocolManager.TypeSizes">
21158 <exclude /> 19811 <summary></summary>
21159 </member> 19812 </member>
21160 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket.AgentDataBlock"> 19813 <member name="F:OpenMetaverse.ProtocolManager.KeywordPositions">
21161 <exclude /> 19814 <summary></summary>
21162 </member> 19815 </member>
21163 <member name="T:OpenMetaverse.Packets.ParcelPropertiesRequestPacket.ParcelDataBlock"> 19816 <member name="F:OpenMetaverse.ProtocolManager.LowMaps">
21164 <exclude /> 19817 <summary></summary>
21165 </member> 19818 </member>
21166 <member name="T:OpenMetaverse.Packets.AttachedSoundPacket"> 19819 <member name="F:OpenMetaverse.ProtocolManager.MediumMaps">
21167 <exclude /> 19820 <summary></summary>
21168 </member> 19821 </member>
21169 <member name="T:OpenMetaverse.Packets.AttachedSoundPacket.DataBlockBlock"> 19822 <member name="F:OpenMetaverse.ProtocolManager.HighMaps">
21170 <exclude /> 19823 <summary></summary>
21171 </member> 19824 </member>
21172 <member name="T:OpenMetaverse.Packets.AttachedSoundGainChangePacket"> 19825 <member name="M:OpenMetaverse.ProtocolManager.#ctor(System.String,OpenMetaverse.GridClient)">
21173 <exclude /> 19826 <summary>
19827
19828 </summary>
19829 <param name="mapFile"></param>
19830 <param name="client"></param>
21174 </member> 19831 </member>
21175 <member name="T:OpenMetaverse.Packets.AttachedSoundGainChangePacket.DataBlockBlock"> 19832 <member name="M:OpenMetaverse.ProtocolManager.Command(System.String)">
21176 <exclude /> 19833 <summary>
19834
19835 </summary>
19836 <param name="command"></param>
19837 <returns></returns>
21177 </member> 19838 </member>
21178 <member name="T:OpenMetaverse.Packets.PreloadSoundPacket"> 19839 <member name="M:OpenMetaverse.ProtocolManager.Command(System.Byte[])">
21179 <exclude /> 19840 <summary>
19841
19842 </summary>
19843 <param name="data"></param>
19844 <returns></returns>
21180 </member> 19845 </member>
21181 <member name="T:OpenMetaverse.Packets.PreloadSoundPacket.DataBlockBlock"> 19846 <member name="M:OpenMetaverse.ProtocolManager.Command(System.UInt16,OpenMetaverse.PacketFrequency)">
21182 <exclude /> 19847 <summary>
19848
19849 </summary>
19850 <param name="command"></param>
19851 <param name="frequency"></param>
19852 <returns></returns>
21183 </member> 19853 </member>
21184 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket"> 19854 <member name="M:OpenMetaverse.ProtocolManager.PrintMap">
21185 <exclude /> 19855 <summary>
19856
19857 </summary>
21186 </member> 19858 </member>
21187 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket.AgentDataBlock"> 19859 <member name="M:OpenMetaverse.ProtocolManager.PrintOneMap(OpenMetaverse.MapPacket[],System.String)">
21188 <exclude /> 19860 <summary>
19861
19862 </summary>
19863 <param name="map"></param>
19864 <param name="frequency"></param>
21189 </member> 19865 </member>
21190 <member name="T:OpenMetaverse.Packets.ViewerEffectPacket.EffectBlock"> 19866 <member name="M:OpenMetaverse.ProtocolManager.DecodeMapFile(System.String,System.String)">
21191 <exclude /> 19867 <summary>
19868
19869 </summary>
19870 <param name="mapFile"></param>
19871 <param name="outputFile"></param>
21192 </member> 19872 </member>
21193 <member name="T:OpenMetaverse.Packets.StartPingCheckPacket"> 19873 <member name="M:OpenMetaverse.ProtocolManager.LoadMapFile(System.String)">
21194 <exclude /> 19874 <summary>
19875
19876 </summary>
19877 <param name="mapFile"></param>
21195 </member> 19878 </member>
21196 <member name="T:OpenMetaverse.Packets.StartPingCheckPacket.PingIDBlock"> 19879 <member name="T:OpenMetaverse.ReportType">
21197 <exclude /> 19880 <summary>
19881
19882 </summary>
21198 </member> 19883 </member>
21199 <member name="T:OpenMetaverse.Packets.CompletePingCheckPacket"> 19884 <member name="F:OpenMetaverse.ReportType.None">
21200 <exclude /> 19885 <summary>No report</summary>
21201 </member> 19886 </member>
21202 <member name="T:OpenMetaverse.Packets.CompletePingCheckPacket.PingIDBlock"> 19887 <member name="F:OpenMetaverse.ReportType.Unknown">
21203 <exclude /> 19888 <summary>Unknown report type</summary>
21204 </member> 19889 </member>
21205 <member name="T:OpenMetaverse.Packets.AgentUpdatePacket"> 19890 <member name="F:OpenMetaverse.ReportType.Bug">
21206 <exclude /> 19891 <summary>Bug report</summary>
21207 </member> 19892 </member>
21208 <member name="T:OpenMetaverse.Packets.AgentUpdatePacket.AgentDataBlock"> 19893 <member name="F:OpenMetaverse.ReportType.Complaint">
21209 <exclude /> 19894 <summary>Complaint report</summary>
21210 </member> 19895 </member>
21211 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket"> 19896 <member name="F:OpenMetaverse.ReportType.CustomerServiceRequest">
21212 <exclude /> 19897 <summary>Customer service report</summary>
21213 </member> 19898 </member>
21214 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.AgentDataBlock"> 19899 <member name="T:OpenMetaverse.CompressedFlags">
21215 <exclude /> 19900 <summary>
19901 Bitflag field for ObjectUpdateCompressed data blocks, describing
19902 which options are present for each object
19903 </summary>
21216 </member> 19904 </member>
21217 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.AnimationListBlock"> 19905 <member name="F:OpenMetaverse.CompressedFlags.ScratchPad">
21218 <exclude /> 19906 <summary>Unknown</summary>
21219 </member> 19907 </member>
21220 <member name="T:OpenMetaverse.Packets.AgentAnimationPacket.PhysicalAvatarEventListBlock"> 19908 <member name="F:OpenMetaverse.CompressedFlags.Tree">
21221 <exclude /> 19909 <summary>Whether the object has a TreeSpecies</summary>
21222 </member> 19910 </member>
21223 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket"> 19911 <member name="F:OpenMetaverse.CompressedFlags.HasText">
21224 <exclude /> 19912 <summary>Whether the object has floating text ala llSetText</summary>
21225 </member> 19913 </member>
21226 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket.AgentDataBlock"> 19914 <member name="F:OpenMetaverse.CompressedFlags.HasParticles">
21227 <exclude /> 19915 <summary>Whether the object has an active particle system</summary>
21228 </member> 19916 </member>
21229 <member name="T:OpenMetaverse.Packets.AgentRequestSitPacket.TargetObjectBlock"> 19917 <member name="F:OpenMetaverse.CompressedFlags.HasSound">
21230 <exclude /> 19918 <summary>Whether the object has sound attached to it</summary>
21231 </member> 19919 </member>
21232 <member name="T:OpenMetaverse.Packets.AgentSitPacket"> 19920 <member name="F:OpenMetaverse.CompressedFlags.HasParent">
21233 <exclude /> 19921 <summary>Whether the object is attached to a root object or not</summary>
21234 </member> 19922 </member>
21235 <member name="T:OpenMetaverse.Packets.AgentSitPacket.AgentDataBlock"> 19923 <member name="F:OpenMetaverse.CompressedFlags.TextureAnimation">
21236 <exclude /> 19924 <summary>Whether the object has texture animation settings</summary>
21237 </member> 19925 </member>
21238 <member name="T:OpenMetaverse.Packets.RequestImagePacket"> 19926 <member name="F:OpenMetaverse.CompressedFlags.HasAngularVelocity">
21239 <exclude /> 19927 <summary>Whether the object has an angular velocity</summary>
21240 </member> 19928 </member>
21241 <member name="T:OpenMetaverse.Packets.RequestImagePacket.AgentDataBlock"> 19929 <member name="F:OpenMetaverse.CompressedFlags.HasNameValues">
21242 <exclude /> 19930 <summary>Whether the object has a name value pairs string</summary>
21243 </member> 19931 </member>
21244 <member name="T:OpenMetaverse.Packets.RequestImagePacket.RequestImageBlock"> 19932 <member name="F:OpenMetaverse.CompressedFlags.MediaURL">
21245 <exclude /> 19933 <summary>Whether the object has a Media URL set</summary>
21246 </member> 19934 </member>
21247 <member name="T:OpenMetaverse.Packets.ImageDataPacket"> 19935 <member name="T:OpenMetaverse.UpdateType">
21248 <exclude /> 19936 <summary>
19937 Specific Flags for MultipleObjectUpdate requests
19938 </summary>
21249 </member> 19939 </member>
21250 <member name="T:OpenMetaverse.Packets.ImageDataPacket.ImageIDBlock"> 19940 <member name="F:OpenMetaverse.UpdateType.None">
21251 <exclude /> 19941 <summary>None</summary>
21252 </member> 19942 </member>
21253 <member name="T:OpenMetaverse.Packets.ImageDataPacket.ImageDataBlock"> 19943 <member name="F:OpenMetaverse.UpdateType.Position">
21254 <exclude /> 19944 <summary>Change position of prims</summary>
21255 </member> 19945 </member>
21256 <member name="T:OpenMetaverse.Packets.ImagePacketPacket"> 19946 <member name="F:OpenMetaverse.UpdateType.Rotation">
21257 <exclude /> 19947 <summary>Change rotation of prims</summary>
21258 </member> 19948 </member>
21259 <member name="T:OpenMetaverse.Packets.ImagePacketPacket.ImageIDBlock"> 19949 <member name="F:OpenMetaverse.UpdateType.Scale">
21260 <exclude /> 19950 <summary>Change size of prims</summary>
21261 </member> 19951 </member>
21262 <member name="T:OpenMetaverse.Packets.ImagePacketPacket.ImageDataBlock"> 19952 <member name="F:OpenMetaverse.UpdateType.Linked">
21263 <exclude /> 19953 <summary>Perform operation on link set</summary>
21264 </member> 19954 </member>
21265 <member name="T:OpenMetaverse.Packets.LayerDataPacket"> 19955 <member name="F:OpenMetaverse.UpdateType.Uniform">
21266 <exclude /> 19956 <summary>Scale prims uniformly, same as selecing ctrl+shift in the
19957 viewer. Used in conjunction with Scale</summary>
21267 </member> 19958 </member>
21268 <member name="T:OpenMetaverse.Packets.LayerDataPacket.LayerIDBlock"> 19959 <member name="T:OpenMetaverse.PayPriceType">
21269 <exclude /> 19960 <summary>
19961 Special values in PayPriceReply. If the price is not one of these
19962 literal value of the price should be use
19963 </summary>
21270 </member> 19964 </member>
21271 <member name="T:OpenMetaverse.Packets.LayerDataPacket.LayerDataBlock"> 19965 <member name="F:OpenMetaverse.PayPriceType.Hide">
21272 <exclude /> 19966 <summary>
19967 Indicates that this pay option should be hidden
19968 </summary>
21273 </member> 19969 </member>
21274 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket"> 19970 <member name="F:OpenMetaverse.PayPriceType.Default">
21275 <exclude /> 19971 <summary>
19972 Indicates that this pay option should have the default value
19973 </summary>
21276 </member> 19974 </member>
21277 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket.RegionDataBlock"> 19975 <member name="T:OpenMetaverse.ObjectMovementUpdate">
21278 <exclude /> 19976 <summary>
19977 Contains the variables sent in an object update packet for objects.
19978 Used to track position and movement of prims and avatars
19979 </summary>
21279 </member> 19980 </member>
21280 <member name="T:OpenMetaverse.Packets.ObjectUpdatePacket.ObjectDataBlock"> 19981 <member name="F:OpenMetaverse.ObjectMovementUpdate.Avatar">
21281 <exclude /> 19982 <summary></summary>
21282 </member> 19983 </member>
21283 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket"> 19984 <member name="F:OpenMetaverse.ObjectMovementUpdate.CollisionPlane">
21284 <exclude /> 19985 <summary></summary>
21285 </member> 19986 </member>
21286 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket.RegionDataBlock"> 19987 <member name="F:OpenMetaverse.ObjectMovementUpdate.State">
21287 <exclude /> 19988 <summary></summary>
21288 </member> 19989 </member>
21289 <member name="T:OpenMetaverse.Packets.ObjectUpdateCompressedPacket.ObjectDataBlock"> 19990 <member name="F:OpenMetaverse.ObjectMovementUpdate.LocalID">
21290 <exclude /> 19991 <summary></summary>
21291 </member> 19992 </member>
21292 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket"> 19993 <member name="F:OpenMetaverse.ObjectMovementUpdate.Position">
21293 <exclude /> 19994 <summary></summary>
21294 </member> 19995 </member>
21295 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket.RegionDataBlock"> 19996 <member name="F:OpenMetaverse.ObjectMovementUpdate.Velocity">
21296 <exclude /> 19997 <summary></summary>
21297 </member> 19998 </member>
21298 <member name="T:OpenMetaverse.Packets.ObjectUpdateCachedPacket.ObjectDataBlock"> 19999 <member name="F:OpenMetaverse.ObjectMovementUpdate.Acceleration">
21299 <exclude /> 20000 <summary></summary>
21300 </member> 20001 </member>
21301 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket"> 20002 <member name="F:OpenMetaverse.ObjectMovementUpdate.Rotation">
21302 <exclude /> 20003 <summary></summary>
21303 </member> 20004 </member>
21304 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket.RegionDataBlock"> 20005 <member name="F:OpenMetaverse.ObjectMovementUpdate.AngularVelocity">
21305 <exclude /> 20006 <summary></summary>
21306 </member> 20007 </member>
21307 <member name="T:OpenMetaverse.Packets.ImprovedTerseObjectUpdatePacket.ObjectDataBlock"> 20008 <member name="F:OpenMetaverse.ObjectMovementUpdate.Textures">
21308 <exclude /> 20009 <summary></summary>
21309 </member> 20010 </member>
21310 <member name="T:OpenMetaverse.Packets.KillObjectPacket"> 20011 <member name="T:OpenMetaverse.ObjectManager">
21311 <exclude /> 20012 <summary>
20013 Handles all network traffic related to prims and avatar positions and
20014 movement.
20015 </summary>
21312 </member> 20016 </member>
21313 <member name="T:OpenMetaverse.Packets.KillObjectPacket.ObjectDataBlock"> 20017 <member name="F:OpenMetaverse.ObjectManager.m_ObjectUpdate">
21314 <exclude /> 20018 <summary>The event subscribers, null of no subscribers</summary>
21315 </member> 20019 </member>
21316 <member name="T:OpenMetaverse.Packets.TransferPacketPacket"> 20020 <member name="F:OpenMetaverse.ObjectManager.m_ObjectUpdateLock">
21317 <exclude /> 20021 <summary>Thread sync lock object</summary>
21318 </member> 20022 </member>
21319 <member name="T:OpenMetaverse.Packets.TransferPacketPacket.TransferDataBlock"> 20023 <member name="F:OpenMetaverse.ObjectManager.m_ObjectProperties">
21320 <exclude /> 20024 <summary>The event subscribers, null of no subscribers</summary>
21321 </member> 20025 </member>
21322 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket"> 20026 <member name="M:OpenMetaverse.ObjectManager.OnObjectProperties(OpenMetaverse.ObjectPropertiesEventArgs)">
21323 <exclude /> 20027 <summary>Raises the ObjectProperties Event</summary>
20028 <param name="e">A ObjectPropertiesEventArgs object containing
20029 the data sent from the simulator</param>
21324 </member> 20030 </member>
21325 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket.XferIDBlock"> 20031 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesLock">
21326 <exclude /> 20032 <summary>Thread sync lock object</summary>
21327 </member> 20033 </member>
21328 <member name="T:OpenMetaverse.Packets.SendXferPacketPacket.DataPacketBlock"> 20034 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesUpdated">
21329 <exclude /> 20035 <summary>The event subscribers, null of no subscribers</summary>
21330 </member> 20036 </member>
21331 <member name="T:OpenMetaverse.Packets.ConfirmXferPacketPacket"> 20037 <member name="M:OpenMetaverse.ObjectManager.OnObjectPropertiesUpdated(OpenMetaverse.ObjectPropertiesUpdatedEventArgs)">
21332 <exclude /> 20038 <summary>Raises the ObjectPropertiesUpdated Event</summary>
20039 <param name="e">A ObjectPropertiesUpdatedEventArgs object containing
20040 the data sent from the simulator</param>
21333 </member> 20041 </member>
21334 <member name="T:OpenMetaverse.Packets.ConfirmXferPacketPacket.XferIDBlock"> 20042 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesUpdatedLock">
21335 <exclude /> 20043 <summary>Thread sync lock object</summary>
21336 </member> 20044 </member>
21337 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket"> 20045 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesFamily">
21338 <exclude /> 20046 <summary>The event subscribers, null of no subscribers</summary>
21339 </member> 20047 </member>
21340 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.SenderBlock"> 20048 <member name="M:OpenMetaverse.ObjectManager.OnObjectPropertiesFamily(OpenMetaverse.ObjectPropertiesFamilyEventArgs)">
21341 <exclude /> 20049 <summary>Raises the ObjectPropertiesFamily Event</summary>
20050 <param name="e">A ObjectPropertiesFamilyEventArgs object containing
20051 the data sent from the simulator</param>
21342 </member> 20052 </member>
21343 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.AnimationListBlock"> 20053 <member name="F:OpenMetaverse.ObjectManager.m_ObjectPropertiesFamilyLock">
21344 <exclude /> 20054 <summary>Thread sync lock object</summary>
21345 </member> 20055 </member>
21346 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.AnimationSourceListBlock"> 20056 <member name="F:OpenMetaverse.ObjectManager.m_AvatarUpdate">
21347 <exclude /> 20057 <summary>The event subscribers, null of no subscribers</summary>
21348 </member> 20058 </member>
21349 <member name="T:OpenMetaverse.Packets.AvatarAnimationPacket.PhysicalAvatarEventListBlock"> 20059 <member name="M:OpenMetaverse.ObjectManager.OnAvatarUpdate(OpenMetaverse.AvatarUpdateEventArgs)">
21350 <exclude /> 20060 <summary>Raises the AvatarUpdate Event</summary>
20061 <param name="e">A AvatarUpdateEventArgs object containing
20062 the data sent from the simulator</param>
21351 </member> 20063 </member>
21352 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket"> 20064 <member name="F:OpenMetaverse.ObjectManager.m_AvatarUpdateLock">
21353 <exclude /> 20065 <summary>Thread sync lock object</summary>
21354 </member> 20066 </member>
21355 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket.SitObjectBlock"> 20067 <member name="F:OpenMetaverse.ObjectManager.m_TerseObjectUpdate">
21356 <exclude /> 20068 <summary>The event subscribers, null of no subscribers</summary>
21357 </member> 20069 </member>
21358 <member name="T:OpenMetaverse.Packets.AvatarSitResponsePacket.SitTransformBlock"> 20070 <member name="F:OpenMetaverse.ObjectManager.m_TerseObjectUpdateLock">
21359 <exclude /> 20071 <summary>Thread sync lock object</summary>
21360 </member> 20072 </member>
21361 <member name="T:OpenMetaverse.Packets.CameraConstraintPacket"> 20073 <member name="F:OpenMetaverse.ObjectManager.m_ObjectDataBlockUpdate">
21362 <exclude /> 20074 <summary>The event subscribers, null of no subscribers</summary>
21363 </member> 20075 </member>
21364 <member name="T:OpenMetaverse.Packets.CameraConstraintPacket.CameraCollidePlaneBlock"> 20076 <member name="M:OpenMetaverse.ObjectManager.OnObjectDataBlockUpdate(OpenMetaverse.ObjectDataBlockUpdateEventArgs)">
21365 <exclude /> 20077 <summary>Raises the ObjectDataBlockUpdate Event</summary>
20078 <param name="e">A ObjectDataBlockUpdateEventArgs object containing
20079 the data sent from the simulator</param>
21366 </member> 20080 </member>
21367 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket"> 20081 <member name="F:OpenMetaverse.ObjectManager.m_ObjectDataBlockUpdateLock">
21368 <exclude /> 20082 <summary>Thread sync lock object</summary>
21369 </member> 20083 </member>
21370 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket.ParcelDataBlock"> 20084 <member name="F:OpenMetaverse.ObjectManager.m_KillObject">
21371 <exclude /> 20085 <summary>The event subscribers, null of no subscribers</summary>
21372 </member> 20086 </member>
21373 <member name="T:OpenMetaverse.Packets.ParcelPropertiesPacket.AgeVerificationBlockBlock"> 20087 <member name="M:OpenMetaverse.ObjectManager.OnKillObject(OpenMetaverse.KillObjectEventArgs)">
21374 <exclude /> 20088 <summary>Raises the KillObject Event</summary>
20089 <param name="e">A KillObjectEventArgs object containing
20090 the data sent from the simulator</param>
21375 </member> 20091 </member>
21376 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket"> 20092 <member name="F:OpenMetaverse.ObjectManager.m_KillObjectLock">
21377 <exclude /> 20093 <summary>Thread sync lock object</summary>
21378 </member> 20094 </member>
21379 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentDataBlock"> 20095 <member name="F:OpenMetaverse.ObjectManager.m_KillObjects">
21380 <exclude /> 20096 <summary>The event subscribers, null of no subscribers</summary>
21381 </member> 20097 </member>
21382 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.GroupDataBlock"> 20098 <member name="M:OpenMetaverse.ObjectManager.OnKillObjects(OpenMetaverse.KillObjectsEventArgs)">
21383 <exclude /> 20099 <summary>Raises the KillObjects Event</summary>
20100 <param name="e">A KillObjectsEventArgs object containing
20101 the data sent from the simulator</param>
21384 </member> 20102 </member>
21385 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AnimationDataBlock"> 20103 <member name="F:OpenMetaverse.ObjectManager.m_KillObjectsLock">
21386 <exclude /> 20104 <summary>Thread sync lock object</summary>
21387 </member> 20105 </member>
21388 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.GranterBlockBlock"> 20106 <member name="F:OpenMetaverse.ObjectManager.m_AvatarSitChanged">
21389 <exclude /> 20107 <summary>The event subscribers, null of no subscribers</summary>
21390 </member> 20108 </member>
21391 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.NVPairDataBlock"> 20109 <member name="M:OpenMetaverse.ObjectManager.OnAvatarSitChanged(OpenMetaverse.AvatarSitChangedEventArgs)">
21392 <exclude /> 20110 <summary>Raises the AvatarSitChanged Event</summary>
20111 <param name="e">A AvatarSitChangedEventArgs object containing
20112 the data sent from the simulator</param>
21393 </member> 20113 </member>
21394 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.VisualParamBlock"> 20114 <member name="F:OpenMetaverse.ObjectManager.m_AvatarSitChangedLock">
21395 <exclude /> 20115 <summary>Thread sync lock object</summary>
21396 </member> 20116 </member>
21397 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentAccessBlock"> 20117 <member name="F:OpenMetaverse.ObjectManager.m_PayPriceReply">
21398 <exclude /> 20118 <summary>The event subscribers, null of no subscribers</summary>
21399 </member> 20119 </member>
21400 <member name="T:OpenMetaverse.Packets.ChildAgentUpdatePacket.AgentInfoBlock"> 20120 <member name="M:OpenMetaverse.ObjectManager.OnPayPriceReply(OpenMetaverse.PayPriceReplyEventArgs)">
21401 <exclude /> 20121 <summary>Raises the PayPriceReply Event</summary>
20122 <param name="e">A PayPriceReplyEventArgs object containing
20123 the data sent from the simulator</param>
21402 </member> 20124 </member>
21403 <member name="T:OpenMetaverse.Packets.ChildAgentAlivePacket"> 20125 <member name="F:OpenMetaverse.ObjectManager.m_PayPriceReplyLock">
21404 <exclude /> 20126 <summary>Thread sync lock object</summary>
21405 </member> 20127 </member>
21406 <member name="T:OpenMetaverse.Packets.ChildAgentAlivePacket.AgentDataBlock"> 20128 <member name="F:OpenMetaverse.ObjectManager.m_PhysicsProperties">
21407 <exclude /> 20129 <summary>The event subscribers, null of no subscribers</summary>
21408 </member> 20130 </member>
21409 <member name="T:OpenMetaverse.Packets.ChildAgentPositionUpdatePacket"> 20131 <member name="M:OpenMetaverse.ObjectManager.OnPhysicsProperties(OpenMetaverse.PhysicsPropertiesEventArgs)">
21410 <exclude /> 20132 <summary>Raises the PhysicsProperties Event</summary>
20133 <param name="e">A PhysicsPropertiesEventArgs object containing
20134 the data sent from the simulator</param>
21411 </member> 20135 </member>
21412 <member name="T:OpenMetaverse.Packets.ChildAgentPositionUpdatePacket.AgentDataBlock"> 20136 <member name="F:OpenMetaverse.ObjectManager.m_PhysicsPropertiesLock">
21413 <exclude /> 20137 <summary>Thread sync lock object</summary>
21414 </member> 20138 </member>
21415 <member name="T:OpenMetaverse.Packets.SoundTriggerPacket"> 20139 <member name="F:OpenMetaverse.ObjectManager.Client">
21416 <exclude /> 20140 <summary>Reference to the GridClient object</summary>
21417 </member> 20141 </member>
21418 <member name="T:OpenMetaverse.Packets.SoundTriggerPacket.SoundDataBlock"> 20142 <member name="F:OpenMetaverse.ObjectManager.InterpolationTimer">
21419 <exclude /> 20143 <summary>Does periodic dead reckoning calculation to convert
20144 velocity and acceleration to new positions for objects</summary>
21420 </member> 20145 </member>
21421 <member name="T:OpenMetaverse.VisualColorOperation"> 20146 <member name="M:OpenMetaverse.ObjectManager.#ctor(OpenMetaverse.GridClient)">
21422 <summary> 20147 <summary>
21423 Operation to apply when applying color to texture 20148 Construct a new instance of the ObjectManager class
21424 </summary> 20149 </summary>
20150 <param name="client">A reference to the <see cref="T:OpenMetaverse.GridClient"/> instance</param>
21425 </member> 20151 </member>
21426 <member name="T:OpenMetaverse.VisualColorParam"> 20152 <member name="M:OpenMetaverse.ObjectManager.RequestObject(OpenMetaverse.Simulator,System.UInt32)">
21427 <summary> 20153 <summary>
21428 Information needed to translate visual param value to RGBA color 20154 Request information for a single object from a <see cref="T:OpenMetaverse.Simulator"/>
20155 you are currently connected to
21429 </summary> 20156 </summary>
20157 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20158 <param name="localID">The Local ID of the object</param>
21430 </member> 20159 </member>
21431 <member name="M:OpenMetaverse.VisualColorParam.#ctor(OpenMetaverse.VisualColorOperation,OpenMetaverse.Color4[])"> 20160 <member name="M:OpenMetaverse.ObjectManager.RequestObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
21432 <summary> 20161 <summary>
21433 Construct VisualColorParam 20162 Request information for multiple objects contained in
20163 the same simulator
21434 </summary> 20164 </summary>
21435 <param name="operation">Operation to apply when applying color to texture</param> 20165 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the objects are located</param>
21436 <param name="colors">Colors</param> 20166 <param name="localIDs">An array containing the Local IDs of the objects</param>
21437 </member> 20167 </member>
21438 <member name="T:OpenMetaverse.VisualAlphaParam"> 20168 <member name="M:OpenMetaverse.ObjectManager.BuyObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.SaleType,System.Int32,OpenMetaverse.UUID,OpenMetaverse.UUID)">
21439 <summary> 20169 <summary>
21440 Represents alpha blending and bump infor for a visual parameter 20170 Attempt to purchase an original object, a copy, or the contents of
21441 such as sleive length 20171 an object
21442 </summary> 20172 </summary>
20173 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20174 <param name="localID">The Local ID of the object</param>
20175 <param name="saleType">Whether the original, a copy, or the object
20176 contents are on sale. This is used for verification, if the this
20177 sale type is not valid for the object the purchase will fail</param>
20178 <param name="price">Price of the object. This is used for
20179 verification, if it does not match the actual price the purchase
20180 will fail</param>
20181 <param name="groupID">Group ID that will be associated with the new
20182 purchase</param>
20183 <param name="categoryID">Inventory folder UUID where the object or objects
20184 purchased should be placed</param>
20185 <example>
20186 <code>
20187 BuyObject(Client.Network.CurrentSim, 500, SaleType.Copy,
20188 100, UUID.Zero, Client.Self.InventoryRootFolderUUID);
20189 </code>
20190 </example>
21443 </member> 20191 </member>
21444 <member name="M:OpenMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)"> 20192 <member name="M:OpenMetaverse.ObjectManager.RequestPayPrice(OpenMetaverse.Simulator,OpenMetaverse.UUID)">
21445 <summary> 20193 <summary>
21446 Create new alhpa information for a visual param 20194 Request prices that should be displayed in pay dialog. This will triggger the simulator
20195 to send us back a PayPriceReply which can be handled by OnPayPriceReply event
21447 </summary> 20196 </summary>
21448 <param name="domain">Stregth of the alpha to apply</param> 20197 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
21449 <param name="tgaFile">File containing the alpha channel</param> 20198 <param name="objectID">The ID of the object</param>
21450 <param name="skipIfZero">Skip blending if parameter value is 0</param> 20199 <remarks>The result is raised in the <see cref="E:OpenMetaverse.ObjectManager.PayPriceReply"/> event</remarks>
21451 <param name="multiplyBlend">Use miltiply insted of alpha blending</param>
21452 </member>
21453 <member name="F:OpenMetaverse.VisualAlphaParam.Domain">
21454 <summary>Stregth of the alpha to apply</summary>
21455 </member>
21456 <member name="F:OpenMetaverse.VisualAlphaParam.TGAFile">
21457 <summary>File containing the alpha channel</summary>
21458 </member>
21459 <member name="F:OpenMetaverse.VisualAlphaParam.SkipIfZero">
21460 <summary>Skip blending if parameter value is 0</summary>
21461 </member>
21462 <member name="F:OpenMetaverse.VisualAlphaParam.MultiplyBlend">
21463 <summary>Use miltiply insted of alpha blending</summary>
21464 </member> 20200 </member>
21465 <member name="T:OpenMetaverse.VisualParam"> 20201 <member name="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)">
21466 <summary> 20202 <summary>
21467 A single visual characteristic of an avatar mesh, such as eyebrow height 20203 Select a single object. This will cause the <see cref="T:OpenMetaverse.Simulator"/> to send us
20204 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event
21468 </summary> 20205 </summary>
20206 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20207 <param name="localID">The Local ID of the object</param>
20208 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs"/>
21469 </member> 20209 </member>
21470 <member name="M:OpenMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{OpenMetaverse.VisualAlphaParam},System.Nullable{OpenMetaverse.VisualColorParam})"> 20210 <member name="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32,System.Boolean)">
21471 <summary> 20211 <summary>
21472 Set all the values through the constructor 20212 Select a single object. This will cause the <see cref="T:OpenMetaverse.Simulator"/> to send us
20213 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event
21473 </summary> 20214 </summary>
21474 <param name="paramID">Index of this visual param</param> 20215 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
21475 <param name="name">Internal name</param> 20216 <param name="localID">The Local ID of the object</param>
21476 <param name="group"> 20217 <param name="automaticDeselect">if true, a call to <see cref="M:OpenMetaverse.ObjectManager.DeselectObject(OpenMetaverse.Simulator,System.UInt32)"/> is
21477 </param> 20218 made immediately following the request</param>
21478 <param name="wearable"> 20219 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs"/>
21479 </param>
21480 <param name="label">Displayable label of this characteristic</param>
21481 <param name="labelMin">Displayable label for the minimum value of this characteristic</param>
21482 <param name="labelMax">Displayable label for the maximum value of this characteristic</param>
21483 <param name="def">Default value</param>
21484 <param name="min">Minimum value</param>
21485 <param name="max">Maximum value</param>
21486 <param name="isBumpAttribute">Is this param used for creation of bump layer?</param>
21487 <param name="drivers">Array of param IDs that are drivers for this parameter</param>
21488 <param name="alpha">Alpha blending/bump info</param>
21489 <param name="colorParams">Color information</param>
21490 </member>
21491 <member name="F:OpenMetaverse.VisualParam.ParamID">
21492 <summary>Index of this visual param</summary>
21493 </member>
21494 <member name="F:OpenMetaverse.VisualParam.Name">
21495 <summary>Internal name</summary>
21496 </member>
21497 <member name="F:OpenMetaverse.VisualParam.Group">
21498 <summary>Group ID this parameter belongs to</summary>
21499 </member>
21500 <member name="F:OpenMetaverse.VisualParam.Wearable">
21501 <summary>Name of the wearable this parameter belongs to</summary>
21502 </member>
21503 <member name="F:OpenMetaverse.VisualParam.Label">
21504 <summary>Displayable label of this characteristic</summary>
21505 </member>
21506 <member name="F:OpenMetaverse.VisualParam.LabelMin">
21507 <summary>Displayable label for the minimum value of this characteristic</summary>
21508 </member>
21509 <member name="F:OpenMetaverse.VisualParam.LabelMax">
21510 <summary>Displayable label for the maximum value of this characteristic</summary>
21511 </member>
21512 <member name="F:OpenMetaverse.VisualParam.DefaultValue">
21513 <summary>Default value</summary>
21514 </member>
21515 <member name="F:OpenMetaverse.VisualParam.MinValue">
21516 <summary>Minimum value</summary>
21517 </member>
21518 <member name="F:OpenMetaverse.VisualParam.MaxValue">
21519 <summary>Maximum value</summary>
21520 </member>
21521 <member name="F:OpenMetaverse.VisualParam.IsBumpAttribute">
21522 <summary>Is this param used for creation of bump layer?</summary>
21523 </member>
21524 <member name="F:OpenMetaverse.VisualParam.AlphaParams">
21525 <summary>Alpha blending/bump info</summary>
21526 </member>
21527 <member name="F:OpenMetaverse.VisualParam.ColorParams">
21528 <summary>Color information</summary>
21529 </member> 20220 </member>
21530 <member name="F:OpenMetaverse.VisualParam.Drivers"> 20221 <member name="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[],System.Boolean)">
21531 <summary>Array of param IDs that are drivers for this parameter</summary> 20222 <summary>
20223 Select multiple objects. This will cause the <see cref="T:OpenMetaverse.Simulator"/> to send us
20224 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event
20225 </summary>
20226 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the objects are located</param>
20227 <param name="localIDs">An array containing the Local IDs of the objects</param>
20228 <param name="automaticDeselect">Should objects be deselected immediately after selection</param>
20229 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs"/>
21532 </member> 20230 </member>
21533 <member name="T:OpenMetaverse.VisualParams"> 20231 <member name="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[])">
21534 <summary> 20232 <summary>
21535 Holds the Params array of all the avatar appearance parameters 20233 Select multiple objects. This will cause the <see cref="T:OpenMetaverse.Simulator"/> to send us
21536 </summary> 20234 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> which will raise the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event
20235 </summary>
20236 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the objects are located</param>
20237 <param name="localIDs">An array containing the Local IDs of the objects</param>
20238 <seealso cref="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs"/>
21537 </member> 20239 </member>
21538 <member name="T:OpenMetaverse.Assets.Asset"> 20240 <member name="M:OpenMetaverse.ObjectManager.SetFlags(OpenMetaverse.Simulator,System.UInt32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
21539 <summary> 20241 <summary>
21540 Base class for all Asset types 20242 Update the properties of an object
21541 </summary> 20243 </summary>
20244 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20245 <param name="localID">The Local ID of the object</param>
20246 <param name="physical">true to turn the objects physical property on</param>
20247 <param name="temporary">true to turn the objects temporary property on</param>
20248 <param name="phantom">true to turn the objects phantom property on</param>
20249 <param name="castsShadow">true to turn the objects cast shadows property on</param>
21542 </member> 20250 </member>
21543 <member name="M:OpenMetaverse.Assets.Asset.#ctor"> 20251 <member name="M:OpenMetaverse.ObjectManager.SetFlags(OpenMetaverse.Simulator,System.UInt32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,OpenMetaverse.PhysicsShapeType,System.Single,System.Single,System.Single,System.Single)">
21544 <summary> 20252 <summary>
21545 Construct a new Asset object 20253 Update the properties of an object
21546 </summary> 20254 </summary>
20255 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20256 <param name="localID">The Local ID of the object</param>
20257 <param name="physical">true to turn the objects physical property on</param>
20258 <param name="temporary">true to turn the objects temporary property on</param>
20259 <param name="phantom">true to turn the objects phantom property on</param>
20260 <param name="castsShadow">true to turn the objects cast shadows property on</param>
20261 <param name="physicsType">Type of the represetnation prim will have in the physics engine</param>
20262 <param name="density">Density - normal value 1000</param>
20263 <param name="friction">Friction - normal value 0.6</param>
20264 <param name="restitution">Restitution - standard value 0.5</param>
20265 <param name="gravityMultiplier">Gravity multiplier - standar value 1.0</param>
21547 </member> 20266 </member>
21548 <member name="M:OpenMetaverse.Assets.Asset.#ctor(OpenMetaverse.UUID,System.Byte[])"> 20267 <member name="M:OpenMetaverse.ObjectManager.SetSaleInfo(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.SaleType,System.Int32)">
21549 <summary> 20268 <summary>
21550 Construct a new Asset object 20269 Sets the sale properties of a single object
21551 </summary> 20270 </summary>
21552 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param> 20271 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
21553 <param name="assetData">A byte array containing the raw asset data</param> 20272 <param name="localID">The Local ID of the object</param>
21554 </member> 20273 <param name="saleType">One of the options from the <see cref="T:OpenMetaverse.SaleType"/> enum</param>
21555 <member name="F:OpenMetaverse.Assets.Asset.AssetData"> 20274 <param name="price">The price of the object</param>
21556 <summary>A byte array containing the raw asset data</summary>
21557 </member>
21558 <member name="F:OpenMetaverse.Assets.Asset.Temporary">
21559 <summary>True if the asset it only stored on the server temporarily</summary>
21560 </member>
21561 <member name="F:OpenMetaverse.Assets.Asset._AssetID">
21562 <summary>A unique ID</summary>
21563 </member>
21564 <member name="P:OpenMetaverse.Assets.Asset.AssetID">
21565 <summary>The assets unique ID</summary>
21566 </member> 20275 </member>
21567 <member name="P:OpenMetaverse.Assets.Asset.AssetType"> 20276 <member name="M:OpenMetaverse.ObjectManager.SetSaleInfo(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.SaleType,System.Int32)">
21568 <summary> 20277 <summary>
21569 The "type" of asset, Notecard, Animation, etc 20278 Sets the sale properties of multiple objects
21570 </summary> 20279 </summary>
20280 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the objects are located</param>
20281 <param name="localIDs">An array containing the Local IDs of the objects</param>
20282 <param name="saleType">One of the options from the <see cref="T:OpenMetaverse.SaleType"/> enum</param>
20283 <param name="price">The price of the object</param>
21571 </member> 20284 </member>
21572 <member name="M:OpenMetaverse.Assets.Asset.Encode"> 20285 <member name="M:OpenMetaverse.ObjectManager.DeselectObject(OpenMetaverse.Simulator,System.UInt32)">
21573 <summary> 20286 <summary>
21574 Regenerates the <code>AssetData</code> byte array from the properties 20287 Deselect a single object
21575 of the derived class.
21576 </summary> 20288 </summary>
20289 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20290 <param name="localID">The Local ID of the object</param>
21577 </member> 20291 </member>
21578 <member name="M:OpenMetaverse.Assets.Asset.Decode"> 20292 <member name="M:OpenMetaverse.ObjectManager.DeselectObjects(OpenMetaverse.Simulator,System.UInt32[])">
21579 <summary> 20293 <summary>
21580 Decodes the AssetData, placing it in appropriate properties of the derived 20294 Deselect multiple objects.
21581 class.
21582 </summary> 20295 </summary>
21583 <returns>True if the asset decoding succeeded, otherwise false</returns> 20296 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the objects are located</param>
20297 <param name="localIDs">An array containing the Local IDs of the objects</param>
21584 </member> 20298 </member>
21585 <member name="T:OpenMetaverse.Assets.ArchiveConstants"> 20299 <member name="M:OpenMetaverse.ObjectManager.ClickObject(OpenMetaverse.Simulator,System.UInt32)">
21586 <summary> 20300 <summary>
21587 Constants for the archiving module 20301 Perform a click action on an object
21588 </summary> 20302 </summary>
20303 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20304 <param name="localID">The Local ID of the object</param>
21589 </member> 20305 </member>
21590 <member name="F:OpenMetaverse.Assets.ArchiveConstants.CONTROL_FILE_PATH"> 20306 <member name="M:OpenMetaverse.ObjectManager.ClickObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Int32,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
21591 <summary> 20307 <summary>
21592 The location of the archive control file 20308 Perform a click action (Grab) on a single object
21593 </summary> 20309 </summary>
20310 <param name="simulator">The <see cref="T:OpenMetaverse.Simulator"/> the object is located</param>
20311 <param name="localID">The Local ID of the object</param>
20312 <param name="uvCoord">The texture coordinates to touch</param>
20313 <param name="stCoord">The surface coordinates to touch</param>
20314 <param name="faceIndex">The face of the position to touch</param>
20315 <param name="position">The region coordinates of the position to touch</param>
20316 <param name="normal">The surface normal of the position to touch (A normal is a vector perpindicular to the surface)</param>
20317 <param name="binormal">The surface binormal of the position to touch (A binormal is a vector tangen to the surface
20318 pointing along the U direction of the tangent space</param>
21594 </member> 20319 </member>
21595 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSETS_PATH"> 20320 <member name="M:OpenMetaverse.ObjectManager.AddPrim(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ConstructionData,OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion)">
21596 <summary> 20321 <summary>
21597 Path for the assets held in an archive 20322 Create (rez) a new prim object in a simulator
21598 </summary> 20323 </summary>
20324 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object to place the object in</param>
20325 <param name="prim">Data describing the prim object to rez</param>
20326 <param name="groupID">Group ID that this prim will be set to, or UUID.Zero if you
20327 do not want the object to be associated with a specific group</param>
20328 <param name="position">An approximation of the position at which to rez the prim</param>
20329 <param name="scale">Scale vector to size this prim</param>
20330 <param name="rotation">Rotation quaternion to rotate this prim</param>
20331 <remarks>Due to the way client prim rezzing is done on the server,
20332 the requested position for an object is only close to where the prim
20333 actually ends up. If you desire exact placement you'll need to
20334 follow up by moving the object after it has been created. This
20335 function will not set textures, light and flexible data, or other
20336 extended primitive properties</remarks>
21599 </member> 20337 </member>
21600 <member name="F:OpenMetaverse.Assets.ArchiveConstants.OBJECTS_PATH"> 20338 <member name="M:OpenMetaverse.ObjectManager.AddPrim(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ConstructionData,OpenMetaverse.UUID,OpenMetaverse.Vector3,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.PrimFlags)">
21601 <summary> 20339 <summary>
21602 Path for the prims file 20340 Create (rez) a new prim object in a simulator
21603 </summary> 20341 </summary>
20342 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object to place the object in</param>
20343 <param name="prim">Data describing the prim object to rez</param>
20344 <param name="groupID">Group ID that this prim will be set to, or UUID.Zero if you
20345 do not want the object to be associated with a specific group</param>
20346 <param name="position">An approximation of the position at which to rez the prim</param>
20347 <param name="scale">Scale vector to size this prim</param>
20348 <param name="rotation">Rotation quaternion to rotate this prim</param>
20349 <param name="createFlags">Specify the <seealso cref="T:OpenMetaverse.PrimFlags"/></param>
20350 <remarks>Due to the way client prim rezzing is done on the server,
20351 the requested position for an object is only close to where the prim
20352 actually ends up. If you desire exact placement you'll need to
20353 follow up by moving the object after it has been created. This
20354 function will not set textures, light and flexible data, or other
20355 extended primitive properties</remarks>
21604 </member> 20356 </member>
21605 <member name="F:OpenMetaverse.Assets.ArchiveConstants.TERRAINS_PATH"> 20357 <member name="M:OpenMetaverse.ObjectManager.AddTree(OpenMetaverse.Simulator,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.Tree,OpenMetaverse.UUID,System.Boolean)">
21606 <summary> 20358 <summary>
21607 Path for terrains. Technically these may be assets, but I think it's quite nice to split them out. 20359 Rez a Linden tree
21608 </summary> 20360 </summary>
20361 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20362 <param name="scale">The size of the tree</param>
20363 <param name="rotation">The rotation of the tree</param>
20364 <param name="position">The position of the tree</param>
20365 <param name="treeType">The Type of tree</param>
20366 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID"/> of the group to set the tree to,
20367 or UUID.Zero if no group is to be set</param>
20368 <param name="newTree">true to use the "new" Linden trees, false to use the old</param>
21609 </member> 20369 </member>
21610 <member name="F:OpenMetaverse.Assets.ArchiveConstants.SETTINGS_PATH"> 20370 <member name="M:OpenMetaverse.ObjectManager.AddGrass(OpenMetaverse.Simulator,OpenMetaverse.Vector3,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.Grass,OpenMetaverse.UUID)">
21611 <summary> 20371 <summary>
21612 Path for region settings. 20372 Rez grass and ground cover
21613 </summary> 20373 </summary>
20374 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20375 <param name="scale">The size of the grass</param>
20376 <param name="rotation">The rotation of the grass</param>
20377 <param name="position">The position of the grass</param>
20378 <param name="grassType">The type of grass from the <seealso cref="T:OpenMetaverse.Grass"/> enum</param>
20379 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID"/> of the group to set the tree to,
20380 or UUID.Zero if no group is to be set</param>
21614 </member> 20381 </member>
21615 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSET_EXTENSION_SEPARATOR"> 20382 <member name="M:OpenMetaverse.ObjectManager.SetTextures(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.TextureEntry)">
21616 <summary> 20383 <summary>
21617 The character the separates the uuid from extension information in an archived asset filename 20384 Set the textures to apply to the faces of an object
21618 </summary> 20385 </summary>
20386 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20387 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20388 <param name="textures">The texture data to apply</param>
21619 </member> 20389 </member>
21620 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSET_TYPE_TO_EXTENSION"> 20390 <member name="M:OpenMetaverse.ObjectManager.SetTextures(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.TextureEntry,System.String)">
21621 <summary> 20391 <summary>
21622 Extensions used for asset types in the archive 20392 Set the textures to apply to the faces of an object
21623 </summary> 20393 </summary>
20394 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20395 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20396 <param name="textures">The texture data to apply</param>
20397 <param name="mediaUrl">A media URL (not used)</param>
21624 </member> 20398 </member>
21625 <member name="T:OpenMetaverse.Assets.AssetsArchiver"> 20399 <member name="M:OpenMetaverse.ObjectManager.SetLight(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.LightData)">
21626 <summary> 20400 <summary>
21627 Archives assets 20401 Set the Light data on an object
21628 </summary> 20402 </summary>
20403 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20404 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20405 <param name="light">A <seealso cref="T:OpenMetaverse.Primitive.LightData"/> object containing the data to set</param>
21629 </member> 20406 </member>
21630 <member name="F:OpenMetaverse.Assets.AssetsArchiver.m_assets"> 20407 <member name="M:OpenMetaverse.ObjectManager.SetFlexible(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.FlexibleData)">
21631 <summary> 20408 <summary>
21632 Archive assets 20409 Set the flexible data on an object
21633 </summary> 20410 </summary>
20411 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20412 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20413 <param name="flexible">A <seealso cref="T:OpenMetaverse.Primitive.FlexibleData"/> object containing the data to set</param>
21634 </member> 20414 </member>
21635 <member name="M:OpenMetaverse.Assets.AssetsArchiver.Archive(OpenMetaverse.Assets.TarArchiveWriter)"> 20415 <member name="M:OpenMetaverse.ObjectManager.SetSculpt(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.SculptData)">
21636 <summary> 20416 <summary>
21637 Archive the assets given to this archiver to the given archive. 20417 Set the sculptie texture and data on an object
21638 </summary> 20418 </summary>
21639 <param name="archive"> 20419 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21640 </param> 20420 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20421 <param name="sculpt">A <seealso cref="T:OpenMetaverse.Primitive.SculptData"/> object containing the data to set</param>
21641 </member> 20422 </member>
21642 <member name="M:OpenMetaverse.Assets.AssetsArchiver.WriteMetadata(OpenMetaverse.Assets.TarArchiveWriter)"> 20423 <member name="M:OpenMetaverse.ObjectManager.SetExtraParamOff(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.ExtraParamType)">
21643 <summary> 20424 <summary>
21644 Write an assets metadata file to the given archive 20425 Unset additional primitive parameters on an object
21645 </summary> 20426 </summary>
21646 <param name="archive"> 20427 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21647 </param> 20428 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20429 <param name="type">The extra parameters to set</param>
21648 </member> 20430 </member>
21649 <member name="M:OpenMetaverse.Assets.AssetsArchiver.WriteData(OpenMetaverse.Assets.TarArchiveWriter)"> 20431 <member name="M:OpenMetaverse.ObjectManager.LinkPrims(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
21650 <summary> 20432 <summary>
21651 Write asset data files to the given archive 20433 Link multiple prims into a linkset
21652 </summary> 20434 </summary>
21653 <param name="archive"> 20435 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
21654 </param> 20436 <param name="localIDs">An array which contains the IDs of the objects to link</param>
20437 <remarks>The last object in the array will be the root object of the linkset TODO: Is this true?</remarks>
21655 </member> 20438 </member>
21656 <member name="T:OpenMetaverse.Assets.TarArchiveReader"> 20439 <member name="M:OpenMetaverse.ObjectManager.DelinkPrims(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
21657 <summary> 20440 <summary>
21658 Temporary code to do the bare minimum required to read a tar archive for our purposes 20441 Delink/Unlink multiple prims from a linkset
21659 </summary> 20442 </summary>
20443 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
20444 <param name="localIDs">An array which contains the IDs of the objects to delink</param>
21660 </member> 20445 </member>
21661 <member name="M:OpenMetaverse.Assets.TarArchiveReader.#ctor(System.IO.Stream)"> 20446 <member name="M:OpenMetaverse.ObjectManager.SetRotation(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Quaternion)">
21662 <summary> 20447 <summary>
21663 Generate a tar reader which reads from the given stream. 20448 Change the rotation of an object
21664 </summary> 20449 </summary>
21665 <param name="s"> 20450 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21666 </param> 20451 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20452 <param name="rotation">The new rotation of the object</param>
21667 </member> 20453 </member>
21668 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_br"> 20454 <member name="M:OpenMetaverse.ObjectManager.SetName(OpenMetaverse.Simulator,System.UInt32,System.String)">
21669 <summary> 20455 <summary>
21670 Binary reader for the underlying stream 20456 Set the name of an object
21671 </summary> 20457 </summary>
20458 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20459 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20460 <param name="name">A string containing the new name of the object</param>
21672 </member> 20461 </member>
21673 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_nullCharArray"> 20462 <member name="M:OpenMetaverse.ObjectManager.SetNames(OpenMetaverse.Simulator,System.UInt32[],System.String[])">
21674 <summary> 20463 <summary>
21675 Used to trim off null chars 20464 Set the name of multiple objects
21676 </summary> 20465 </summary>
20466 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
20467 <param name="localIDs">An array which contains the IDs of the objects to change the name of</param>
20468 <param name="names">An array which contains the new names of the objects</param>
21677 </member> 20469 </member>
21678 <member name="F:OpenMetaverse.Assets.TarArchiveReader.m_spaceCharArray"> 20470 <member name="M:OpenMetaverse.ObjectManager.SetDescription(OpenMetaverse.Simulator,System.UInt32,System.String)">
21679 <summary> 20471 <summary>
21680 Used to trim off space chars 20472 Set the description of an object
21681 </summary> 20473 </summary>
20474 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20475 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20476 <param name="description">A string containing the new description of the object</param>
21682 </member> 20477 </member>
21683 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadEntry(System.String@,OpenMetaverse.Assets.TarArchiveReader.TarEntryType@)"> 20478 <member name="M:OpenMetaverse.ObjectManager.SetDescriptions(OpenMetaverse.Simulator,System.UInt32[],System.String[])">
21684 <summary> 20479 <summary>
21685 Read the next entry in the tar file. 20480 Set the descriptions of multiple objects
21686 </summary> 20481 </summary>
21687 <param name="filePath"> 20482 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
21688 </param> 20483 <param name="localIDs">An array which contains the IDs of the objects to change the description of</param>
21689 <param name="entryType"> 20484 <param name="descriptions">An array which contains the new descriptions of the objects</param>
21690 </param>
21691 <returns>the data for the entry. Returns null if there are no more entries</returns>
21692 </member> 20485 </member>
21693 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadHeader"> 20486 <member name="M:OpenMetaverse.ObjectManager.AttachObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.AttachmentPoint,OpenMetaverse.Quaternion)">
21694 <summary> 20487 <summary>
21695 Read the next 512 byte chunk of data as a tar header. 20488 Attach an object to this avatar
21696 </summary> 20489 </summary>
21697 <returns>A tar header struct. null if we have reached the end of the archive.</returns> 20490 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20491 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20492 <param name="attachPoint">The point on the avatar the object will be attached</param>
20493 <param name="rotation">The rotation of the attached object</param>
21698 </member> 20494 </member>
21699 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ReadData(System.Int32)"> 20495 <member name="M:OpenMetaverse.ObjectManager.DropObject(OpenMetaverse.Simulator,System.UInt32)">
21700 <summary> 20496 <summary>
21701 Read data following a header 20497 Drop an attached object from this avatar
21702 </summary> 20498 </summary>
21703 <param name="fileSize"> 20499 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/>
20500 object where the objects reside. This will always be the simulator the avatar is currently in
21704 </param> 20501 </param>
21705 <returns> 20502 <param name="localID">The object's ID which is local to the simulator the object is in</param>
21706 </returns>
21707 </member> 20503 </member>
21708 <member name="M:OpenMetaverse.Assets.TarArchiveReader.ConvertOctalBytesToDecimal(System.Byte[],System.Int32,System.Int32)"> 20504 <member name="M:OpenMetaverse.ObjectManager.DetachObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})">
21709 <summary> 20505 <summary>
21710 Convert octal bytes to a decimal representation 20506 Detach an object from yourself
21711 </summary> 20507 </summary>
21712 <param name="bytes"> 20508 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/>
21713 </param> 20509 object where the objects reside
21714 <param name="count"> 20510
21715 </param> 20511 This will always be the simulator the avatar is currently in
21716 <param name="startIndex">
21717 </param> 20512 </param>
21718 <returns> 20513 <param name="localIDs">An array which contains the IDs of the objects to detach</param>
21719 </returns>
21720 </member> 20514 </member>
21721 <member name="T:OpenMetaverse.Assets.TarArchiveWriter"> 20515 <member name="M:OpenMetaverse.ObjectManager.SetPosition(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3)">
21722 <summary> 20516 <summary>
21723 Temporary code to produce a tar archive in tar v7 format 20517 Change the position of an object, Will change position of entire linkset
21724 </summary> 20518 </summary>
20519 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20520 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20521 <param name="position">The new position of the object</param>
21725 </member> 20522 </member>
21726 <member name="F:OpenMetaverse.Assets.TarArchiveWriter.m_bw"> 20523 <member name="M:OpenMetaverse.ObjectManager.SetPosition(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,System.Boolean)">
21727 <summary> 20524 <summary>
21728 Binary writer for the underlying stream 20525 Change the position of an object
21729 </summary> 20526 </summary>
20527 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20528 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20529 <param name="position">The new position of the object</param>
20530 <param name="childOnly">if true, will change position of (this) child prim only, not entire linkset</param>
21730 </member> 20531 </member>
21731 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteDir(System.String)"> 20532 <member name="M:OpenMetaverse.ObjectManager.SetScale(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,System.Boolean,System.Boolean)">
21732 <summary> 20533 <summary>
21733 Write a directory entry to the tar archive. We can only handle one path level right now! 20534 Change the Scale (size) of an object
21734 </summary> 20535 </summary>
21735 <param name="dirName"> 20536 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21736 </param> 20537 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20538 <param name="scale">The new scale of the object</param>
20539 <param name="childOnly">If true, will change scale of this prim only, not entire linkset</param>
20540 <param name="uniform">True to resize prims uniformly</param>
21737 </member> 20541 </member>
21738 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteFile(System.String,System.String)"> 20542 <member name="M:OpenMetaverse.ObjectManager.SetRotation(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Quaternion,System.Boolean)">
21739 <summary> 20543 <summary>
21740 Write a file to the tar archive 20544 Change the Rotation of an object that is either a child or a whole linkset
21741 </summary> 20545 </summary>
21742 <param name="filePath"> 20546 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21743 </param> 20547 <param name="localID">The objects ID which is local to the simulator the object is in</param>
21744 <param name="data"> 20548 <param name="quat">The new scale of the object</param>
21745 </param> 20549 <param name="childOnly">If true, will change rotation of this prim only, not entire linkset</param>
21746 </member> 20550 </member>
21747 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteFile(System.String,System.Byte[])"> 20551 <member name="M:OpenMetaverse.ObjectManager.UpdateObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Vector3,OpenMetaverse.UpdateType)">
21748 <summary> 20552 <summary>
21749 Write a file to the tar archive 20553 Send a Multiple Object Update packet to change the size, scale or rotation of a primitive
21750 </summary> 20554 </summary>
21751 <param name="filePath"> 20555 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21752 </param> 20556 <param name="localID">The objects ID which is local to the simulator the object is in</param>
21753 <param name="data"> 20557 <param name="data">The new rotation, size, or position of the target object</param>
21754 </param> 20558 <param name="type">The flags from the <seealso cref="T:OpenMetaverse.UpdateType"/> Enum</param>
21755 </member> 20559 </member>
21756 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.Close"> 20560 <member name="M:OpenMetaverse.ObjectManager.DeedObject(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
21757 <summary> 20561 <summary>
21758 Finish writing the raw tar archive data to a stream. The stream will be closed on completion. 20562 Deed an object (prim) to a group, Object must be shared with group which
20563 can be accomplished with SetPermissions()
21759 </summary> 20564 </summary>
20565 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20566 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20567 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID"/> of the group to deed the object to</param>
21760 </member> 20568 </member>
21761 <member name="M:OpenMetaverse.Assets.TarArchiveWriter.WriteEntry(System.String,System.Byte[],System.Char)"> 20569 <member name="M:OpenMetaverse.ObjectManager.DeedObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.UUID)">
21762 <summary> 20570 <summary>
21763 Write a particular entry 20571 Deed multiple objects (prims) to a group, Objects must be shared with group which
20572 can be accomplished with SetPermissions()
21764 </summary> 20573 </summary>
21765 <param name="filePath"> 20574 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21766 </param> 20575 <param name="localIDs">An array which contains the IDs of the objects to deed</param>
21767 <param name="data"> 20576 <param name="groupOwner">The <seealso cref="T:OpenMetaverse.UUID"/> of the group to deed the object to</param>
21768 </param>
21769 <param name="fileType">
21770 </param>
21771 </member> 20577 </member>
21772 <member name="T:OpenMetaverse.Assets.AssetAnimation"> 20578 <member name="M:OpenMetaverse.ObjectManager.SetPermissions(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.PermissionWho,OpenMetaverse.PermissionMask,System.Boolean)">
21773 <summary> 20579 <summary>
21774 Represents an Animation 20580 Set the permissions on multiple objects
21775 </summary> 20581 </summary>
20582 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
20583 <param name="localIDs">An array which contains the IDs of the objects to set the permissions on</param>
20584 <param name="who">The new Who mask to set</param>
20585 <param name="permissions">Which permission to modify</param>
20586 <param name="set">The new state of permission</param>
21776 </member> 20587 </member>
21777 <member name="M:OpenMetaverse.Assets.AssetAnimation.#ctor"> 20588 <member name="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID)">
21778 <summary>Default Constructor</summary>
21779 </member>
21780 <member name="M:OpenMetaverse.Assets.AssetAnimation.#ctor(OpenMetaverse.UUID,System.Byte[])">
21781 <summary> 20589 <summary>
21782 Construct an Asset object of type Animation 20590 Request additional properties for an object
21783 </summary> 20591 </summary>
21784 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param> 20592 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
21785 <param name="assetData">A byte array containing the raw asset data</param> 20593 <param name="objectID"></param>
21786 </member> 20594 </member>
21787 <member name="P:OpenMetaverse.Assets.AssetAnimation.AssetType"> 20595 <member name="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID,System.Boolean)">
21788 <summary>Override the base classes AssetType</summary>
21789 </member>
21790 <member name="T:OpenMetaverse.Assets.AssetBodypart">
21791 <summary> 20596 <summary>
21792 Represents an <seealso cref="T:OpenMetaverse.Assets.AssetWearable" /> that represents an avatars body ie: Hair, Etc. 20597 Request additional properties for an object
21793 </summary> 20598 </summary>
20599 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20600 <param name="objectID">Absolute UUID of the object</param>
20601 <param name="reliable">Whether to require server acknowledgement of this request</param>
21794 </member> 20602 </member>
21795 <member name="M:OpenMetaverse.Assets.AssetBodypart.#ctor"> 20603 <member name="M:OpenMetaverse.ObjectManager.SetObjectsGroup(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32},OpenMetaverse.UUID)">
21796 <summary>Initializes a new instance of an AssetBodyPart object</summary>
21797 </member>
21798 <member name="M:OpenMetaverse.Assets.AssetBodypart.#ctor(OpenMetaverse.UUID,System.Byte[])">
21799 <summary>Initializes a new instance of an AssetBodyPart object with parameters</summary>
21800 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
21801 <param name="assetData">A byte array containing the raw asset data</param>
21802 </member>
21803 <member name="P:OpenMetaverse.Assets.AssetBodypart.AssetType">
21804 <summary>Override the base classes AssetType</summary>
21805 </member>
21806 <member name="T:OpenMetaverse.Assets.AssetClothing">
21807 <summary> 20604 <summary>
21808 Represents an <seealso cref="T:OpenMetaverse.Assets.AssetWearable" /> that can be worn on an avatar 20605 Set the ownership of a list of objects to the specified group
21809 such as a Shirt, Pants, etc.
21810 </summary> 20606 </summary>
20607 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the objects reside</param>
20608 <param name="localIds">An array which contains the IDs of the objects to set the group id on</param>
20609 <param name="groupID">The Groups ID</param>
21811 </member> 20610 </member>
21812 <member name="M:OpenMetaverse.Assets.AssetClothing.#ctor"> 20611 <member name="M:OpenMetaverse.ObjectManager.NavigateObjectMedia(OpenMetaverse.UUID,System.Int32,System.String,OpenMetaverse.Simulator)">
21813 <summary>Initializes a new instance of an AssetScriptBinary object</summary>
21814 </member>
21815 <member name="M:OpenMetaverse.Assets.AssetClothing.#ctor(OpenMetaverse.UUID,System.Byte[])">
21816 <summary>Initializes a new instance of an AssetScriptBinary object with parameters</summary>
21817 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
21818 <param name="assetData">A byte array containing the raw asset data</param>
21819 </member>
21820 <member name="P:OpenMetaverse.Assets.AssetClothing.AssetType">
21821 <summary>Override the base classes AssetType</summary>
21822 </member>
21823 <member name="T:OpenMetaverse.Assets.GestureStepType">
21824 <summary> 20612 <summary>
21825 Type of gesture step 20613 Update current URL of the previously set prim media
21826 </summary> 20614 </summary>
20615 <param name="primID">UUID of the prim</param>
20616 <param name="newURL">Set current URL to this</param>
20617 <param name="face">Prim face number</param>
20618 <param name="sim">Simulator in which prim is located</param>
21827 </member> 20619 </member>
21828 <member name="T:OpenMetaverse.Assets.GestureStep"> 20620 <member name="M:OpenMetaverse.ObjectManager.UpdateObjectMedia(OpenMetaverse.UUID,OpenMetaverse.MediaEntry[],OpenMetaverse.Simulator)">
21829 <summary> 20621 <summary>
21830 Base class for gesture steps 20622 Set object media
21831 </summary> 20623 </summary>
20624 <param name="primID">UUID of the prim</param>
20625 <param name="faceMedia">Array the length of prims number of faces. Null on face indexes where there is
20626 no media, <seealso cref="T:OpenMetaverse.MediaEntry"/> on faces which contain the media</param>
20627 <param name="sim">Simulatior in which prim is located</param>
21832 </member> 20628 </member>
21833 <member name="P:OpenMetaverse.Assets.GestureStep.GestureStepType"> 20629 <member name="M:OpenMetaverse.ObjectManager.RequestObjectMedia(OpenMetaverse.UUID,OpenMetaverse.Simulator,OpenMetaverse.ObjectManager.ObjectMediaCallback)">
21834 <summary> 20630 <summary>
21835 Retururns what kind of gesture step this is 20631 Retrieve information about object media
21836 </summary> 20632 </summary>
20633 <param name="primID">UUID of the primitive</param>
20634 <param name="sim">Simulator where prim is located</param>
20635 <param name="callback">Call this callback when done</param>
21837 </member> 20636 </member>
21838 <member name="T:OpenMetaverse.Assets.GestureStepAnimation"> 20637 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21839 <summary> 20638 <summary>Process an incoming packet and raise the appropriate events</summary>
21840 Describes animation step of a gesture 20639 <param name="sender">The sender</param>
21841 </summary> 20640 <param name="e">The EventArgs object containing the packet data</param>
21842 </member> 20641 </member>
21843 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.AnimationStart"> 20642 <member name="M:OpenMetaverse.ObjectManager.ImprovedTerseObjectUpdateHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21844 <summary> 20643 <summary>
21845 If true, this step represents start of animation, otherwise animation stop 20644 A terse object update, used when a transformation matrix or
20645 velocity/acceleration for an object changes but nothing else
20646 (scale/position/rotation/acceleration/velocity)
21846 </summary> 20647 </summary>
20648 <param name="sender">The sender</param>
20649 <param name="e">The EventArgs object containing the packet data</param>
21847 </member> 20650 </member>
21848 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.ID"> 20651 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateCompressedHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21849 <summary> 20652 <summary>Process an incoming packet and raise the appropriate events</summary>
21850 Animation asset <see cref="T:OpenMetaverse.UUID" /></summary> 20653 <param name="sender">The sender</param>
20654 <param name="e">The EventArgs object containing the packet data</param>
21851 </member> 20655 </member>
21852 <member name="F:OpenMetaverse.Assets.GestureStepAnimation.Name"> 20656 <member name="M:OpenMetaverse.ObjectManager.ObjectUpdateCachedHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21853 <summary> 20657 <summary>Process an incoming packet and raise the appropriate events</summary>
21854 Animation inventory name 20658 <param name="sender">The sender</param>
21855 </summary> 20659 <param name="e">The EventArgs object containing the packet data</param>
21856 </member> 20660 </member>
21857 <member name="P:OpenMetaverse.Assets.GestureStepAnimation.GestureStepType"> 20661 <member name="M:OpenMetaverse.ObjectManager.KillObjectHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21858 <summary> 20662 <summary>Process an incoming packet and raise the appropriate events</summary>
21859 Returns what kind of gesture step this is 20663 <param name="sender">The sender</param>
21860 </summary> 20664 <param name="e">The EventArgs object containing the packet data</param>
21861 </member> 20665 </member>
21862 <member name="T:OpenMetaverse.Assets.GestureStepSound"> 20666 <member name="M:OpenMetaverse.ObjectManager.ObjectPropertiesHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21863 <summary> 20667 <summary>Process an incoming packet and raise the appropriate events</summary>
21864 Describes sound step of a gesture 20668 <param name="sender">The sender</param>
21865 </summary> 20669 <param name="e">The EventArgs object containing the packet data</param>
21866 </member> 20670 </member>
21867 <member name="F:OpenMetaverse.Assets.GestureStepSound.ID"> 20671 <member name="M:OpenMetaverse.ObjectManager.ObjectPropertiesFamilyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21868 <summary> 20672 <summary>Process an incoming packet and raise the appropriate events</summary>
21869 Sound asset <see cref="T:OpenMetaverse.UUID" /></summary> 20673 <param name="sender">The sender</param>
20674 <param name="e">The EventArgs object containing the packet data</param>
21870 </member> 20675 </member>
21871 <member name="F:OpenMetaverse.Assets.GestureStepSound.Name"> 20676 <member name="M:OpenMetaverse.ObjectManager.PayPriceReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
21872 <summary> 20677 <summary>Process an incoming packet and raise the appropriate events</summary>
21873 Sound inventory name 20678 <param name="sender">The sender</param>
21874 </summary> 20679 <param name="e">The EventArgs object containing the packet data</param>
21875 </member> 20680 </member>
21876 <member name="P:OpenMetaverse.Assets.GestureStepSound.GestureStepType"> 20681 <member name="M:OpenMetaverse.ObjectManager.ObjectPhysicsPropertiesHandler(System.String,OpenMetaverse.Interfaces.IMessage,OpenMetaverse.Simulator)">
21877 <summary> 20682 <summary>
21878 Returns what kind of gesture step this is 20683
21879 </summary> 20684 </summary>
20685 <param name="capsKey"></param>
20686 <param name="message"></param>
20687 <param name="simulator"></param>
21880 </member> 20688 </member>
21881 <member name="T:OpenMetaverse.Assets.GestureStepChat"> 20689 <member name="M:OpenMetaverse.ObjectManager.BuildBasicShape(OpenMetaverse.PrimType)">
21882 <summary> 20690 <summary>
21883 Describes sound step of a gesture 20691 Setup construction data for a basic primitive shape
21884 </summary> 20692 </summary>
20693 <param name="type">Primitive shape to construct</param>
20694 <returns>Construction data that can be plugged into a <seealso cref="T:OpenMetaverse.Primitive"/></returns>
21885 </member> 20695 </member>
21886 <member name="F:OpenMetaverse.Assets.GestureStepChat.Text"> 20696 <member name="M:OpenMetaverse.ObjectManager.SetAvatarSittingOn(OpenMetaverse.Simulator,OpenMetaverse.Avatar,System.UInt32,System.UInt32)">
21887 <summary> 20697 <summary>
21888 Text to output in chat 20698
21889 </summary> 20699 </summary>
20700 <param name="sim"></param>
20701 <param name="av"></param>
20702 <param name="localid"></param>
20703 <param name="oldSeatID"></param>
21890 </member> 20704 </member>
21891 <member name="P:OpenMetaverse.Assets.GestureStepChat.GestureStepType"> 20705 <member name="M:OpenMetaverse.ObjectManager.UpdateDilation(OpenMetaverse.Simulator,System.UInt32)">
21892 <summary> 20706 <summary>
21893 Returns what kind of gesture step this is 20707
21894 </summary> 20708 </summary>
20709 <param name="s"></param>
20710 <param name="dilation"></param>
21895 </member> 20711 </member>
21896 <member name="T:OpenMetaverse.Assets.GestureStepWait"> 20712 <member name="M:OpenMetaverse.ObjectManager.SetShape(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Primitive.ConstructionData)">
21897 <summary> 20713 <summary>
21898 Describes sound step of a gesture 20714 Set the Shape data of an object
21899 </summary> 20715 </summary>
20716 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20717 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20718 <param name="prim">Data describing the prim shape</param>
21900 </member> 20719 </member>
21901 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitForAnimation"> 20720 <member name="M:OpenMetaverse.ObjectManager.SetMaterial(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.Material)">
21902 <summary> 20721 <summary>
21903 If true in this step we wait for all animations to finish 20722 Set the Material data of an object
21904 </summary> 20723 </summary>
20724 <param name="simulator">A reference to the <seealso cref="T:OpenMetaverse.Simulator"/> object where the object resides</param>
20725 <param name="localID">The objects ID which is local to the simulator the object is in</param>
20726 <param name="material">The new material of the object</param>
21905 </member> 20727 </member>
21906 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitForTime"> 20728 <member name="M:OpenMetaverse.ObjectManager.GetPrimitive(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
21907 <summary> 20729 <summary>
21908 If true gesture player should wait for the specified amount of time 20730
21909 </summary> 20731 </summary>
20732 <param name="simulator"></param>
20733 <param name="localID"></param>
20734 <param name="fullID"></param>
20735 <returns></returns>
21910 </member> 20736 </member>
21911 <member name="F:OpenMetaverse.Assets.GestureStepWait.WaitTime"> 20737 <member name="M:OpenMetaverse.ObjectManager.GetPrimitive(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID,System.Boolean)">
21912 <summary> 20738 <summary>
21913 Time in seconds to wait if WaitForAnimation is false 20739
21914 </summary> 20740 </summary>
20741 <param name="simulator"></param>
20742 <param name="localID"></param>
20743 <param name="fullID"></param>
20744 <param name="createIfMissing"></param>
20745 <returns></returns>
21915 </member> 20746 </member>
21916 <member name="P:OpenMetaverse.Assets.GestureStepWait.GestureStepType"> 20747 <member name="M:OpenMetaverse.ObjectManager.GetAvatar(OpenMetaverse.Simulator,System.UInt32,OpenMetaverse.UUID)">
21917 <summary> 20748 <summary>
21918 Returns what kind of gesture step this is 20749
21919 </summary> 20750 </summary>
20751 <param name="simulator"></param>
20752 <param name="localID"></param>
20753 <param name="fullID"></param>
20754 <returns></returns>
21920 </member> 20755 </member>
21921 <member name="T:OpenMetaverse.Assets.GestureStepEOF"> 20756 <member name="E:OpenMetaverse.ObjectManager.ObjectUpdate">
21922 <summary> 20757 <summary>Raised when the simulator sends us data containing
21923 Describes the final step of a gesture 20758 A <see cref="T:OpenMetaverse.Primitive"/>, Foliage or Attachment</summary>
21924 </summary> 20759 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObject(OpenMetaverse.Simulator,System.UInt32)"/>
20760 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObjects(OpenMetaverse.Simulator,System.Collections.Generic.List{System.UInt32})"/>
21925 </member> 20761 </member>
21926 <member name="P:OpenMetaverse.Assets.GestureStepEOF.GestureStepType"> 20762 <member name="E:OpenMetaverse.ObjectManager.ObjectProperties">
21927 <summary> 20763 <summary>Raised when the simulator sends us data containing
21928 Returns what kind of gesture step this is 20764 additional <seea cref="T:OpenMetaverse.Primitive"/> information</summary>
21929 </summary> 20765 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)"/>
20766 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[],System.Boolean)"/>
21930 </member> 20767 </member>
21931 <member name="T:OpenMetaverse.Assets.AssetGesture"> 20768 <member name="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated">
21932 <summary> 20769 <summary>Raised when the simulator sends us data containing
21933 Represents a sequence of animations, sounds, and chat actions 20770 Primitive.ObjectProperties for an object we are currently tracking</summary>
21934 </summary>
21935 </member> 20771 </member>
21936 <member name="M:OpenMetaverse.Assets.AssetGesture.#ctor"> 20772 <member name="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily">
21937 <summary> 20773 <summary>Raised when the simulator sends us data containing
21938 Constructs guesture asset 20774 additional <seea cref="T:OpenMetaverse.Primitive"/> and <see cref="T:OpenMetaverse.Avatar"/> details</summary>
21939 </summary> 20775 <seealso cref="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID)"/>
21940 </member> 20776 </member>
21941 <member name="M:OpenMetaverse.Assets.AssetGesture.#ctor(OpenMetaverse.UUID,System.Byte[])"> 20777 <member name="E:OpenMetaverse.ObjectManager.AvatarUpdate">
21942 <summary> 20778 <summary>Raised when the simulator sends us data containing
21943 Constructs guesture asset 20779 updated information for an <see cref="T:OpenMetaverse.Avatar"/></summary>
21944 </summary>
21945 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
21946 <param name="assetData">A byte array containing the raw asset data</param>
21947 </member> 20780 </member>
21948 <member name="F:OpenMetaverse.Assets.AssetGesture.TriggerKey"> 20781 <member name="E:OpenMetaverse.ObjectManager.TerseObjectUpdate">
21949 <summary> 20782 <summary>Raised when the simulator sends us data containing
21950 Keyboard key that triggers the gestyre 20783 <see cref="T:OpenMetaverse.Primitive"/> and <see cref="T:OpenMetaverse.Avatar"/> movement changes</summary>
21951 </summary>
21952 </member> 20784 </member>
21953 <member name="F:OpenMetaverse.Assets.AssetGesture.TriggerKeyMask"> 20785 <member name="E:OpenMetaverse.ObjectManager.ObjectDataBlockUpdate">
21954 <summary> 20786 <summary>Raised when the simulator sends us data containing
21955 Modifier to the trigger key 20787 updates to an Objects DataBlock</summary>
21956 </summary>
21957 </member> 20788 </member>
21958 <member name="F:OpenMetaverse.Assets.AssetGesture.Trigger"> 20789 <member name="E:OpenMetaverse.ObjectManager.KillObject">
21959 <summary> 20790 <summary>Raised when the simulator informs us an <see cref="T:OpenMetaverse.Primitive"/>
21960 String that triggers playing of the gesture sequence 20791 or <see cref="T:OpenMetaverse.Avatar"/> is no longer within view</summary>
21961 </summary>
21962 </member> 20792 </member>
21963 <member name="F:OpenMetaverse.Assets.AssetGesture.ReplaceWith"> 20793 <member name="E:OpenMetaverse.ObjectManager.KillObjects">
21964 <summary> 20794 <summary>Raised when the simulator informs us when a group of <see cref="T:OpenMetaverse.Primitive"/>
21965 Text that replaces trigger in chat once gesture is triggered 20795 or <see cref="T:OpenMetaverse.Avatar"/> is no longer within view</summary>
21966 </summary>
21967 </member> 20796 </member>
21968 <member name="F:OpenMetaverse.Assets.AssetGesture.Sequence"> 20797 <member name="E:OpenMetaverse.ObjectManager.AvatarSitChanged">
21969 <summary> 20798 <summary>Raised when the simulator sends us data containing
21970 Sequence of gesture steps 20799 updated sit information for our <see cref="T:OpenMetaverse.Avatar"/></summary>
21971 </summary>
21972 </member> 20800 </member>
21973 <member name="P:OpenMetaverse.Assets.AssetGesture.AssetType"> 20801 <member name="E:OpenMetaverse.ObjectManager.PayPriceReply">
21974 <summary> 20802 <summary>Raised when the simulator sends us data containing
21975 Returns asset type 20803 purchase price information for a <see cref="T:OpenMetaverse.Primitive"/></summary>
21976 </summary>
21977 </member> 20804 </member>
21978 <member name="M:OpenMetaverse.Assets.AssetGesture.Encode"> 20805 <member name="E:OpenMetaverse.ObjectManager.PhysicsProperties">
21979 <summary> 20806 <summary>Raised when the simulator sends us data containing
21980 Encodes gesture asset suitable for uplaod 20807 additional <seea cref="T:OpenMetaverse.Primitive"/> information</summary>
21981 </summary> 20808 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)"/>
20809 <seealso cref="M:OpenMetaverse.ObjectManager.SelectObjects(OpenMetaverse.Simulator,System.UInt32[],System.Boolean)"/>
21982 </member> 20810 </member>
21983 <member name="M:OpenMetaverse.Assets.AssetGesture.Decode"> 20811 <member name="T:OpenMetaverse.ObjectManager.ObjectMediaCallback">
21984 <summary> 20812 <summary>
21985 Decodes gesture assset into play sequence 20813 Callback for getting object media data via CAP
21986 </summary> 20814 </summary>
21987 <returns>true if the asset data was decoded successfully</returns> 20815 <param name="success">Indicates if the operation was succesfull</param>
20816 <param name="version">Object media version string</param>
20817 <param name="faceMedia">Array indexed on prim face of media entry data</param>
21988 </member> 20818 </member>
21989 <member name="T:OpenMetaverse.Assets.AssetLandmark"> 20819 <member name="T:OpenMetaverse.PrimEventArgs">
20820 <summary>Provides data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/> event</summary>
20821 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/> event occurs when the simulator sends
20822 an <see cref="T:OpenMetaverse.Packets.ObjectUpdatePacket"/> containing a Primitive, Foliage or Attachment data</para>
20823 <para>Note 1: The <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/> event will not be raised when the object is an Avatar</para>
20824 <para>Note 2: It is possible for the <see cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/> to be
20825 raised twice for the same object if for example the primitive moved to a new simulator, then returned to the current simulator or
20826 if an Avatar crosses the border into a new simulator and returns to the current simulator</para>
20827 </remarks>
20828 <example>
20829 The following code example uses the <see cref="P:OpenMetaverse.PrimEventArgs.Prim"/>, <see cref="P:OpenMetaverse.PrimEventArgs.Simulator"/>, and <see cref="P:OpenMetaverse.PrimEventArgs.IsAttachment"/>
20830 properties to display new Primitives and Attachments on the <see cref="T:System.Console"/> window.
20831 <code>
20832 // Subscribe to the event that gives us prim and foliage information
20833 Client.Objects.ObjectUpdate += Objects_ObjectUpdate;
20834
20835
20836 private void Objects_ObjectUpdate(object sender, PrimEventArgs e)
20837 {
20838 Console.WriteLine("Primitive {0} {1} in {2} is an attachment {3}", e.Prim.ID, e.Prim.LocalID, e.Simulator.Name, e.IsAttachment);
20839 }
20840 </code>
20841 </example>
20842 <seealso cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/>
20843 <seealso cref="E:OpenMetaverse.ObjectManager.AvatarUpdate"/>
20844 <seealso cref="T:OpenMetaverse.AvatarUpdateEventArgs"/>
20845 </member>
20846 <member name="M:OpenMetaverse.PrimEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive,System.UInt16,System.Boolean,System.Boolean)">
21990 <summary> 20847 <summary>
21991 Represents a Landmark with RegionID and Position vector 20848 Construct a new instance of the PrimEventArgs class
21992 </summary> 20849 </summary>
20850 <param name="simulator">The simulator the object originated from</param>
20851 <param name="prim">The Primitive</param>
20852 <param name="timeDilation">The simulator time dilation</param>
20853 <param name="isNew">The prim was not in the dictionary before this update</param>
20854 <param name="isAttachment">true if the primitive represents an attachment to an agent</param>
21993 </member> 20855 </member>
21994 <member name="M:OpenMetaverse.Assets.AssetLandmark.#ctor"> 20856 <member name="P:OpenMetaverse.PrimEventArgs.Simulator">
21995 <summary>Construct an Asset of type Landmark</summary> 20857 <summary>Get the simulator the <see cref="T:OpenMetaverse.Primitive"/> originated from</summary>
21996 </member> 20858 </member>
21997 <member name="M:OpenMetaverse.Assets.AssetLandmark.#ctor(OpenMetaverse.UUID,System.Byte[])"> 20859 <member name="P:OpenMetaverse.PrimEventArgs.Prim">
21998 <summary> 20860 <summary>Get the <see cref="T:OpenMetaverse.Primitive"/> details</summary>
21999 Construct an Asset object of type Landmark
22000 </summary>
22001 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22002 <param name="assetData">A byte array containing the raw asset data</param>
22003 </member> 20861 </member>
22004 <member name="F:OpenMetaverse.Assets.AssetLandmark.RegionID"> 20862 <member name="P:OpenMetaverse.PrimEventArgs.IsNew">
22005 <summary>UUID of the Landmark target region</summary> 20863 <summary>true if the <see cref="T:OpenMetaverse.Primitive"/> did not exist in the dictionary before this update (always true if object tracking has been disabled)</summary>
22006 </member> 20864 </member>
22007 <member name="F:OpenMetaverse.Assets.AssetLandmark.Position"> 20865 <member name="P:OpenMetaverse.PrimEventArgs.IsAttachment">
22008 <summary> Local position of the target </summary> 20866 <summary>true if the <see cref="T:OpenMetaverse.Primitive"/> is attached to an <see cref="T:OpenMetaverse.Avatar"/></summary>
22009 </member> 20867 </member>
22010 <member name="P:OpenMetaverse.Assets.AssetLandmark.AssetType"> 20868 <member name="P:OpenMetaverse.PrimEventArgs.TimeDilation">
22011 <summary>Override the base classes AssetType</summary> 20869 <summary>Get the simulator Time Dilation</summary>
22012 </member> 20870 </member>
22013 <member name="M:OpenMetaverse.Assets.AssetLandmark.Encode"> 20871 <member name="T:OpenMetaverse.AvatarUpdateEventArgs">
22014 <summary> 20872 <summary>Provides data for the <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate"/> event</summary>
22015 Encode the raw contents of a string with the specific Landmark format 20873 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate"/> event occurs when the simulator sends
22016 </summary> 20874 an <see cref="T:OpenMetaverse.Packets.ObjectUpdatePacket"/> containing Avatar data</para>
20875 <para>Note 1: The <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate"/> event will not be raised when the object is an Avatar</para>
20876 <para>Note 2: It is possible for the <see cref="E:OpenMetaverse.ObjectManager.AvatarUpdate"/> to be
20877 raised twice for the same avatar if for example the avatar moved to a new simulator, then returned to the current simulator</para>
20878 </remarks>
20879 <example>
20880 The following code example uses the <see cref="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar"/> property to make a request for the top picks
20881 using the <see cref="M:OpenMetaverse.AvatarManager.RequestAvatarPicks(OpenMetaverse.UUID)"/> method in the <see cref="T:OpenMetaverse.AvatarManager"/> class to display the names
20882 of our own agents picks listings on the <see cref="T:System.Console"/> window.
20883 <code>
20884 // subscribe to the AvatarUpdate event to get our information
20885 Client.Objects.AvatarUpdate += Objects_AvatarUpdate;
20886 Client.Avatars.AvatarPicksReply += Avatars_AvatarPicksReply;
20887
20888 private void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e)
20889 {
20890 // we only want our own data
20891 if (e.Avatar.LocalID == Client.Self.LocalID)
20892 {
20893 // Unsubscribe from the avatar update event to prevent a loop
20894 // where we continually request the picks every time we get an update for ourselves
20895 Client.Objects.AvatarUpdate -= Objects_AvatarUpdate;
20896 // make the top picks request through AvatarManager
20897 Client.Avatars.RequestAvatarPicks(e.Avatar.ID);
20898 }
20899 }
20900
20901 private void Avatars_AvatarPicksReply(object sender, AvatarPicksReplyEventArgs e)
20902 {
20903 // we'll unsubscribe from the AvatarPicksReply event since we now have the data
20904 // we were looking for
20905 Client.Avatars.AvatarPicksReply -= Avatars_AvatarPicksReply;
20906 // loop through the dictionary and extract the names of the top picks from our profile
20907 foreach (var pickName in e.Picks.Values)
20908 {
20909 Console.WriteLine(pickName);
20910 }
20911 }
20912 </code>
20913 </example>
20914 <seealso cref="E:OpenMetaverse.ObjectManager.ObjectUpdate"/>
20915 <seealso cref="T:OpenMetaverse.PrimEventArgs"/>
22017 </member> 20916 </member>
22018 <member name="M:OpenMetaverse.Assets.AssetLandmark.Decode"> 20917 <member name="M:OpenMetaverse.AvatarUpdateEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Avatar,System.UInt16,System.Boolean)">
22019 <summary> 20918 <summary>
22020 Decode the raw asset data, populating the RegionID and Position 20919 Construct a new instance of the AvatarUpdateEventArgs class
22021 </summary> 20920 </summary>
22022 <returns>true if the AssetData was successfully decoded to a UUID and Vector</returns> 20921 <param name="simulator">The simulator the packet originated from</param>
20922 <param name="avatar">The <see cref="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar"/> data</param>
20923 <param name="timeDilation">The simulator time dilation</param>
20924 <param name="isNew">The avatar was not in the dictionary before this update</param>
22023 </member> 20925 </member>
22024 <member name="T:OpenMetaverse.Assets.AssetMesh"> 20926 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.Simulator">
22025 <summary> 20927 <summary>Get the simulator the object originated from</summary>
22026 Represents Mesh asset
22027 </summary>
22028 </member> 20928 </member>
22029 <member name="M:OpenMetaverse.Assets.AssetMesh.#ctor"> 20929 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar">
22030 <summary>Initializes a new instance of an AssetMesh object</summary> 20930 <summary>Get the <see cref="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar"/> data</summary>
22031 </member> 20931 </member>
22032 <member name="M:OpenMetaverse.Assets.AssetMesh.#ctor(OpenMetaverse.UUID,System.Byte[])"> 20932 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.TimeDilation">
22033 <summary>Initializes a new instance of an AssetMesh object with parameters</summary> 20933 <summary>Get the simulator time dilation</summary>
22034 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22035 <param name="assetData">A byte array containing the raw asset data</param>
22036 </member> 20934 </member>
22037 <member name="F:OpenMetaverse.Assets.AssetMesh.MeshData"> 20935 <member name="P:OpenMetaverse.AvatarUpdateEventArgs.IsNew">
22038 <summary> 20936 <summary>true if the <see cref="P:OpenMetaverse.AvatarUpdateEventArgs.Avatar"/> did not exist in the dictionary before this update (always true if avatar tracking has been disabled)</summary>
22039 Decoded mesh data
22040 </summary>
22041 </member> 20937 </member>
22042 <member name="P:OpenMetaverse.Assets.AssetMesh.AssetType"> 20938 <member name="T:OpenMetaverse.ObjectPropertiesEventArgs">
22043 <summary>Override the base classes AssetType</summary> 20939 <summary>Provides additional primitive data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event</summary>
20940 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event occurs when the simulator sends
20941 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> containing additional details for a Primitive, Foliage data or Attachment data</para>
20942 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)"/> request is
20943 made.</para>
20944 </remarks>
20945 <example>
20946 The following code example uses the <see cref="P:OpenMetaverse.PrimEventArgs.Prim"/>, <see cref="P:OpenMetaverse.PrimEventArgs.Simulator"/> and
20947 <see cref="P:OpenMetaverse.ObjectPropertiesEventArgs.Properties"/>
20948 properties to display new attachments and send a request for additional properties containing the name of the
20949 attachment then display it on the <see cref="T:System.Console"/> window.
20950 <code>
20951 // Subscribe to the event that provides additional primitive details
20952 Client.Objects.ObjectProperties += Objects_ObjectProperties;
20953
20954 // handle the properties data that arrives
20955 private void Objects_ObjectProperties(object sender, ObjectPropertiesEventArgs e)
20956 {
20957 Console.WriteLine("Primitive Properties: {0} Name is {1}", e.Properties.ObjectID, e.Properties.Name);
20958 }
20959 </code>
20960 </example>
22044 </member> 20961 </member>
22045 <member name="M:OpenMetaverse.Assets.AssetMesh.Encode"> 20962 <member name="M:OpenMetaverse.ObjectPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive.ObjectProperties)">
22046 <summary> 20963 <summary>
22047 TODO: Encodes Collada file into LLMesh format 20964 Construct a new instance of the ObjectPropertiesEventArgs class
22048 </summary> 20965 </summary>
20966 <param name="simulator">The simulator the object is located</param>
20967 <param name="props">The primitive Properties</param>
22049 </member> 20968 </member>
22050 <member name="M:OpenMetaverse.Assets.AssetMesh.Decode"> 20969 <member name="P:OpenMetaverse.ObjectPropertiesEventArgs.Simulator">
22051 <summary> 20970 <summary>Get the simulator the object is located</summary>
22052 Decodes mesh asset. See <see cref="M:OpenMetaverse.Rendering.FacetedMesh.TryDecodeFromAsset(OpenMetaverse.Primitive,OpenMetaverse.Assets.AssetMesh,OpenMetaverse.Rendering.DetailLevel,OpenMetaverse.Rendering.FacetedMesh)" />
22053 to furter decode it for rendering</summary>
22054 <returns>true</returns>
22055 </member> 20971 </member>
22056 <member name="T:OpenMetaverse.Assets.AssetNotecard"> 20972 <member name="P:OpenMetaverse.ObjectPropertiesEventArgs.Properties">
22057 <summary> 20973 <summary>Get the primitive properties</summary>
22058 Represents a string of characters encoded with specific formatting properties
22059 </summary>
22060 </member> 20974 </member>
22061 <member name="M:OpenMetaverse.Assets.AssetNotecard.#ctor"> 20975 <member name="T:OpenMetaverse.ObjectPropertiesUpdatedEventArgs">
22062 <summary>Construct an Asset of type Notecard</summary> 20976 <summary>Provides additional primitive data for the <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated"/> event</summary>
20977 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated"/> event occurs when the simulator sends
20978 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> containing additional details for a Primitive or Foliage data that is currently
20979 being tracked in the <see cref="F:OpenMetaverse.Simulator.ObjectsPrimitives"/> dictionary</para>
20980 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesUpdated"/> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.SelectObject(OpenMetaverse.Simulator,System.UInt32)"/> request is
20981 made and <see cref="F:OpenMetaverse.Settings.OBJECT_TRACKING"/> is enabled</para>
20982 </remarks>
22063 </member> 20983 </member>
22064 <member name="M:OpenMetaverse.Assets.AssetNotecard.#ctor(OpenMetaverse.UUID,System.Byte[])"> 20984 <member name="M:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive,OpenMetaverse.Primitive.ObjectProperties)">
22065 <summary> 20985 <summary>
22066 Construct an Asset object of type Notecard 20986 Construct a new instance of the ObjectPropertiesUpdatedEvenrArgs class
22067 </summary> 20987 </summary>
22068 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param> 20988 <param name="simulator">The simulator the object is located</param>
22069 <param name="assetData">A byte array containing the raw asset data</param> 20989 <param name="prim">The Primitive</param>
22070 </member> 20990 <param name="props">The primitive Properties</param>
22071 <member name="F:OpenMetaverse.Assets.AssetNotecard.BodyText">
22072 <summary>A text string containing main text of the notecard</summary>
22073 </member>
22074 <member name="F:OpenMetaverse.Assets.AssetNotecard.EmbeddedItems">
22075 <summary>List of <see cref="T:OpenMetaverse.InventoryItem" />s embedded on the notecard</summary>
22076 </member> 20991 </member>
22077 <member name="P:OpenMetaverse.Assets.AssetNotecard.AssetType"> 20992 <member name="P:OpenMetaverse.ObjectPropertiesUpdatedEventArgs.Prim">
22078 <summary>Override the base classes AssetType</summary> 20993 <summary>Get the primitive details</summary>
22079 </member> 20994 </member>
22080 <member name="M:OpenMetaverse.Assets.AssetNotecard.Encode"> 20995 <member name="T:OpenMetaverse.ObjectPropertiesFamilyEventArgs">
22081 <summary> 20996 <summary>Provides additional primitive data, permissions and sale info for the <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily"/> event</summary>
22082 Encode the raw contents of a string with the specific Linden Text properties 20997 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectPropertiesFamily"/> event occurs when the simulator sends
22083 </summary> 20998 an <see cref="T:OpenMetaverse.Packets.ObjectPropertiesPacket"/> containing additional details for a Primitive, Foliage data or Attachment. This includes
20999 Permissions, Sale info, and other basic details on an object</para>
21000 <para>The <see cref="E:OpenMetaverse.ObjectManager.ObjectProperties"/> event is also raised when a <see cref="M:OpenMetaverse.ObjectManager.RequestObjectPropertiesFamily(OpenMetaverse.Simulator,OpenMetaverse.UUID)"/> request is
21001 made, the viewer equivalent is hovering the mouse cursor over an object</para>
21002 </remarks>
22084 </member> 21003 </member>
22085 <member name="M:OpenMetaverse.Assets.AssetNotecard.Decode"> 21004 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Simulator">
22086 <summary> 21005 <summary>Get the simulator the object is located</summary>
22087 Decode the raw asset data including the Linden Text properties
22088 </summary>
22089 <returns>true if the AssetData was successfully decoded</returns>
22090 </member> 21006 </member>
22091 <member name="T:OpenMetaverse.Assets.AssetPrim"> 21007 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Properties">
22092 <summary> 21008 <summary></summary>
22093 A linkset asset, containing a parent primitive and zero or more children
22094 </summary>
22095 </member> 21009 </member>
22096 <member name="M:OpenMetaverse.Assets.AssetPrim.#ctor"> 21010 <member name="P:OpenMetaverse.ObjectPropertiesFamilyEventArgs.Type">
22097 <summary>Initializes a new instance of an AssetPrim object</summary> 21011 <summary></summary>
22098 </member> 21012 </member>
22099 <member name="M:OpenMetaverse.Assets.AssetPrim.#ctor(OpenMetaverse.UUID,System.Byte[])"> 21013 <member name="T:OpenMetaverse.TerseObjectUpdateEventArgs">
22100 <summary> 21014 <summary>Provides primitive data containing updated location, velocity, rotation, textures for the <see cref="E:OpenMetaverse.ObjectManager.TerseObjectUpdate"/> event</summary>
22101 Initializes a new instance of an AssetPrim object 21015 <remarks><para>The <see cref="E:OpenMetaverse.ObjectManager.TerseObjectUpdate"/> event occurs when the simulator sends updated location, velocity, rotation, etc</para>
22102 </summary> 21016 </remarks>
22103 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22104 <param name="assetData">A byte array containing the raw asset data</param>
22105 </member> 21017 </member>
22106 <member name="T:OpenMetaverse.Assets.AssetPrim.ProfileShape"> 21018 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Simulator">
22107 <summary> 21019 <summary>Get the simulator the object is located</summary>
22108 Only used internally for XML serialization/deserialization
22109 </summary>
22110 </member> 21020 </member>
22111 <member name="P:OpenMetaverse.Assets.AssetPrim.AssetType"> 21021 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Prim">
22112 <summary>Override the base classes AssetType</summary> 21022 <summary>Get the primitive details</summary>
22113 </member> 21023 </member>
22114 <member name="M:OpenMetaverse.Assets.AssetPrim.Encode"> 21024 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.Update">
22115 <summary> 21025 <summary></summary>
22116 </summary>
22117 </member> 21026 </member>
22118 <member name="M:OpenMetaverse.Assets.AssetPrim.Decode"> 21027 <member name="P:OpenMetaverse.TerseObjectUpdateEventArgs.TimeDilation">
22119 <summary> 21028 <summary></summary>
22120 </summary>
22121 <returns>
22122 </returns>
22123 </member> 21029 </member>
22124 <member name="T:OpenMetaverse.Assets.PrimObject"> 21030 <member name="T:OpenMetaverse.ObjectDataBlockUpdateEventArgs">
22125 <summary> 21031 <summary>
22126 The deserialized form of a single primitive in a linkset asset 21032
22127 </summary> 21033 </summary>
22128 </member> 21034 </member>
22129 <member name="T:OpenMetaverse.Assets.AssetScriptBinary"> 21035 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Simulator">
22130 <summary> 21036 <summary>Get the simulator the object is located</summary>
22131 Represents an AssetScriptBinary object containing the
22132 LSO compiled bytecode of an LSL script
22133 </summary>
22134 </member> 21037 </member>
22135 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.#ctor"> 21038 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Prim">
22136 <summary>Initializes a new instance of an AssetScriptBinary object</summary> 21039 <summary>Get the primitive details</summary>
22137 </member> 21040 </member>
22138 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.#ctor(OpenMetaverse.UUID,System.Byte[])"> 21041 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.ConstructionData">
22139 <summary>Initializes a new instance of an AssetScriptBinary object with parameters</summary> 21042 <summary></summary>
22140 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22141 <param name="assetData">A byte array containing the raw asset data</param>
22142 </member> 21043 </member>
22143 <member name="P:OpenMetaverse.Assets.AssetScriptBinary.AssetType"> 21044 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Block">
22144 <summary>Override the base classes AssetType</summary> 21045 <summary></summary>
22145 </member> 21046 </member>
22146 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.Encode"> 21047 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.Update">
22147 <summary> 21048 <summary></summary>
22148 TODO: Encodes a scripts contents into a LSO Bytecode file
22149 </summary>
22150 </member> 21049 </member>
22151 <member name="M:OpenMetaverse.Assets.AssetScriptBinary.Decode"> 21050 <member name="P:OpenMetaverse.ObjectDataBlockUpdateEventArgs.NameValues">
22152 <summary> 21051 <summary></summary>
22153 TODO: Decode LSO Bytecode into a string
22154 </summary>
22155 <returns>true</returns>
22156 </member> 21052 </member>
22157 <member name="T:OpenMetaverse.Assets.AssetScriptText"> 21053 <member name="T:OpenMetaverse.KillObjectEventArgs">
22158 <summary> 21054 <summary>Provides notification when an Avatar, Object or Attachment is DeRezzed or moves out of the avatars view for the
22159 Represents an LSL Text object containing a string of UTF encoded characters 21055 <see cref="E:OpenMetaverse.ObjectManager.KillObject"/> event</summary>
22160 </summary>
22161 </member> 21056 </member>
22162 <member name="M:OpenMetaverse.Assets.AssetScriptText.#ctor"> 21057 <member name="P:OpenMetaverse.KillObjectEventArgs.Simulator">
22163 <summary>Initializes a new AssetScriptText object</summary> 21058 <summary>Get the simulator the object is located</summary>
22164 </member> 21059 </member>
22165 <member name="M:OpenMetaverse.Assets.AssetScriptText.#ctor(OpenMetaverse.UUID,System.Byte[])"> 21060 <member name="P:OpenMetaverse.KillObjectEventArgs.ObjectLocalID">
22166 <summary> 21061 <summary>The LocalID of the object</summary>
22167 Initializes a new AssetScriptText object with parameters
22168 </summary>
22169 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22170 <param name="assetData">A byte array containing the raw asset data</param>
22171 </member> 21062 </member>
22172 <member name="F:OpenMetaverse.Assets.AssetScriptText.Source"> 21063 <member name="T:OpenMetaverse.KillObjectsEventArgs">
22173 <summary>A string of characters represting the script contents</summary> 21064 <summary>Provides notification when an Avatar, Object or Attachment is DeRezzed or moves out of the avatars view for the
21065 <see cref="E:OpenMetaverse.ObjectManager.KillObjects"/> event</summary>
22174 </member> 21066 </member>
22175 <member name="P:OpenMetaverse.Assets.AssetScriptText.AssetType"> 21067 <member name="P:OpenMetaverse.KillObjectsEventArgs.Simulator">
22176 <summary>Override the base classes AssetType</summary> 21068 <summary>Get the simulator the object is located</summary>
22177 </member> 21069 </member>
22178 <member name="M:OpenMetaverse.Assets.AssetScriptText.Encode"> 21070 <member name="P:OpenMetaverse.KillObjectsEventArgs.ObjectLocalIDs">
22179 <summary> 21071 <summary>The LocalID of the object</summary>
22180 Encode a string containing the scripts contents into byte encoded AssetData
22181 </summary>
22182 </member> 21072 </member>
22183 <member name="M:OpenMetaverse.Assets.AssetScriptText.Decode"> 21073 <member name="T:OpenMetaverse.AvatarSitChangedEventArgs">
22184 <summary> 21074 <summary>
22185 Decode a byte array containing the scripts contents into a string 21075 Provides updates sit position data
22186 </summary> 21076 </summary>
22187 <returns>true if decoding is successful</returns>
22188 </member> 21077 </member>
22189 <member name="T:OpenMetaverse.Assets.AssetSound"> 21078 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.Simulator">
22190 <summary> 21079 <summary>Get the simulator the object is located</summary>
22191 Represents a Sound Asset
22192 </summary>
22193 </member> 21080 </member>
22194 <member name="M:OpenMetaverse.Assets.AssetSound.#ctor"> 21081 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.Avatar">
22195 <summary>Initializes a new instance of an AssetSound object</summary> 21082 <summary></summary>
22196 </member> 21083 </member>
22197 <member name="M:OpenMetaverse.Assets.AssetSound.#ctor(OpenMetaverse.UUID,System.Byte[])"> 21084 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.SittingOn">
22198 <summary>Initializes a new instance of an AssetSound object with parameters</summary> 21085 <summary></summary>
22199 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22200 <param name="assetData">A byte array containing the raw asset data</param>
22201 </member> 21086 </member>
22202 <member name="P:OpenMetaverse.Assets.AssetSound.AssetType"> 21087 <member name="P:OpenMetaverse.AvatarSitChangedEventArgs.OldSeat">
22203 <summary>Override the base classes AssetType</summary> 21088 <summary></summary>
22204 </member> 21089 </member>
22205 <member name="M:OpenMetaverse.Assets.AssetSound.Encode"> 21090 <member name="T:OpenMetaverse.PayPriceReplyEventArgs">
22206 <summary> 21091 <summary>
22207 TODO: Encodes a sound file 21092
22208 </summary> 21093 </summary>
22209 </member> 21094 </member>
22210 <member name="M:OpenMetaverse.Assets.AssetSound.Decode"> 21095 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.Simulator">
22211 <summary> 21096 <summary>Get the simulator the object is located</summary>
22212 TODO: Decode a sound file
22213 </summary>
22214 <returns>true</returns>
22215 </member> 21097 </member>
22216 <member name="T:OpenMetaverse.Assets.AssetTexture"> 21098 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.ObjectID">
22217 <summary> 21099 <summary></summary>
22218 Represents a texture
22219 </summary>
22220 </member> 21100 </member>
22221 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor"> 21101 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.DefaultPrice">
22222 <summary>Initializes a new instance of an AssetTexture object</summary> 21102 <summary></summary>
22223 </member> 21103 </member>
22224 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor(OpenMetaverse.UUID,System.Byte[])"> 21104 <member name="P:OpenMetaverse.PayPriceReplyEventArgs.ButtonPrices">
21105 <summary></summary>
21106 </member>
21107 <member name="P:OpenMetaverse.ObjectMediaEventArgs.Success">
22225 <summary> 21108 <summary>
22226 Initializes a new instance of an AssetTexture object 21109 Indicates if the operation was successful
22227 </summary> 21110 </summary>
22228 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22229 <param name="assetData">A byte array containing the raw asset data</param>
22230 </member> 21111 </member>
22231 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor(OpenMetaverse.Imaging.ManagedImage)"> 21112 <member name="P:OpenMetaverse.ObjectMediaEventArgs.Version">
22232 <summary> 21113 <summary>
22233 Initializes a new instance of an AssetTexture object 21114 Media version string
22234 </summary> 21115 </summary>
22235 <param name="image">A <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object containing texture data</param>
22236 </member>
22237 <member name="F:OpenMetaverse.Assets.AssetTexture.Image">
22238 <summary>A <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object containing image data</summary>
22239 </member> 21116 </member>
22240 <member name="F:OpenMetaverse.Assets.AssetTexture.LayerInfo"> 21117 <member name="P:OpenMetaverse.ObjectMediaEventArgs.FaceMedia">
22241 <summary> 21118 <summary>
21119 Array of media entries indexed by face number
22242 </summary> 21120 </summary>
22243 </member> 21121 </member>
22244 <member name="F:OpenMetaverse.Assets.AssetTexture.Components"> 21122 <member name="T:OpenMetaverse.PhysicsPropertiesEventArgs">
22245 <summary> 21123 <summary>
21124 Set when simulator sends us infomation on primitive's physical properties
22246 </summary> 21125 </summary>
22247 </member> 21126 </member>
22248 <member name="P:OpenMetaverse.Assets.AssetTexture.AssetType"> 21127 <member name="F:OpenMetaverse.PhysicsPropertiesEventArgs.Simulator">
22249 <summary>Override the base classes AssetType</summary> 21128 <summary>Simulator where the message originated</summary>
22250 </member> 21129 </member>
22251 <member name="M:OpenMetaverse.Assets.AssetTexture.Encode"> 21130 <member name="F:OpenMetaverse.PhysicsPropertiesEventArgs.PhysicsProperties">
22252 <summary> 21131 <summary>Updated physical properties</summary>
22253 Populates the <seealso cref="F:OpenMetaverse.Assets.AssetTexture.AssetData" /> byte array with a JPEG2000
22254 encoded image created from the data in <seealso cref="F:OpenMetaverse.Assets.AssetTexture.Image" /></summary>
22255 </member> 21132 </member>
22256 <member name="M:OpenMetaverse.Assets.AssetTexture.Decode"> 21133 <member name="M:OpenMetaverse.PhysicsPropertiesEventArgs.#ctor(OpenMetaverse.Simulator,OpenMetaverse.Primitive.PhysicsProperties)">
22257 <summary> 21134 <summary>
22258 Decodes the JPEG2000 data in <code>AssetData</code> to the 21135 Constructor
22259 <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object <seealso cref="F:OpenMetaverse.Assets.AssetTexture.Image" /></summary> 21136 </summary>
22260 <returns>True if the decoding was successful, otherwise false</returns> 21137 <param name="sim">Simulator where the message originated</param>
21138 <param name="props">Updated physical properties</param>
22261 </member> 21139 </member>
22262 <member name="M:OpenMetaverse.Assets.AssetTexture.DecodeLayerBoundaries"> 21140 <member name="T:OpenMetaverse.InventoryException">
22263 <summary> 21141 <summary>
22264 Decodes the begin and end byte positions for each quality layer in 21142 Exception class to identify inventory exceptions
22265 the image
22266 </summary> 21143 </summary>
22267 <returns>
22268 </returns>
22269 </member> 21144 </member>
22270 <member name="T:OpenMetaverse.Assets.AssetWearable"> 21145 <member name="T:OpenMetaverse.Inventory">
22271 <summary> 21146 <summary>
22272 Represents a Wearable Asset, Clothing, Hair, Skin, Etc 21147 Responsible for maintaining inventory structure. Inventory constructs nodes
21148 and manages node children as is necessary to maintain a coherant hirarchy.
21149 Other classes should not manipulate or create InventoryNodes explicitly. When
21150 A node's parent changes (when a folder is moved, for example) simply pass
21151 Inventory the updated InventoryFolder and it will make the appropriate changes
21152 to its internal representation.
22273 </summary> 21153 </summary>
22274 </member> 21154 </member>
22275 <member name="M:OpenMetaverse.Assets.AssetWearable.#ctor"> 21155 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectUpdated">
22276 <summary>Initializes a new instance of an AssetWearable object</summary> 21156 <summary>The event subscribers, null of no subscribers</summary>
22277 </member>
22278 <member name="M:OpenMetaverse.Assets.AssetWearable.#ctor(OpenMetaverse.UUID,System.Byte[])">
22279 <summary>Initializes a new instance of an AssetWearable object with parameters</summary>
22280 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID" /> specific to this asset</param>
22281 <param name="assetData">A byte array containing the raw asset data</param>
22282 </member>
22283 <member name="F:OpenMetaverse.Assets.AssetWearable.Name">
22284 <summary>A string containing the name of the asset</summary>
22285 </member>
22286 <member name="F:OpenMetaverse.Assets.AssetWearable.Description">
22287 <summary>A string containing a short description of the asset</summary>
22288 </member>
22289 <member name="F:OpenMetaverse.Assets.AssetWearable.WearableType">
22290 <summary>The Assets WearableType</summary>
22291 </member>
22292 <member name="F:OpenMetaverse.Assets.AssetWearable.ForSale">
22293 <summary>The For-Sale status of the object</summary>
22294 </member>
22295 <member name="F:OpenMetaverse.Assets.AssetWearable.SalePrice">
22296 <summary>An Integer representing the purchase price of the asset</summary>
22297 </member> 21157 </member>
22298 <member name="F:OpenMetaverse.Assets.AssetWearable.Creator"> 21158 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectUpdated(OpenMetaverse.InventoryObjectUpdatedEventArgs)">
22299 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the assets creator</summary> 21159 <summary>Raises the InventoryObjectUpdated Event</summary>
21160 <param name="e">A InventoryObjectUpdatedEventArgs object containing
21161 the data sent from the simulator</param>
22300 </member> 21162 </member>
22301 <member name="F:OpenMetaverse.Assets.AssetWearable.Owner"> 21163 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectUpdatedLock">
22302 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the assets current owner</summary> 21164 <summary>Thread sync lock object</summary>
22303 </member> 21165 </member>
22304 <member name="F:OpenMetaverse.Assets.AssetWearable.LastOwner"> 21166 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectRemoved">
22305 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the assets prior owner</summary> 21167 <summary>The event subscribers, null of no subscribers</summary>
22306 </member> 21168 </member>
22307 <member name="F:OpenMetaverse.Assets.AssetWearable.Group"> 21169 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectRemoved(OpenMetaverse.InventoryObjectRemovedEventArgs)">
22308 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the Group this asset is set to</summary> 21170 <summary>Raises the InventoryObjectRemoved Event</summary>
21171 <param name="e">A InventoryObjectRemovedEventArgs object containing
21172 the data sent from the simulator</param>
22309 </member> 21173 </member>
22310 <member name="F:OpenMetaverse.Assets.AssetWearable.GroupOwned"> 21174 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectRemovedLock">
22311 <summary>True if the asset is owned by a <seealso cref="T:OpenMetaverse.Group" /></summary> 21175 <summary>Thread sync lock object</summary>
22312 </member> 21176 </member>
22313 <member name="F:OpenMetaverse.Assets.AssetWearable.Permissions"> 21177 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectAdded">
22314 <summary>The Permissions mask of the asset</summary> 21178 <summary>The event subscribers, null of no subscribers</summary>
22315 </member> 21179 </member>
22316 <member name="F:OpenMetaverse.Assets.AssetWearable.Params"> 21180 <member name="M:OpenMetaverse.Inventory.OnInventoryObjectAdded(OpenMetaverse.InventoryObjectAddedEventArgs)">
22317 <summary>A Dictionary containing Key/Value pairs of the objects parameters</summary> 21181 <summary>Raises the InventoryObjectAdded Event</summary>
21182 <param name="e">A InventoryObjectAddedEventArgs object containing
21183 the data sent from the simulator</param>
22318 </member> 21184 </member>
22319 <member name="F:OpenMetaverse.Assets.AssetWearable.Textures"> 21185 <member name="F:OpenMetaverse.Inventory.m_InventoryObjectAddedLock">
22320 <summary>A Dictionary containing Key/Value pairs where the Key is the textures Index and the Value is the Textures <seealso cref="T:OpenMetaverse.UUID" /></summary> 21186 <summary>Thread sync lock object</summary>
22321 </member> 21187 </member>
22322 <member name="M:OpenMetaverse.Assets.AssetWearable.Decode"> 21188 <member name="M:OpenMetaverse.Inventory.GetContents(OpenMetaverse.UUID)">
22323 <summary> 21189 <summary>
22324 Decode an assets byte encoded data to a string 21190 Returns the contents of the specified folder
22325 </summary> 21191 </summary>
22326 <returns>true if the asset data was decoded successfully</returns> 21192 <param name="folder">A folder's UUID</param>
21193 <returns>The contents of the folder corresponding to <code>folder</code></returns>
21194 <exception cref="T:OpenMetaverse.InventoryException">When <code>folder</code> does not exist in the inventory</exception>
22327 </member> 21195 </member>
22328 <member name="M:OpenMetaverse.Assets.AssetWearable.Encode"> 21196 <member name="M:OpenMetaverse.Inventory.UpdateNodeFor(OpenMetaverse.InventoryBase)">
22329 <summary> 21197 <summary>
22330 Encode the assets string represantion into a format consumable by the asset server 21198 Updates the state of the InventoryNode and inventory data structure that
21199 is responsible for the InventoryObject. If the item was previously not added to inventory,
21200 it adds the item, and updates structure accordingly. If it was, it updates the
21201 InventoryNode, changing the parent node if <code>item.parentUUID</code> does
21202 not match <code>node.Parent.Data.UUID</code>.
21203
21204 You can not set the inventory root folder using this method
22331 </summary> 21205 </summary>
21206 <param name="item">The InventoryObject to store</param>
22332 </member> 21207 </member>
22333 <member name="F:OpenMetaverse.Http.EventQueueClient.REQUEST_TIMEOUT"> 21208 <member name="M:OpenMetaverse.Inventory.RemoveNodeFor(OpenMetaverse.InventoryBase)">
22334 <summary>=</summary>
22335 </member>
22336 <member name="F:OpenMetaverse.Http.EventQueueClient._errorCount">
22337 <summary>Number of times we've received an unknown CAPS exception in series.</summary>
22338 </member>
22339 <member name="F:OpenMetaverse.Http.EventQueueClient._random">
22340 <summary>For exponential backoff on error.</summary>
22341 </member>
22342 <member name="T:OpenMetaverse.Imaging.Baker">
22343 <summary> 21209 <summary>
22344 A set of textures that are layered on texture of each other and "baked" 21210 Removes the InventoryObject and all related node data from Inventory.
22345 in to a single texture, for avatar appearances
22346 </summary> 21211 </summary>
21212 <param name="item">The InventoryObject to remove.</param>
22347 </member> 21213 </member>
22348 <member name="M:OpenMetaverse.Imaging.Baker.#ctor(OpenMetaverse.BakeType)"> 21214 <member name="M:OpenMetaverse.Inventory.Contains(OpenMetaverse.UUID)">
22349 <summary> 21215 <summary>
22350 Default constructor 21216 Used to find out if Inventory contains the InventoryObject
21217 specified by <code>uuid</code>.
22351 </summary> 21218 </summary>
22352 <param name="bakeType">Bake type</param> 21219 <param name="uuid">The UUID to check.</param>
22353 </member> 21220 <returns>true if inventory contains uuid, false otherwise</returns>
22354 <member name="F:OpenMetaverse.Imaging.Baker.bakedTexture">
22355 <summary>Final baked texture</summary>
22356 </member>
22357 <member name="F:OpenMetaverse.Imaging.Baker.textures">
22358 <summary>Component layers</summary>
22359 </member>
22360 <member name="F:OpenMetaverse.Imaging.Baker.bakeWidth">
22361 <summary>Width of the final baked image and scratchpad</summary>
22362 </member>
22363 <member name="F:OpenMetaverse.Imaging.Baker.bakeHeight">
22364 <summary>Height of the final baked image and scratchpad</summary>
22365 </member>
22366 <member name="F:OpenMetaverse.Imaging.Baker.bakeType">
22367 <summary>Bake type</summary>
22368 </member>
22369 <member name="P:OpenMetaverse.Imaging.Baker.BakedTexture">
22370 <summary>Final baked texture</summary>
22371 </member> 21221 </member>
22372 <member name="P:OpenMetaverse.Imaging.Baker.Textures"> 21222 <member name="M:OpenMetaverse.Inventory.SaveToDisk(System.String)">
22373 <summary>Component layers</summary> 21223 <summary>
21224 Saves the current inventory structure to a cache file
21225 </summary>
21226 <param name="filename">Name of the cache file to save to</param>
22374 </member> 21227 </member>
22375 <member name="P:OpenMetaverse.Imaging.Baker.BakeWidth"> 21228 <member name="M:OpenMetaverse.Inventory.RestoreFromDisk(System.String)">
22376 <summary>Width of the final baked image and scratchpad</summary> 21229 <summary>
21230 Loads in inventory cache file into the inventory structure. Note only valid to call after login has been successful.
21231 </summary>
21232 <param name="filename">Name of the cache file to load</param>
21233 <returns>The number of inventory items sucessfully reconstructed into the inventory node tree</returns>
22377 </member> 21234 </member>
22378 <member name="P:OpenMetaverse.Imaging.Baker.BakeHeight"> 21235 <member name="E:OpenMetaverse.Inventory.InventoryObjectUpdated">
22379 <summary>Height of the final baked image and scratchpad</summary> 21236 <summary>Raised when the simulator sends us data containing
21237 ...</summary>
22380 </member> 21238 </member>
22381 <member name="P:OpenMetaverse.Imaging.Baker.BakeType"> 21239 <member name="E:OpenMetaverse.Inventory.InventoryObjectRemoved">
22382 <summary>Bake type</summary> 21240 <summary>Raised when the simulator sends us data containing
21241 ...</summary>
22383 </member> 21242 </member>
22384 <member name="P:OpenMetaverse.Imaging.Baker.IsSkin"> 21243 <member name="E:OpenMetaverse.Inventory.InventoryObjectAdded">
22385 <summary>Is this one of the 3 skin bakes</summary> 21244 <summary>Raised when the simulator sends us data containing
21245 ...</summary>
22386 </member> 21246 </member>
22387 <member name="M:OpenMetaverse.Imaging.Baker.AddTexture(OpenMetaverse.AppearanceManager.TextureData)"> 21247 <member name="P:OpenMetaverse.Inventory.RootFolder">
22388 <summary> 21248 <summary>
22389 Adds layer for baking 21249 The root folder of this avatars inventory
22390 </summary> 21250 </summary>
22391 <param name="tdata">TexturaData struct that contains texture and its params</param>
22392 </member> 21251 </member>
22393 <member name="M:OpenMetaverse.Imaging.Baker.BakeTypeFor(OpenMetaverse.AvatarTextureIndex)"> 21252 <member name="P:OpenMetaverse.Inventory.LibraryFolder">
22394 <summary> 21253 <summary>
22395 Converts avatar texture index (face) to Bake type 21254 The default shared library folder
22396 </summary> 21255 </summary>
22397 <param name="index">Face number (AvatarTextureIndex)</param>
22398 <returns>BakeType, layer to which this texture belongs to</returns>
22399 </member> 21256 </member>
22400 <member name="M:OpenMetaverse.Imaging.Baker.SanitizeLayers(OpenMetaverse.Imaging.ManagedImage,OpenMetaverse.Imaging.ManagedImage)"> 21257 <member name="P:OpenMetaverse.Inventory.RootNode">
22401 <summary> 21258 <summary>
22402 Make sure images exist, resize source if needed to match the destination 21259 The root node of the avatars inventory
22403 </summary> 21260 </summary>
22404 <param name="dest">Destination image</param>
22405 <param name="src">Source image</param>
22406 <returns>Sanitization was succefull</returns>
22407 </member> 21261 </member>
22408 <member name="M:OpenMetaverse.Imaging.Baker.InitBakedLayerColor(OpenMetaverse.Color4)"> 21262 <member name="P:OpenMetaverse.Inventory.LibraryRootNode">
22409 <summary> 21263 <summary>
22410 Fills a baked layer as a solid *appearing* color. The colors are 21264 The root node of the default shared library
22411 subtly dithered on a 16x16 grid to prevent the JPEG2000 stage from
22412 compressing it too far since it seems to cause upload failures if
22413 the image is a pure solid color
22414 </summary> 21265 </summary>
22415 <param name="color">Color of the base of this layer</param>
22416 </member> 21266 </member>
22417 <member name="M:OpenMetaverse.Imaging.Baker.InitBakedLayerColor(System.Single,System.Single,System.Single)"> 21267 <member name="P:OpenMetaverse.Inventory.Item(OpenMetaverse.UUID)">
22418 <summary> 21268 <summary>
22419 Fills a baked layer as a solid *appearing* color. The colors are 21269 By using the bracket operator on this class, the program can get the
22420 subtly dithered on a 16x16 grid to prevent the JPEG2000 stage from 21270 InventoryObject designated by the specified uuid. If the value for the corresponding
22421 compressing it too far since it seems to cause upload failures if 21271 UUID is null, the call is equivelant to a call to <code>RemoveNodeFor(this[uuid])</code>.
22422 the image is a pure solid color 21272 If the value is non-null, it is equivelant to a call to <code>UpdateNodeFor(value)</code>,
21273 the uuid parameter is ignored.
22423 </summary> 21274 </summary>
22424 <param name="r">Red value</param> 21275 <param name="uuid">The UUID of the InventoryObject to get or set, ignored if set to non-null value.</param>
22425 <param name="g">Green value</param> 21276 <returns>The InventoryObject corresponding to <code>uuid</code>.</returns>
22426 <param name="b">Blue value</param>
22427 </member> 21277 </member>
22428 <member name="M:OpenMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,OpenMetaverse.Imaging.ManagedImage.ImageChannels)"> 21278 <member name="T:OpenMetaverse.InternalDictionary`2">
22429 <summary> 21279 <summary>
22430 Create a new blank image 21280 The InternalDictionary class is used through the library for storing key/value pairs.
21281 It is intended to be a replacement for the generic Dictionary class and should
21282 be used in its place. It contains several methods for allowing access to the data from
21283 outside the library that are read only and thread safe.
21284
22431 </summary> 21285 </summary>
22432 <param name="width">width</param> 21286 <typeparam name="TKey">Key <see langword="Tkey"/></typeparam>
22433 <param name="height">height</param> 21287 <typeparam name="TValue">Value <see langword="TValue"/></typeparam>
22434 <param name="channels">channel flags</param>
22435 </member> 21288 </member>
22436 <member name="M:OpenMetaverse.Imaging.ManagedImage.#ctor(System.Drawing.Bitmap)"> 21289 <member name="F:OpenMetaverse.InternalDictionary`2.Dictionary">
21290 <summary>Internal dictionary that this class wraps around. Do not
21291 modify or enumerate the contents of this dictionary without locking
21292 on this member</summary>
21293 </member>
21294 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor">
22437 <summary> 21295 <summary>
21296 Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
21297 with the specified key/value, has the default initial capacity.
22438 </summary> 21298 </summary>
22439 <param name="bitmap"> 21299 <example>
22440 </param> 21300 <code>
21301 // initialize a new InternalDictionary named testDict with a string as the key and an int as the value.
21302 public InternalDictionary&lt;string, int&gt; testDict = new InternalDictionary&lt;string, int&gt;();
21303 </code>
21304 </example>
22441 </member> 21305 </member>
22442 <member name="F:OpenMetaverse.Imaging.ManagedImage.Width"> 21306 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
22443 <summary> 21307 <summary>
22444 Image width 21308 Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
21309 with the specified key/value, has its initial valies copied from the specified
21310 <seealso cref="T:System.Collections.Generic.Dictionary"/>
22445 </summary> 21311 </summary>
21312 <param name="dictionary"><seealso cref="T:System.Collections.Generic.Dictionary"/>
21313 to copy initial values from</param>
21314 <example>
21315 <code>
21316 // initialize a new InternalDictionary named testAvName with a UUID as the key and an string as the value.
21317 // populates with copied values from example KeyNameCache Dictionary.
21318
21319 // create source dictionary
21320 Dictionary&lt;UUID, string&gt; KeyNameCache = new Dictionary&lt;UUID, string&gt;();
21321 KeyNameCache.Add("8300f94a-7970-7810-cf2c-fc9aa6cdda24", "Jack Avatar");
21322 KeyNameCache.Add("27ba1e40-13f7-0708-3e98-5819d780bd62", "Jill Avatar");
21323
21324 // Initialize new dictionary.
21325 public InternalDictionary&lt;UUID, string&gt; testAvName = new InternalDictionary&lt;UUID, string&gt;(KeyNameCache);
21326 </code>
21327 </example>
22446 </member> 21328 </member>
22447 <member name="F:OpenMetaverse.Imaging.ManagedImage.Height"> 21329 <member name="M:OpenMetaverse.InternalDictionary`2.#ctor(System.Int32)">
22448 <summary> 21330 <summary>
22449 Image height 21331 Initializes a new instance of the <seealso cref="T:OpenMetaverse.InternalDictionary"/> Class
21332 with the specified key/value, With its initial capacity specified.
22450 </summary> 21333 </summary>
21334 <param name="capacity">Initial size of dictionary</param>
21335 <example>
21336 <code>
21337 // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
21338 // initially allocated room for 10 entries.
21339 public InternalDictionary&lt;string, int&gt; testDict = new InternalDictionary&lt;string, int&gt;(10);
21340 </code>
21341 </example>
22451 </member> 21342 </member>
22452 <member name="F:OpenMetaverse.Imaging.ManagedImage.Channels"> 21343 <member name="M:OpenMetaverse.InternalDictionary`2.TryGetValue(`0,`1@)">
22453 <summary> 21344 <summary>
22454 Image channel flags 21345 Try to get entry from <seealso cref="T:OpenMetaverse.InternalDictionary"/> with specified key
22455 </summary> 21346 </summary>
21347 <param name="key">Key to use for lookup</param>
21348 <param name="value">Value returned</param>
21349 <returns><see langword="true"/> if specified key exists, <see langword="false"/> if not found</returns>
21350 <example>
21351 <code>
21352 // find your avatar using the Simulator.ObjectsAvatars InternalDictionary:
21353 Avatar av;
21354 if (Client.Network.CurrentSim.ObjectsAvatars.TryGetValue(Client.Self.AgentID, out av))
21355 Console.WriteLine("Found Avatar {0}", av.Name);
21356 </code>
21357 <seealso cref="F:OpenMetaverse.Simulator.ObjectsAvatars"/>
21358 </example>
22456 </member> 21359 </member>
22457 <member name="F:OpenMetaverse.Imaging.ManagedImage.Red"> 21360 <member name="M:OpenMetaverse.InternalDictionary`2.Find(System.Predicate{`1})">
22458 <summary> 21361 <summary>
22459 Red channel data 21362 Finds the specified match.
22460 </summary> 21363 </summary>
21364 <param name="match">The match.</param>
21365 <returns>Matched value</returns>
21366 <example>
21367 <code>
21368 // use a delegate to find a prim in the ObjectsPrimitives InternalDictionary
21369 // with the ID 95683496
21370 uint findID = 95683496;
21371 Primitive findPrim = sim.ObjectsPrimitives.Find(
21372 delegate(Primitive prim) { return prim.ID == findID; });
21373 </code>
21374 </example>
22461 </member> 21375 </member>
22462 <member name="F:OpenMetaverse.Imaging.ManagedImage.Green"> 21376 <member name="M:OpenMetaverse.InternalDictionary`2.FindAll(System.Predicate{`1})">
21377 <summary>Find All items in an <seealso cref="T:InternalDictionary"/></summary>
21378 <param name="match">return matching items.</param>
21379 <returns>a <seealso cref="T:System.Collections.Generic.List"/> containing found items.</returns>
21380 <example>
21381 Find All prims within 20 meters and store them in a List
21382 <code>
21383 int radius = 20;
21384 List&lt;Primitive&gt; prims = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
21385 delegate(Primitive prim) {
21386 Vector3 pos = prim.Position;
21387 return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
21388 }
21389 );
21390 </code>
21391 </example>
21392 </member>
21393 <member name="M:OpenMetaverse.InternalDictionary`2.FindAll(System.Predicate{`0})">
21394 <summary>Find All items in an <seealso cref="T:InternalDictionary"/></summary>
21395 <param name="match">return matching keys.</param>
21396 <returns>a <seealso cref="T:System.Collections.Generic.List"/> containing found keys.</returns>
21397 <example>
21398 Find All keys which also exist in another dictionary
21399 <code>
21400 List&lt;UUID&gt; matches = myDict.FindAll(
21401 delegate(UUID id) {
21402 return myOtherDict.ContainsKey(id);
21403 }
21404 );
21405 </code>
21406 </example>
21407 </member>
21408 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{`1})">
21409 <summary>Perform an <seealso cref="T:System.Action"/> on each entry in an <seealso cref="T:OpenMetaverse.InternalDictionary"/></summary>
21410 <param name="action"><seealso cref="T:System.Action"/> to perform</param>
21411 <example>
21412 <code>
21413 // Iterates over the ObjectsPrimitives InternalDictionary and prints out some information.
21414 Client.Network.CurrentSim.ObjectsPrimitives.ForEach(
21415 delegate(Primitive prim)
21416 {
21417 if (prim.Text != null)
21418 {
21419 Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
21420 prim.PropertiesFamily.Name, prim.ID, prim.Text);
21421 }
21422 });
21423 </code>
21424 </example>
21425 </member>
21426 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{`0})">
21427 <summary>Perform an <seealso cref="T:System.Action"/> on each key of an <seealso cref="T:OpenMetaverse.InternalDictionary"/></summary>
21428 <param name="action"><seealso cref="T:System.Action"/> to perform</param>
21429 </member>
21430 <member name="M:OpenMetaverse.InternalDictionary`2.ForEach(System.Action{System.Collections.Generic.KeyValuePair{`0,`1}})">
22463 <summary> 21431 <summary>
22464 Green channel data 21432 Perform an <seealso cref="T:System.Action"/> on each KeyValuePair of an <seealso cref="T:OpenMetaverse.InternalDictionary"/>
22465 </summary> 21433 </summary>
21434 <param name="action"><seealso cref="T:System.Action"/> to perform</param>
22466 </member> 21435 </member>
22467 <member name="F:OpenMetaverse.Imaging.ManagedImage.Blue"> 21436 <member name="M:OpenMetaverse.InternalDictionary`2.ContainsKey(`0)">
21437 <summary>Check if Key exists in Dictionary</summary>
21438 <param name="key">Key to check for</param>
21439 <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
21440 </member>
21441 <member name="M:OpenMetaverse.InternalDictionary`2.ContainsValue(`1)">
21442 <summary>Check if Value exists in Dictionary</summary>
21443 <param name="value">Value to check for</param>
21444 <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
21445 </member>
21446 <member name="M:OpenMetaverse.InternalDictionary`2.Add(`0,`1)">
22468 <summary> 21447 <summary>
22469 Blue channel data 21448 Adds the specified key to the dictionary, dictionary locking is not performed,
21449 <see cref="!:SafeAdd"/>
22470 </summary> 21450 </summary>
21451 <param name="key">The key</param>
21452 <param name="value">The value</param>
22471 </member> 21453 </member>
22472 <member name="F:OpenMetaverse.Imaging.ManagedImage.Alpha"> 21454 <member name="M:OpenMetaverse.InternalDictionary`2.Remove(`0)">
22473 <summary> 21455 <summary>
22474 Alpha channel data 21456 Removes the specified key, dictionary locking is not performed
22475 </summary> 21457 </summary>
21458 <param name="key">The key.</param>
21459 <returns><see langword="true"/> if successful, <see langword="false"/> otherwise</returns>
22476 </member> 21460 </member>
22477 <member name="F:OpenMetaverse.Imaging.ManagedImage.Bump"> 21461 <member name="P:OpenMetaverse.InternalDictionary`2.Count">
22478 <summary> 21462 <summary>
22479 Bump channel data 21463 Gets the number of Key/Value pairs contained in the <seealso cref="T:InternalDictionary"/>
22480 </summary> 21464 </summary>
22481 </member> 21465 </member>
22482 <member name="M:OpenMetaverse.Imaging.ManagedImage.ConvertChannels(OpenMetaverse.Imaging.ManagedImage.ImageChannels)"> 21466 <member name="P:OpenMetaverse.InternalDictionary`2.Item(`0)">
22483 <summary> 21467 <summary>
22484 Convert the channels in the image. Channels are created or destroyed as required. 21468 Indexer for the dictionary
22485 </summary> 21469 </summary>
22486 <param name="channels">new channel flags</param> 21470 <param name="key">The key</param>
21471 <returns>The value</returns>
22487 </member> 21472 </member>
22488 <member name="M:OpenMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)"> 21473 <member name="T:OpenMetaverse.Assets.ArchiveConstants">
22489 <summary> 21474 <summary>
22490 Resize or stretch the image using nearest neighbor (ugly) resampling 21475 Constants for the archiving module
22491 </summary> 21476 </summary>
22492 <param name="width">new width</param>
22493 <param name="height">new height</param>
22494 </member> 21477 </member>
22495 <member name="M:OpenMetaverse.Imaging.ManagedImage.ExportRaw"> 21478 <member name="F:OpenMetaverse.Assets.ArchiveConstants.CONTROL_FILE_PATH">
22496 <summary> 21479 <summary>
22497 Create a byte array containing 32-bit RGBA data with a bottom-left 21480 The location of the archive control file
22498 origin, suitable for feeding directly into OpenGL
22499 </summary> 21481 </summary>
22500 <returns>A byte array containing raw texture data</returns>
22501 </member> 21482 </member>
22502 <member name="T:OpenMetaverse.Imaging.OpenJPEG"> 21483 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSETS_PATH">
22503 <summary> 21484 <summary>
22504 A Wrapper around openjpeg to encode and decode images to and from byte arrays 21485 Path for the assets held in an archive
22505 </summary> 21486 </summary>
22506 </member> 21487 </member>
22507 <member name="T:OpenMetaverse.Imaging.OpenJPEG.J2KLayerInfo"> 21488 <member name="F:OpenMetaverse.Assets.ArchiveConstants.OBJECTS_PATH">
22508 <summary> 21489 <summary>
22509 Defines the beginning and ending file positions of a layer in an 21490 Path for the prims file
22510 LRCP-progression JPEG2000 file
22511 </summary> 21491 </summary>
22512 </member> 21492 </member>
22513 <member name="T:OpenMetaverse.Imaging.OpenJPEG.MarshalledImage"> 21493 <member name="F:OpenMetaverse.Assets.ArchiveConstants.TERRAINS_PATH">
22514 <summary> 21494 <summary>
22515 This structure is used to marshal both encoded and decoded images. 21495 Path for terrains. Technically these may be assets, but I think it's quite nice to split them out.
22516 MUST MATCH THE STRUCT IN dotnet.h!
22517 </summary> 21496 </summary>
22518 </member> 21497 </member>
22519 <member name="T:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket"> 21498 <member name="F:OpenMetaverse.Assets.ArchiveConstants.SETTINGS_PATH">
22520 <summary> 21499 <summary>
22521 Information about a single packet in a JPEG2000 stream 21500 Path for region settings.
22522 </summary> 21501 </summary>
22523 </member> 21502 </member>
22524 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.start_pos"> 21503 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSET_EXTENSION_SEPARATOR">
22525 <summary>Packet start position</summary>
22526 </member>
22527 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.end_ph_pos">
22528 <summary>Packet header end position</summary>
22529 </member>
22530 <member name="F:OpenMetaverse.Imaging.OpenJPEG.MarshalledPacket.end_pos">
22531 <summary>Packet end position</summary>
22532 </member>
22533 <member name="F:OpenMetaverse.Imaging.OpenJPEG.TGA_HEADER_SIZE">
22534 <summary>TGA Header size</summary>
22535 </member>
22536 <member name="F:OpenMetaverse.Imaging.OpenJPEG.OpenJPEGLock">
22537 <summary>OpenJPEG is not threadsafe, so this object is used to lock
22538 during calls into unmanaged code</summary>
22539 </member>
22540 <member name="M:OpenMetaverse.Imaging.OpenJPEG.Encode(OpenMetaverse.Imaging.ManagedImage,System.Boolean)">
22541 <summary> 21504 <summary>
22542 Encode a <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object into a byte array 21505 The character the separates the uuid from extension information in an archived asset filename
22543 </summary> 21506 </summary>
22544 <param name="image">The <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object to encode</param>
22545 <param name="lossless">true to enable lossless conversion, only useful for small images ie: sculptmaps</param>
22546 <returns>A byte array containing the encoded Image object</returns>
22547 </member> 21507 </member>
22548 <member name="M:OpenMetaverse.Imaging.OpenJPEG.Encode(OpenMetaverse.Imaging.ManagedImage)"> 21508 <member name="F:OpenMetaverse.Assets.ArchiveConstants.ASSET_TYPE_TO_EXTENSION">
22549 <summary> 21509 <summary>
22550 Encode a <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object into a byte array 21510 Extensions used for asset types in the archive
22551 </summary> 21511 </summary>
22552 <param name="image">The <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /> object to encode</param>
22553 <returns>a byte array of the encoded image</returns>
22554 </member> 21512 </member>
22555 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(System.Byte[],OpenMetaverse.Imaging.ManagedImage@,System.Drawing.Image@)"> 21513 <member name="F:OpenMetaverse.TerrainPatch.X">
22556 <summary> 21514 <summary>X position of this patch</summary>
22557 Decode JPEG2000 data to an <seealso cref="T:System.Drawing.Image" /> and
22558 <seealso cref="T:OpenMetaverse.Imaging.ManagedImage" /></summary>
22559 <param name="encoded">JPEG2000 encoded data</param>
22560 <param name="managedImage">ManagedImage object to decode to</param>
22561 <param name="image">Image object to decode to</param>
22562 <returns>True if the decode succeeds, otherwise false</returns>
22563 </member> 21515 </member>
22564 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(System.Byte[],OpenMetaverse.Imaging.ManagedImage@)"> 21516 <member name="F:OpenMetaverse.TerrainPatch.Y">
22565 <summary> 21517 <summary>Y position of this patch</summary>
22566 </summary>
22567 <param name="encoded">
22568 </param>
22569 <param name="managedImage">
22570 </param>
22571 <returns>
22572 </returns>
22573 </member> 21518 </member>
22574 <member name="M:OpenMetaverse.Imaging.OpenJPEG.DecodeLayerBoundaries(System.Byte[],OpenMetaverse.Imaging.OpenJPEG.J2KLayerInfo[]@,System.Int32@)"> 21519 <member name="F:OpenMetaverse.TerrainPatch.Data">
22575 <summary> 21520 <summary>A 16x16 array of floats holding decompressed layer data</summary>
22576 </summary>
22577 <param name="encoded">
22578 </param>
22579 <param name="layerInfo">
22580 </param>
22581 <param name="components">
22582 </param>
22583 <returns>
22584 </returns>
22585 </member> 21521 </member>
22586 <member name="M:OpenMetaverse.Imaging.OpenJPEG.EncodeFromImage(System.Drawing.Bitmap,System.Boolean)"> 21522 <member name="M:OpenMetaverse.TerrainCompressor.CreateLandPacket(System.Single[],System.Int32[])">
22587 <summary> 21523 <summary>
22588 Encode a <seealso cref="T:System.Drawing.Bitmap" /> object into a byte array 21524 Creates a LayerData packet for compressed land data given a full
21525 simulator heightmap and an array of indices of patches to compress
22589 </summary> 21526 </summary>
22590 <param name="bitmap">The source <seealso cref="T:System.Drawing.Bitmap" /> object to encode</param> 21527 <param name="heightmap">A 256 * 256 array of floating point values
22591 <param name="lossless">true to enable lossless decoding</param> 21528 specifying the height at each meter in the simulator</param>
22592 <returns>A byte array containing the source Bitmap object</returns> 21529 <param name="patches">Array of indexes in the 16x16 grid of patches
21530 for this simulator. For example if 1 and 17 are specified, patches
21531 x=1,y=0 and x=1,y=1 are sent</param>
21532 <returns></returns>
22593 </member> 21533 </member>
22594 <member name="T:OpenMetaverse.Imaging.LoadTGAClass"> 21534 <member name="M:OpenMetaverse.TerrainCompressor.CreatePatchFromHeightmap(OpenMetaverse.BitPack,System.Single[],System.Int32,System.Int32)">
22595 <summary> 21535 <summary>
22596 Capability to load TGAs to Bitmap 21536 Add a patch of terrain to a BitPacker
22597 </summary> 21537 </summary>
21538 <param name="output">BitPacker to write the patch to</param>
21539 <param name="heightmap">Heightmap of the simulator, must be a 256 *
21540 256 float array</param>
21541 <param name="x">X offset of the patch to create, valid values are
21542 from 0 to 15</param>
21543 <param name="y">Y offset of the patch to create, valid values are
21544 from 0 to 15</param>
22598 </member> 21545 </member>
22599 <member name="T:OpenMetaverse.Interfaces.IMessage"> 21546 <member name="T:OpenMetaverse.Sounds">
22600 <summary> 21547 <summary>
22601 Interface requirements for Messaging system 21548 pre-defined built in sounds
22602 </summary> 21549 </summary>
22603 </member> 21550 </member>
22604 <member name="T:OpenMetaverse.Rendering.IRendering"> 21551 <member name="F:OpenMetaverse.Sounds.BELL_TING">
21552 <summary></summary>
21553 </member>
21554 <member name="F:OpenMetaverse.Sounds.CLICK">
21555 <summary></summary>
21556 </member>
21557 <member name="F:OpenMetaverse.Sounds.HEALTH_REDUCTION_FEMALE">
21558 <summary></summary>
21559 </member>
21560 <member name="F:OpenMetaverse.Sounds.HEALTH_REDUCTION_MALE">
21561 <summary></summary>
21562 </member>
21563 <member name="F:OpenMetaverse.Sounds.IM_START">
21564 <summary></summary>
21565 </member>
21566 <member name="F:OpenMetaverse.Sounds.INSTANT_MESSAGE_NOTIFICATION">
21567 <summary></summary>
21568 </member>
21569 <member name="F:OpenMetaverse.Sounds.INVALID_OPERATION">
21570 <summary></summary>
21571 </member>
21572 <member name="F:OpenMetaverse.Sounds.KEYBOARD_LOOP">
21573 <summary></summary>
21574 </member>
21575 <member name="F:OpenMetaverse.Sounds.MONEY_REDUCTION_COINS">
21576 <summary>coins</summary>
21577 </member>
21578 <member name="F:OpenMetaverse.Sounds.MONEY_INCREASE_CASH_REGISTER_BELL">
21579 <summary>cash register bell</summary>
21580 </member>
21581 <member name="F:OpenMetaverse.Sounds.NULL_KEYSTROKE">
21582 <summary></summary>
21583 </member>
21584 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION">
21585 <summary></summary>
21586 </member>
21587 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_RUBBER">
21588 <summary>rubber</summary>
21589 </member>
21590 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_PLASTIC">
21591 <summary>plastic</summary>
21592 </member>
21593 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_FLESH">
21594 <summary>flesh</summary>
21595 </member>
21596 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_WOOD_SPLINTERING">
21597 <summary>wood splintering?</summary>
21598 </member>
21599 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_GLASS_BREAK">
21600 <summary>glass break</summary>
21601 </member>
21602 <member name="F:OpenMetaverse.Sounds.OBJECT_COLLISION_METAL_CLUNK">
21603 <summary>metal clunk</summary>
21604 </member>
21605 <member name="F:OpenMetaverse.Sounds.OBJECT_CREATE_WHOOSH">
21606 <summary>whoosh</summary>
21607 </member>
21608 <member name="F:OpenMetaverse.Sounds.OBJECT_DELETE_SHAKE">
21609 <summary>shake</summary>
21610 </member>
21611 <member name="F:OpenMetaverse.Sounds.OBJECT_REZ">
21612 <summary></summary>
21613 </member>
21614 <member name="F:OpenMetaverse.Sounds.PIE_MENU_APPEAR_DING">
21615 <summary>ding</summary>
21616 </member>
21617 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT">
21618 <summary></summary>
21619 </member>
21620 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT1">
21621 <summary></summary>
21622 </member>
21623 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT2">
21624 <summary></summary>
21625 </member>
21626 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT3">
21627 <summary></summary>
21628 </member>
21629 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT4">
21630 <summary></summary>
21631 </member>
21632 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT5">
21633 <summary></summary>
21634 </member>
21635 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT6">
21636 <summary></summary>
21637 </member>
21638 <member name="F:OpenMetaverse.Sounds.PIE_MENU_SLICE_HIGHLIGHT7">
21639 <summary></summary>
21640 </member>
21641 <member name="F:OpenMetaverse.Sounds.SNAPSHOT">
21642 <summary></summary>
21643 </member>
21644 <member name="F:OpenMetaverse.Sounds.TELEPORT_TEXTURE_APPLY">
21645 <summary></summary>
21646 </member>
21647 <member name="F:OpenMetaverse.Sounds.THUNDER">
21648 <summary></summary>
21649 </member>
21650 <member name="F:OpenMetaverse.Sounds.WINDOW_CLOSE">
21651 <summary></summary>
21652 </member>
21653 <member name="F:OpenMetaverse.Sounds.WINDOW_OPEN">
21654 <summary></summary>
21655 </member>
21656 <member name="F:OpenMetaverse.Sounds.ZIPPER">
21657 <summary></summary>
21658 </member>
21659 <member name="M:OpenMetaverse.Sounds.ToDictionary">
22605 <summary> 21660 <summary>
22606 Abstract base for rendering plugins 21661 A dictionary containing all pre-defined sounds
22607 </summary> 21662 </summary>
21663 <returns>A dictionary containing the pre-defined sounds,
21664 where the key is the sounds ID, and the value is a string
21665 containing a name to identify the purpose of the sound</returns>
22608 </member> 21666 </member>
22609 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateSimpleMesh(OpenMetaverse.Primitive,OpenMetaverse.Rendering.DetailLevel)"> 21667 <member name="T:OpenMetaverse.PermissionMask">
22610 <summary> 21668 <summary>
22611 Generates a basic mesh structure from a primitive 21669
22612 </summary> 21670 </summary>
22613 <param name="prim">Primitive to generate the mesh from</param>
22614 <param name="lod">Level of detail to generate the mesh at</param>
22615 <returns>The generated mesh</returns>
22616 </member> 21671 </member>
22617 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateSimpleSculptMesh(OpenMetaverse.Primitive,System.Drawing.Bitmap,OpenMetaverse.Rendering.DetailLevel)"> 21672 <member name="T:OpenMetaverse.PermissionWho">
22618 <summary> 21673 <summary>
22619 Generates a basic mesh structure from a sculpted primitive and 21674
22620 texture
22621 </summary> 21675 </summary>
22622 <param name="prim">Sculpted primitive to generate the mesh from</param>
22623 <param name="sculptTexture">Sculpt texture</param>
22624 <param name="lod">Level of detail to generate the mesh at</param>
22625 <returns>The generated mesh</returns>
22626 </member> 21676 </member>
22627 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateFacetedMesh(OpenMetaverse.Primitive,OpenMetaverse.Rendering.DetailLevel)"> 21677 <member name="F:OpenMetaverse.PermissionWho.Base">
21678 <summary></summary>
21679 </member>
21680 <member name="F:OpenMetaverse.PermissionWho.Owner">
21681 <summary></summary>
21682 </member>
21683 <member name="F:OpenMetaverse.PermissionWho.Group">
21684 <summary></summary>
21685 </member>
21686 <member name="F:OpenMetaverse.PermissionWho.Everyone">
21687 <summary></summary>
21688 </member>
21689 <member name="F:OpenMetaverse.PermissionWho.NextOwner">
21690 <summary></summary>
21691 </member>
21692 <member name="F:OpenMetaverse.PermissionWho.All">
21693 <summary></summary>
21694 </member>
21695 <member name="T:OpenMetaverse.Permissions">
22628 <summary> 21696 <summary>
22629 Generates a series of faces, each face containing a mesh and 21697
22630 metadata
22631 </summary> 21698 </summary>
22632 <param name="prim">Primitive to generate the mesh from</param>
22633 <param name="lod">Level of detail to generate the mesh at</param>
22634 <returns>The generated mesh</returns>
22635 </member> 21699 </member>
22636 <member name="M:OpenMetaverse.Rendering.IRendering.GenerateFacetedSculptMesh(OpenMetaverse.Primitive,System.Drawing.Bitmap,OpenMetaverse.Rendering.DetailLevel)"> 21700 <member name="M:OpenMetaverse.WrappedObject`1.Dispose">
22637 <summary> 21701 <summary>
22638 Generates a series of faces for a sculpted prim, each face 21702 Checks the instance back into the object pool
22639 containing a mesh and metadata
22640 </summary> 21703 </summary>
22641 <param name="prim">Sculpted primitive to generate the mesh from</param>
22642 <param name="sculptTexture">Sculpt texture</param>
22643 <param name="lod">Level of detail to generate the mesh at</param>
22644 <returns>The generated mesh</returns>
22645 </member> 21704 </member>
22646 <member name="M:OpenMetaverse.Rendering.IRendering.TransformTexCoords(System.Collections.Generic.List{OpenMetaverse.Rendering.Vertex},OpenMetaverse.Vector3,OpenMetaverse.Primitive.TextureEntryFace,OpenMetaverse.Vector3)"> 21705 <member name="P:OpenMetaverse.WrappedObject`1.Instance">
22647 <summary> 21706 <summary>
22648 Apply texture coordinate modifications from a 21707 Returns an instance of the class that has been checked out of the Object Pool.
22649 <seealso cref="!:TextureEntryFace" /> to a list of vertices
22650 </summary> 21708 </summary>
22651 <param name="vertices">Vertex list to modify texture coordinates for</param>
22652 <param name="center">Center-point of the face</param>
22653 <param name="teFace">Face texture parameters</param>
22654 <param name="primScale">Scale of the prim</param>
22655 </member> 21709 </member>
22656 <member name="T:OpenMetaverse.Messages.Linden.TeleportFinishMessage"> 21710 <member name="T:OpenMetaverse.Messages.Linden.TeleportFinishMessage">
22657 <summary> 21711 <summary>
@@ -22659,11 +21713,10 @@
22659 </summary> 21713 </summary>
22660 </member> 21714 </member>
22661 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.AgentID"> 21715 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.AgentID">
22662 <summary>The <see cref="T:OpenMetaverse.UUID" /> of the agent</summary> 21716 <summary>The <see cref="T:OpenMetaverse.UUID"/> of the agent</summary>
22663 </member> 21717 </member>
22664 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.LocationID"> 21718 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.LocationID">
22665 <summary> 21719 <summary></summary>
22666 </summary>
22667 </member> 21720 </member>
22668 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.RegionHandle"> 21721 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.RegionHandle">
22669 <summary>The simulators handle the agent teleported to</summary> 21722 <summary>The simulators handle the agent teleported to</summary>
@@ -22673,7 +21726,7 @@
22673 </member> 21726 </member>
22674 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.SimAccess"> 21727 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.SimAccess">
22675 <summary>Indicates the level of access required 21728 <summary>Indicates the level of access required
22676 to access the simulator, or the content rating, or the simulators 21729 to access the simulator, or the content rating, or the simulators
22677 map status</summary> 21730 map status</summary>
22678 </member> 21731 </member>
22679 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.IP"> 21732 <member name="F:OpenMetaverse.Messages.Linden.TeleportFinishMessage.IP">
@@ -22689,13 +21742,13 @@
22689 <summary> 21742 <summary>
22690 Serialize the object 21743 Serialize the object
22691 </summary> 21744 </summary>
22692 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21745 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22693 </member> 21746 </member>
22694 <member name="M:OpenMetaverse.Messages.Linden.TeleportFinishMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21747 <member name="M:OpenMetaverse.Messages.Linden.TeleportFinishMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22695 <summary> 21748 <summary>
22696 Deserialize the message 21749 Deserialize the message
22697 </summary> 21750 </summary>
22698 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21751 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22699 </member> 21752 </member>
22700 <member name="T:OpenMetaverse.Messages.Linden.EstablishAgentCommunicationMessage"> 21753 <member name="T:OpenMetaverse.Messages.Linden.EstablishAgentCommunicationMessage">
22701 <summary> 21754 <summary>
@@ -22706,37 +21759,37 @@
22706 <summary> 21759 <summary>
22707 Serialize the object 21760 Serialize the object
22708 </summary> 21761 </summary>
22709 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21762 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22710 </member> 21763 </member>
22711 <member name="M:OpenMetaverse.Messages.Linden.EstablishAgentCommunicationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21764 <member name="M:OpenMetaverse.Messages.Linden.EstablishAgentCommunicationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22712 <summary> 21765 <summary>
22713 Deserialize the message 21766 Deserialize the message
22714 </summary> 21767 </summary>
22715 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21768 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22716 </member> 21769 </member>
22717 <member name="M:OpenMetaverse.Messages.Linden.CrossedRegionMessage.Serialize"> 21770 <member name="M:OpenMetaverse.Messages.Linden.CrossedRegionMessage.Serialize">
22718 <summary> 21771 <summary>
22719 Serialize the object 21772 Serialize the object
22720 </summary> 21773 </summary>
22721 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21774 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22722 </member> 21775 </member>
22723 <member name="M:OpenMetaverse.Messages.Linden.CrossedRegionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21776 <member name="M:OpenMetaverse.Messages.Linden.CrossedRegionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22724 <summary> 21777 <summary>
22725 Deserialize the message 21778 Deserialize the message
22726 </summary> 21779 </summary>
22727 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21780 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22728 </member> 21781 </member>
22729 <member name="M:OpenMetaverse.Messages.Linden.EnableSimulatorMessage.Serialize"> 21782 <member name="M:OpenMetaverse.Messages.Linden.EnableSimulatorMessage.Serialize">
22730 <summary> 21783 <summary>
22731 Serialize the object 21784 Serialize the object
22732 </summary> 21785 </summary>
22733 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21786 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22734 </member> 21787 </member>
22735 <member name="M:OpenMetaverse.Messages.Linden.EnableSimulatorMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21788 <member name="M:OpenMetaverse.Messages.Linden.EnableSimulatorMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22736 <summary> 21789 <summary>
22737 Deserialize the message 21790 Deserialize the message
22738 </summary> 21791 </summary>
22739 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21792 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22740 </member> 21793 </member>
22741 <member name="T:OpenMetaverse.Messages.Linden.TeleportFailedMessage"> 21794 <member name="T:OpenMetaverse.Messages.Linden.TeleportFailedMessage">
22742 <summary> 21795 <summary>
@@ -22745,15 +21798,14 @@
22745 </summary> 21798 </summary>
22746 </member> 21799 </member>
22747 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.ExtraParams"> 21800 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.ExtraParams">
22748 <summary> 21801 <summary></summary>
22749 </summary>
22750 </member> 21802 </member>
22751 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.MessageKey"> 21803 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.MessageKey">
22752 <summary>A string key of the reason the teleport failed e.g. CouldntTPCloser 21804 <summary>A string key of the reason the teleport failed e.g. CouldntTPCloser
22753 Which could be used to look up a value in a dictionary or enum</summary> 21805 Which could be used to look up a value in a dictionary or enum</summary>
22754 </member> 21806 </member>
22755 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.AgentID"> 21807 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.AgentID">
22756 <summary>The <see cref="T:OpenMetaverse.UUID" /> of the Agent</summary> 21808 <summary>The <see cref="T:OpenMetaverse.UUID"/> of the Agent</summary>
22757 </member> 21809 </member>
22758 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.Reason"> 21810 <member name="F:OpenMetaverse.Messages.Linden.TeleportFailedMessage.Reason">
22759 <summary>A string human readable message containing the reason </summary> 21811 <summary>A string human readable message containing the reason </summary>
@@ -22763,25 +21815,25 @@
22763 <summary> 21815 <summary>
22764 Serialize the object 21816 Serialize the object
22765 </summary> 21817 </summary>
22766 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21818 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22767 </member> 21819 </member>
22768 <member name="M:OpenMetaverse.Messages.Linden.TeleportFailedMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21820 <member name="M:OpenMetaverse.Messages.Linden.TeleportFailedMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22769 <summary> 21821 <summary>
22770 Deserialize the message 21822 Deserialize the message
22771 </summary> 21823 </summary>
22772 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21824 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22773 </member> 21825 </member>
22774 <member name="M:OpenMetaverse.Messages.Linden.LandStatReplyMessage.Serialize"> 21826 <member name="M:OpenMetaverse.Messages.Linden.LandStatReplyMessage.Serialize">
22775 <summary> 21827 <summary>
22776 Serialize the object 21828 Serialize the object
22777 </summary> 21829 </summary>
22778 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 21830 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22779 </member> 21831 </member>
22780 <member name="M:OpenMetaverse.Messages.Linden.LandStatReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 21832 <member name="M:OpenMetaverse.Messages.Linden.LandStatReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22781 <summary> 21833 <summary>
22782 Deserialize the message 21834 Deserialize the message
22783 </summary> 21835 </summary>
22784 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 21836 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22785 </member> 21837 </member>
22786 <member name="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage"> 21838 <member name="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage">
22787 <summary> 21839 <summary>
@@ -22794,43 +21846,43 @@
22794 the DataBlocksExtended map will not be sent from the simulator 21846 the DataBlocksExtended map will not be sent from the simulator
22795 </remarks> 21847 </remarks>
22796 </member> 21848 </member>
21849 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwnersBlock">
21850 <summary>An Array of <see cref="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner"/> objects</summary>
21851 </member>
21852 <member name="M:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.Serialize">
21853 <summary>
21854 Serialize the object
21855 </summary>
21856 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
21857 </member>
21858 <member name="M:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
21859 <summary>
21860 Deserialize the message
21861 </summary>
21862 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
21863 </member>
22797 <member name="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner"> 21864 <member name="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner">
22798 <summary> 21865 <summary>
22799 Prim ownership information for a specified owner on a single parcel 21866 Prim ownership information for a specified owner on a single parcel
22800 </summary> 21867 </summary>
22801 </member> 21868 </member>
22802 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.OwnerID"> 21869 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.OwnerID">
22803 <summary>The <see cref="T:OpenMetaverse.UUID" /> of the prim owner, 21870 <summary>The <see cref="T:OpenMetaverse.UUID"/> of the prim owner,
22804 UUID.Zero if agent has no permission to view prim owner information</summary> 21871 UUID.Zero if agent has no permission to view prim owner information</summary>
22805 </member> 21872 </member>
22806 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.Count"> 21873 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.Count">
22807 <summary>The total number of prims</summary> 21874 <summary>The total number of prims</summary>
22808 </member> 21875 </member>
22809 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.IsGroupOwned"> 21876 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.IsGroupOwned">
22810 <summary>True if the OwnerID is a <see cref="T:OpenMetaverse.Group" /></summary> 21877 <summary>True if the OwnerID is a <see cref="T:OpenMetaverse.Group"/></summary>
22811 </member> 21878 </member>
22812 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.OnlineStatus"> 21879 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.OnlineStatus">
22813 <summary>True if the owner is online 21880 <summary>True if the owner is online
22814 <remarks>This is no longer used by the LL Simulators</remarks></summary> 21881 <remarks>This is no longer used by the LL Simulators</remarks></summary>
22815 </member> 21882 </member>
22816 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.TimeStamp"> 21883 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner.TimeStamp">
22817 <summary>The date the most recent prim was rezzed</summary> 21884 <summary>The date the most recent prim was rezzed</summary>
22818 </member> 21885 </member>
22819 <member name="F:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwnersBlock">
22820 <summary>An Array of <see cref="T:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner" /> objects</summary>
22821 </member>
22822 <member name="M:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.Serialize">
22823 <summary>
22824 Serialize the object
22825 </summary>
22826 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns>
22827 </member>
22828 <member name="M:OpenMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22829 <summary>
22830 Deserialize the message
22831 </summary>
22832 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param>
22833 </member>
22834 <member name="T:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage"> 21886 <member name="T:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage">
22835 <summary> 21887 <summary>
22836 The details of a single parcel in a region, also contains some regionwide globals 21888 The details of a single parcel in a region, also contains some regionwide globals
@@ -22851,19 +21903,17 @@
22851 <summary>Total parcel land area</summary> 21903 <summary>Total parcel land area</summary>
22852 </member> 21904 </member>
22853 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.AuctionID"> 21905 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.AuctionID">
22854 <summary> 21906 <summary></summary>
22855 </summary>
22856 </member> 21907 </member>
22857 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.AuthBuyerID"> 21908 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.AuthBuyerID">
22858 <summary>Key of authorized buyer</summary> 21909 <summary>Key of authorized buyer</summary>
22859 </member> 21910 </member>
22860 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Bitmap"> 21911 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Bitmap">
22861 <summary>Bitmap describing land layout in 4x4m squares across the 21912 <summary>Bitmap describing land layout in 4x4m squares across the
22862 entire region</summary> 21913 entire region</summary>
22863 </member> 21914 </member>
22864 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Category"> 21915 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Category">
22865 <summary> 21916 <summary></summary>
22866 </summary>
22867 </member> 21917 </member>
22868 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ClaimDate"> 21918 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ClaimDate">
22869 <summary>Date land was claimed</summary> 21919 <summary>Date land was claimed</summary>
@@ -22875,29 +21925,26 @@
22875 <summary>Parcel Description</summary> 21925 <summary>Parcel Description</summary>
22876 </member> 21926 </member>
22877 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ParcelFlags"> 21927 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ParcelFlags">
22878 <summary> 21928 <summary></summary>
22879 </summary>
22880 </member> 21929 </member>
22881 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.GroupID"> 21930 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.GroupID">
22882 <summary> 21931 <summary></summary>
22883 </summary>
22884 </member> 21932 </member>
22885 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.GroupPrims"> 21933 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.GroupPrims">
22886 <summary>Total number of primitives owned by the parcel group on 21934 <summary>Total number of primitives owned by the parcel group on
22887 this parcel</summary> 21935 this parcel</summary>
22888 </member> 21936 </member>
22889 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.IsGroupOwned"> 21937 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.IsGroupOwned">
22890 <summary>Whether the land is deeded to a group or not</summary> 21938 <summary>Whether the land is deeded to a group or not</summary>
22891 </member> 21939 </member>
22892 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.LandingType"> 21940 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.LandingType">
22893 <summary> 21941 <summary></summary>
22894 </summary>
22895 </member> 21942 </member>
22896 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MaxPrims"> 21943 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MaxPrims">
22897 <summary>Maximum number of primitives this parcel supports</summary> 21944 <summary>Maximum number of primitives this parcel supports</summary>
22898 </member> 21945 </member>
22899 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaID"> 21946 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaID">
22900 <summary>The Asset UUID of the Texture which when applied to a 21947 <summary>The Asset UUID of the Texture which when applied to a
22901 primitive will display the media</summary> 21948 primitive will display the media</summary>
22902 </member> 21949 </member>
22903 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaURL"> 21950 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaURL">
@@ -22916,8 +21963,7 @@
22916 <summary>Autoreturn value in minutes for others' objects</summary> 21963 <summary>Autoreturn value in minutes for others' objects</summary>
22917 </member> 21964 </member>
22918 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OtherCount"> 21965 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OtherCount">
22919 <summary> 21966 <summary></summary>
22920 </summary>
22921 </member> 21967 </member>
22922 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OtherPrims"> 21968 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OtherPrims">
22923 <summary>Total number of other primitives on this parcel</summary> 21969 <summary>Total number of other primitives on this parcel</summary>
@@ -22926,12 +21972,11 @@
22926 <summary>UUID of the owner of this parcel</summary> 21972 <summary>UUID of the owner of this parcel</summary>
22927 </member> 21973 </member>
22928 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OwnerPrims"> 21974 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.OwnerPrims">
22929 <summary>Total number of primitives owned by the parcel owner on 21975 <summary>Total number of primitives owned by the parcel owner on
22930 this parcel</summary> 21976 this parcel</summary>
22931 </member> 21977 </member>
22932 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ParcelPrimBonus"> 21978 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.ParcelPrimBonus">
22933 <summary> 21979 <summary></summary>
22934 </summary>
22935 </member> 21980 </member>
22936 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.PassHours"> 21981 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.PassHours">
22937 <summary>How long is pass valid for</summary> 21982 <summary>How long is pass valid for</summary>
@@ -22940,36 +21985,32 @@
22940 <summary>Price for a temporary pass</summary> 21985 <summary>Price for a temporary pass</summary>
22941 </member> 21986 </member>
22942 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.PublicCount"> 21987 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.PublicCount">
22943 <summary> 21988 <summary></summary>
22944 </summary>
22945 </member> 21989 </member>
22946 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Privacy"> 21990 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Privacy">
22947 <summary>Disallows people outside the parcel from being able to see in</summary> 21991 <summary>Disallows people outside the parcel from being able to see in</summary>
22948 </member> 21992 </member>
22949 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyAnonymous"> 21993 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyAnonymous">
22950 <summary> 21994 <summary></summary>
22951 </summary>
22952 </member> 21995 </member>
22953 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyIdentified"> 21996 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyIdentified">
22954 <summary> 21997 <summary></summary>
22955 </summary>
22956 </member> 21998 </member>
22957 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyTransacted"> 21999 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyTransacted">
22958 <summary> 22000 <summary></summary>
22959 </summary>
22960 </member> 22001 </member>
22961 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyAgeUnverified"> 22002 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionDenyAgeUnverified">
22962 <summary>True if the region denies access to age unverified users</summary> 22003 <summary>True if the region denies access to age unverified users</summary>
22963 </member> 22004 </member>
22964 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionPushOverride"> 22005 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RegionPushOverride">
22965 <summary> 22006 <summary></summary>
22966 </summary>
22967 </member> 22007 </member>
22968 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RentPrice"> 22008 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RentPrice">
22969 <summary>This field is no longer used</summary> 22009 <summary>This field is no longer used</summary>
22970 </member> 22010 </member>
22971 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RequestResult"> 22011 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.RequestResult">
22972 The result of a request for parcel properties</member> 22012 The result of a request for parcel properties
22013 </member>
22973 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SalePrice"> 22014 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SalePrice">
22974 <summary>Sale price of the parcel, only useful if ForSale is set</summary> 22015 <summary>Sale price of the parcel, only useful if ForSale is set</summary>
22975 <remarks>The SalePrice will remain the same after an ownership 22016 <remarks>The SalePrice will remain the same after an ownership
@@ -22983,14 +22024,13 @@
22983 </summary> 22024 </summary>
22984 </member> 22025 </member>
22985 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SelfCount"> 22026 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SelfCount">
22986 <summary> 22027 <summary></summary>
22987 </summary>
22988 </member> 22028 </member>
22989 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SequenceID"> 22029 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SequenceID">
22990 <summary> 22030 <summary>
22991 A number which increments by 1, starting at 0 for each ParcelProperties request. 22031 A number which increments by 1, starting at 0 for each ParcelProperties request.
22992 Can be overriden by specifying the sequenceID with the ParcelPropertiesRequest being sent. 22032 Can be overriden by specifying the sequenceID with the ParcelPropertiesRequest being sent.
22993 a Negative number indicates the action in <seealso cref="T:OpenMetaverse.ParcelPropertiesStatus" /> has occurred. 22033 a Negative number indicates the action in <seealso cref="T:OpenMetaverse.ParcelPropertiesStatus"/> has occurred.
22994 </summary> 22034 </summary>
22995 </member> 22035 </member>
22996 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SimWideMaxPrims"> 22036 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SimWideMaxPrims">
@@ -23000,8 +22040,7 @@
23000 <summary>Total primitives across the entire simulator</summary> 22040 <summary>Total primitives across the entire simulator</summary>
23001 </member> 22041 </member>
23002 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SnapSelection"> 22042 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SnapSelection">
23003 <summary> 22043 <summary></summary>
23004 </summary>
23005 </member> 22044 </member>
23006 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SnapshotID"> 22045 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.SnapshotID">
23007 <summary>Key of parcel snapshot</summary> 22046 <summary>Key of parcel snapshot</summary>
@@ -23013,12 +22052,10 @@
23013 <summary>Total number of primitives on this parcel</summary> 22052 <summary>Total number of primitives on this parcel</summary>
23014 </member> 22053 </member>
23015 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.UserLocation"> 22054 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.UserLocation">
23016 <summary> 22055 <summary></summary>
23017 </summary>
23018 </member> 22056 </member>
23019 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.UserLookAt"> 22057 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.UserLookAt">
23020 <summary> 22058 <summary></summary>
23021 </summary>
23022 </member> 22059 </member>
23023 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaDesc"> 22060 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.MediaDesc">
23024 <summary>A description of the media</summary> 22061 <summary>A description of the media</summary>
@@ -23045,20 +22082,20 @@
23045 <summary> 22082 <summary>
23046 Serialize the object 22083 Serialize the object
23047 </summary> 22084 </summary>
23048 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22085 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23049 </member> 22086 </member>
23050 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22087 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23051 <summary> 22088 <summary>
23052 Deserialize the message 22089 Deserialize the message
23053 </summary> 22090 </summary>
23054 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22091 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23055 </member> 22092 </member>
23056 <member name="T:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage"> 22093 <member name="T:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage">
23057 <summary>A message sent from the viewer to the simulator to updated a specific parcels settings</summary> 22094 <summary>A message sent from the viewer to the simulator to updated a specific parcels settings</summary>
23058 </member> 22095 </member>
23059 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.AuthBuyerID"> 22096 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.AuthBuyerID">
23060 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the agent authorized to purchase this 22097 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the agent authorized to purchase this
23061 parcel of land or a NULL <seealso cref="T:OpenMetaverse.UUID" /> if the sale is authorized to anyone</summary> 22098 parcel of land or a NULL <seealso cref="T:OpenMetaverse.UUID"/> if the sale is authorized to anyone</summary>
23062 </member> 22099 </member>
23063 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaAutoScale"> 22100 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaAutoScale">
23064 <summary>true to enable auto scaling of the parcel media</summary> 22101 <summary>true to enable auto scaling of the parcel media</summary>
@@ -23071,11 +22108,11 @@
23071 <summary>A string containing the description to set</summary> 22108 <summary>A string containing the description to set</summary>
23072 </member> 22109 </member>
23073 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.GroupID"> 22110 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.GroupID">
23074 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the <seealso cref="T:OpenMetaverse.Group" /> which allows for additional 22111 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the <seealso cref="T:OpenMetaverse.Group"/> which allows for additional
23075 powers and restrictions.</summary> 22112 powers and restrictions.</summary>
23076 </member> 22113 </member>
23077 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Landing"> 22114 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Landing">
23078 <summary>The <seealso cref="T:OpenMetaverse.LandingType" /> which specifies how avatars which teleport 22115 <summary>The <seealso cref="T:OpenMetaverse.LandingType"/> which specifies how avatars which teleport
23079 to this parcel are handled</summary> 22116 to this parcel are handled</summary>
23080 </member> 22117 </member>
23081 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.LocalID"> 22118 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.LocalID">
@@ -23086,88 +22123,70 @@
23086 to visitors</summary> 22123 to visitors</summary>
23087 </member> 22124 </member>
23088 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaHeight"> 22125 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaHeight">
23089 <summary> 22126 <summary></summary>
23090 </summary>
23091 </member> 22127 </member>
23092 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaLoop"> 22128 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaLoop">
23093 <summary> 22129 <summary></summary>
23094 </summary>
23095 </member> 22130 </member>
23096 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaID"> 22131 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaID">
23097 <summary> 22132 <summary></summary>
23098 </summary>
23099 </member> 22133 </member>
23100 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaType"> 22134 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaType">
23101 <summary> 22135 <summary></summary>
23102 </summary>
23103 </member> 22136 </member>
23104 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaURL"> 22137 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaURL">
23105 <summary> 22138 <summary></summary>
23106 </summary>
23107 </member> 22139 </member>
23108 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaWidth"> 22140 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MediaWidth">
23109 <summary> 22141 <summary></summary>
23110 </summary>
23111 </member> 22142 </member>
23112 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MusicURL"> 22143 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.MusicURL">
23113 <summary> 22144 <summary></summary>
23114 </summary>
23115 </member> 22145 </member>
23116 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Name"> 22146 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Name">
23117 <summary> 22147 <summary></summary>
23118 </summary>
23119 </member> 22148 </member>
23120 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ObscureMedia"> 22149 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ObscureMedia">
23121 <summary> 22150 <summary></summary>
23122 </summary>
23123 </member> 22151 </member>
23124 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ObscureMusic"> 22152 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ObscureMusic">
23125 <summary> 22153 <summary></summary>
23126 </summary>
23127 </member> 22154 </member>
23128 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ParcelFlags"> 22155 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.ParcelFlags">
23129 <summary> 22156 <summary></summary>
23130 </summary>
23131 </member> 22157 </member>
23132 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.PassHours"> 22158 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.PassHours">
23133 <summary> 22159 <summary></summary>
23134 </summary>
23135 </member> 22160 </member>
23136 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.PassPrice"> 22161 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.PassPrice">
23137 <summary> 22162 <summary></summary>
23138 </summary>
23139 </member> 22163 </member>
23140 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Privacy"> 22164 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Privacy">
23141 <summary> 22165 <summary></summary>
23142 </summary>
23143 </member> 22166 </member>
23144 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.SalePrice"> 22167 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.SalePrice">
23145 <summary> 22168 <summary></summary>
23146 </summary>
23147 </member> 22169 </member>
23148 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.SnapshotID"> 22170 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.SnapshotID">
23149 <summary> 22171 <summary></summary>
23150 </summary>
23151 </member> 22172 </member>
23152 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.UserLocation"> 22173 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.UserLocation">
23153 <summary> 22174 <summary></summary>
23154 </summary>
23155 </member> 22175 </member>
23156 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.UserLookAt"> 22176 <member name="F:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.UserLookAt">
23157 <summary> 22177 <summary></summary>
23158 </summary>
23159 </member> 22178 </member>
23160 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22179 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23161 <summary> 22180 <summary>
23162 Deserialize the message 22181 Deserialize the message
23163 </summary> 22182 </summary>
23164 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22183 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23165 </member> 22184 </member>
23166 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Serialize"> 22185 <member name="M:OpenMetaverse.Messages.Linden.ParcelPropertiesUpdateMessage.Serialize">
23167 <summary> 22186 <summary>
23168 Serialize the object 22187 Serialize the object
23169 </summary> 22188 </summary>
23170 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22189 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23171 </member> 22190 </member>
23172 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestBlock"> 22191 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestBlock">
23173 <summary>Base class used for the RemoteParcelRequest message</summary> 22192 <summary>Base class used for the RemoteParcelRequest message</summary>
@@ -23185,23 +22204,23 @@
23185 <summary>Region handle of the parcel we are looking up</summary> 22204 <summary>Region handle of the parcel we are looking up</summary>
23186 </member> 22205 </member>
23187 <member name="F:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.RegionID"> 22206 <member name="F:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.RegionID">
23188 <summary>Region <see cref="T:OpenMetaverse.UUID" /> of the parcel we are looking up</summary> 22207 <summary>Region <see cref="T:OpenMetaverse.UUID"/> of the parcel we are looking up</summary>
23189 </member> 22208 </member>
23190 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.Serialize"> 22209 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.Serialize">
23191 <summary> 22210 <summary>
23192 Serialize the object 22211 Serialize the object
23193 </summary> 22212 </summary>
23194 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22213 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23195 </member> 22214 </member>
23196 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22215 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23197 <summary> 22216 <summary>
23198 Deserialize the message 22217 Deserialize the message
23199 </summary> 22218 </summary>
23200 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22219 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23201 </member> 22220 </member>
23202 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestReply"> 22221 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestReply">
23203 <summary> 22222 <summary>
23204 A message sent from the simulator to the viewer in response to a <see cref="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest" /> 22223 A message sent from the simulator to the viewer in response to a <see cref="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestRequest"/>
23205 which will contain parcel information 22224 which will contain parcel information
23206 </summary> 22225 </summary>
23207 </member> 22226 </member>
@@ -23212,13 +22231,13 @@
23212 <summary> 22231 <summary>
23213 Serialize the object 22232 Serialize the object
23214 </summary> 22233 </summary>
23215 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22234 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23216 </member> 22235 </member>
23217 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestReply.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22236 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestReply.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23218 <summary> 22237 <summary>
23219 Deserialize the message 22238 Deserialize the message
23220 </summary> 22239 </summary>
23221 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22240 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23222 </member> 22241 </member>
23223 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestMessage"> 22242 <member name="T:OpenMetaverse.Messages.Linden.RemoteParcelRequestMessage">
23224 <summary> 22243 <summary>
@@ -23233,37 +22252,37 @@
23233 <summary> 22252 <summary>
23234 Serialize the object 22253 Serialize the object
23235 </summary> 22254 </summary>
23236 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22255 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23237 </member> 22256 </member>
23238 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22257 <member name="M:OpenMetaverse.Messages.Linden.RemoteParcelRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23239 <summary> 22258 <summary>
23240 Deserialize the message 22259 Deserialize the message
23241 </summary> 22260 </summary>
23242 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22261 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23243 </member> 22262 </member>
23244 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryMessage.Serialize"> 22263 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryMessage.Serialize">
23245 <summary> 22264 <summary>
23246 Serialize the object 22265 Serialize the object
23247 </summary> 22266 </summary>
23248 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22267 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23249 </member> 22268 </member>
23250 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22269 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23251 <summary> 22270 <summary>
23252 Deserialize the message 22271 Deserialize the message
23253 </summary> 22272 </summary>
23254 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22273 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23255 </member> 22274 </member>
23256 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryVariablePriceMessage.Serialize"> 22275 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryVariablePriceMessage.Serialize">
23257 <summary> 22276 <summary>
23258 Serialize the object 22277 Serialize the object
23259 </summary> 22278 </summary>
23260 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22279 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23261 </member> 22280 </member>
23262 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryVariablePriceMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22281 <member name="M:OpenMetaverse.Messages.Linden.NewFileAgentInventoryVariablePriceMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23263 <summary> 22282 <summary>
23264 Deserialize the message 22283 Deserialize the message
23265 </summary> 22284 </summary>
23266 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22285 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23267 </member> 22286 </member>
23268 <member name="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage"> 22287 <member name="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage">
23269 <summary> 22288 <summary>
@@ -23271,6 +22290,29 @@
23271 the groups the agent is in 22290 the groups the agent is in
23272 </summary> 22291 </summary>
23273 </member> 22292 </member>
22293 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.AgentID">
22294 <summary>The Agent receiving the message</summary>
22295 </member>
22296 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupDataBlock">
22297 <summary>An array containing <seealso cref="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData"/> information
22298 for each <see cref="T:OpenMetaverse.Group"/> the agent is a member of</summary>
22299 </member>
22300 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.NewGroupDataBlock">
22301 <summary>An array containing <seealso cref="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.NewGroupData"/> information
22302 for each <see cref="T:OpenMetaverse.Group"/> the agent is a member of</summary>
22303 </member>
22304 <member name="M:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.Serialize">
22305 <summary>
22306 Serialize the object
22307 </summary>
22308 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22309 </member>
22310 <member name="M:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22311 <summary>
22312 Deserialize the message
22313 </summary>
22314 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22315 </member>
23274 <member name="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData"> 22316 <member name="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData">
23275 <summary>Group Details specific to the agent</summary> 22317 <summary>Group Details specific to the agent</summary>
23276 </member> 22318 </member>
@@ -23281,10 +22323,10 @@
23281 <summary>The agents tier contribution to the group</summary> 22323 <summary>The agents tier contribution to the group</summary>
23282 </member> 22324 </member>
23283 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupID"> 22325 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupID">
23284 <summary>The Groups <seealso cref="T:OpenMetaverse.UUID" /></summary> 22326 <summary>The Groups <seealso cref="T:OpenMetaverse.UUID"/></summary>
23285 </member> 22327 </member>
23286 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupInsigniaID"> 22328 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupInsigniaID">
23287 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the groups insignia</summary> 22329 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the groups insignia</summary>
23288 </member> 22330 </member>
23289 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupName"> 22331 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData.GroupName">
23290 <summary>The name of the group</summary> 22332 <summary>The name of the group</summary>
@@ -23300,38 +22342,15 @@
23300 <summary>true of the agent allows this group to be 22342 <summary>true of the agent allows this group to be
23301 listed in their profile</summary> 22343 listed in their profile</summary>
23302 </member> 22344 </member>
23303 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.AgentID">
23304 <summary>The Agent receiving the message</summary>
23305 </member>
23306 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupDataBlock">
23307 <summary>An array containing <seealso cref="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData" /> information
23308 for each <see cref="T:OpenMetaverse.Group" /> the agent is a member of</summary>
23309 </member>
23310 <member name="F:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.NewGroupDataBlock">
23311 <summary>An array containing <seealso cref="T:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.NewGroupData" /> information
23312 for each <see cref="T:OpenMetaverse.Group" /> the agent is a member of</summary>
23313 </member>
23314 <member name="M:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.Serialize">
23315 <summary>
23316 Serialize the object
23317 </summary>
23318 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns>
23319 </member>
23320 <member name="M:OpenMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23321 <summary>
23322 Deserialize the message
23323 </summary>
23324 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param>
23325 </member>
23326 <member name="T:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage"> 22345 <member name="T:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage">
23327 <summary> 22346 <summary>
23328 A message sent from the viewer to the simulator which 22347 A message sent from the viewer to the simulator which
23329 specifies the language and permissions for others to detect 22348 specifies the language and permissions for others to detect
23330 the language specified 22349 the language specified
23331 </summary> 22350 </summary>
23332 </member> 22351 </member>
23333 <member name="F:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.Language"> 22352 <member name="F:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.Language">
23334 <summary>A string containng the default language 22353 <summary>A string containng the default language
23335 to use for the agent</summary> 22354 to use for the agent</summary>
23336 </member> 22355 </member>
23337 <member name="F:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.LanguagePublic"> 22356 <member name="F:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.LanguagePublic">
@@ -23342,13 +22361,13 @@
23342 <summary> 22361 <summary>
23343 Serialize the object 22362 Serialize the object
23344 </summary> 22363 </summary>
23345 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22364 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23346 </member> 22365 </member>
23347 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22366 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentLanguageMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23348 <summary> 22367 <summary>
23349 Deserialize the message 22368 Deserialize the message
23350 </summary> 22369 </summary>
23351 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22370 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23352 </member> 22371 </member>
23353 <member name="T:OpenMetaverse.Messages.Linden.AgentDropGroupMessage"> 22372 <member name="T:OpenMetaverse.Messages.Linden.AgentDropGroupMessage">
23354 <summary> 22373 <summary>
@@ -23356,15 +22375,6 @@
23356 leaves a group 22375 leaves a group
23357 </summary> 22376 </summary>
23358 </member> 22377 </member>
23359 <member name="T:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData">
23360 <summary>An object containing the Agents UUID, and the Groups UUID</summary>
23361 </member>
23362 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData.AgentID">
23363 <summary>The ID of the Agent leaving the group</summary>
23364 </member>
23365 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData.GroupID">
23366 <summary>The GroupID the Agent is leaving</summary>
23367 </member>
23368 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentDataBlock"> 22378 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentDataBlock">
23369 <summary> 22379 <summary>
23370 An Array containing the AgentID and GroupID 22380 An Array containing the AgentID and GroupID
@@ -23374,13 +22384,22 @@
23374 <summary> 22384 <summary>
23375 Serialize the object 22385 Serialize the object
23376 </summary> 22386 </summary>
23377 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22387 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23378 </member> 22388 </member>
23379 <member name="M:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22389 <member name="M:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23380 <summary> 22390 <summary>
23381 Deserialize the message 22391 Deserialize the message
23382 </summary> 22392 </summary>
23383 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22393 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22394 </member>
22395 <member name="T:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData">
22396 <summary>An object containing the Agents UUID, and the Groups UUID</summary>
22397 </member>
22398 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData.AgentID">
22399 <summary>The ID of the Agent leaving the group</summary>
22400 </member>
22401 <member name="F:OpenMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData.GroupID">
22402 <summary>The GroupID the Agent is leaving</summary>
23384 </member> 22403 </member>
23385 <member name="T:OpenMetaverse.Messages.Linden.AssetUploaderBlock"> 22404 <member name="T:OpenMetaverse.Messages.Linden.AssetUploaderBlock">
23386 <summary>Base class for Asset uploads/results via Capabilities</summary> 22405 <summary>Base class for Asset uploads/results via Capabilities</summary>
@@ -23394,13 +22413,13 @@
23394 <summary> 22413 <summary>
23395 Serialize the object 22414 Serialize the object
23396 </summary> 22415 </summary>
23397 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22416 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23398 </member> 22417 </member>
23399 <member name="M:OpenMetaverse.Messages.Linden.AssetUploaderBlock.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22418 <member name="M:OpenMetaverse.Messages.Linden.AssetUploaderBlock.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23400 <summary> 22419 <summary>
23401 Deserialize the message 22420 Deserialize the message
23402 </summary> 22421 </summary>
23403 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22422 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23404 </member> 22423 </member>
23405 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestUpload"> 22424 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestUpload">
23406 <summary> 22425 <summary>
@@ -23413,7 +22432,7 @@
23413 </member> 22432 </member>
23414 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestComplete"> 22433 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestComplete">
23415 <summary> 22434 <summary>
23416 A message sent from the simulator that will inform the agent the upload is complete, 22435 A message sent from the simulator that will inform the agent the upload is complete,
23417 and the UUID of the uploaded asset 22436 and the UUID of the uploaded asset
23418 </summary> 22437 </summary>
23419 </member> 22438 </member>
@@ -23433,17 +22452,17 @@
23433 <summary> 22452 <summary>
23434 Serialize the object 22453 Serialize the object
23435 </summary> 22454 </summary>
23436 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22455 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23437 </member> 22456 </member>
23438 <member name="M:OpenMetaverse.Messages.Linden.UploadBakedTextureMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22457 <member name="M:OpenMetaverse.Messages.Linden.UploadBakedTextureMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23439 <summary> 22458 <summary>
23440 Deserialize the message 22459 Deserialize the message
23441 </summary> 22460 </summary>
23442 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22461 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23443 </member> 22462 </member>
23444 <member name="T:OpenMetaverse.Messages.Linden.RequiredVoiceVersionMessage"> 22463 <member name="T:OpenMetaverse.Messages.Linden.RequiredVoiceVersionMessage">
23445 <summary> 22464 <summary>
23446 A message sent from the simulator which indicates the minimum version required for 22465 A message sent from the simulator which indicates the minimum version required for
23447 using voice chat 22466 using voice chat
23448 </summary> 22467 </summary>
23449 </member> 22468 </member>
@@ -23460,17 +22479,17 @@
23460 <summary> 22479 <summary>
23461 Serialize the object 22480 Serialize the object
23462 </summary> 22481 </summary>
23463 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22482 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23464 </member> 22483 </member>
23465 <member name="M:OpenMetaverse.Messages.Linden.RequiredVoiceVersionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22484 <member name="M:OpenMetaverse.Messages.Linden.RequiredVoiceVersionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23466 <summary> 22485 <summary>
23467 Deserialize the message 22486 Deserialize the message
23468 </summary> 22487 </summary>
23469 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22488 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23470 </member> 22489 </member>
23471 <member name="T:OpenMetaverse.Messages.Linden.ParcelVoiceInfoRequestMessage"> 22490 <member name="T:OpenMetaverse.Messages.Linden.ParcelVoiceInfoRequestMessage">
23472 <summary> 22491 <summary>
23473 A message sent from the simulator to the viewer containing the 22492 A message sent from the simulator to the viewer containing the
23474 voice server URI 22493 voice server URI
23475 </summary> 22494 </summary>
23476 </member> 22495 </member>
@@ -23488,37 +22507,36 @@
23488 <summary> 22507 <summary>
23489 Serialize the object 22508 Serialize the object
23490 </summary> 22509 </summary>
23491 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22510 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23492 </member> 22511 </member>
23493 <member name="M:OpenMetaverse.Messages.Linden.ParcelVoiceInfoRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22512 <member name="M:OpenMetaverse.Messages.Linden.ParcelVoiceInfoRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23494 <summary> 22513 <summary>
23495 Deserialize the message 22514 Deserialize the message
23496 </summary> 22515 </summary>
23497 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22516 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23498 </member> 22517 </member>
23499 <member name="T:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage"> 22518 <member name="T:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage">
23500 <summary> 22519 <summary>
22520
23501 </summary> 22521 </summary>
23502 </member> 22522 </member>
23503 <member name="F:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Password"> 22523 <member name="F:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Password">
23504 <summary> 22524 <summary></summary>
23505 </summary>
23506 </member> 22525 </member>
23507 <member name="F:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Username"> 22526 <member name="F:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Username">
23508 <summary> 22527 <summary></summary>
23509 </summary>
23510 </member> 22528 </member>
23511 <member name="M:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Serialize"> 22529 <member name="M:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Serialize">
23512 <summary> 22530 <summary>
23513 Serialize the object 22531 Serialize the object
23514 </summary> 22532 </summary>
23515 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22533 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23516 </member> 22534 </member>
23517 <member name="M:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22535 <member name="M:OpenMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23518 <summary> 22536 <summary>
23519 Deserialize the message 22537 Deserialize the message
23520 </summary> 22538 </summary>
23521 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22539 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23522 </member> 22540 </member>
23523 <member name="T:OpenMetaverse.Messages.Linden.UploadScriptTaskMessage"> 22541 <member name="T:OpenMetaverse.Messages.Linden.UploadScriptTaskMessage">
23524 <summary> 22542 <summary>
@@ -23533,13 +22551,13 @@
23533 <summary> 22551 <summary>
23534 Serialize the object 22552 Serialize the object
23535 </summary> 22553 </summary>
23536 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22554 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23537 </member> 22555 </member>
23538 <member name="M:OpenMetaverse.Messages.Linden.UploadScriptTaskMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22556 <member name="M:OpenMetaverse.Messages.Linden.UploadScriptTaskMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23539 <summary> 22557 <summary>
23540 Deserialize the message 22558 Deserialize the message
23541 </summary> 22559 </summary>
23542 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22560 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23543 </member> 22561 </member>
23544 <member name="T:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage"> 22562 <member name="T:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage">
23545 <summary> 22563 <summary>
@@ -23551,11 +22569,11 @@
23551 <summary>The Asset ID of the script</summary> 22569 <summary>The Asset ID of the script</summary>
23552 </member> 22570 </member>
23553 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Mono"> 22571 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Mono">
23554 <summary>True of the script is compiled/ran using the mono interpreter, false indicates it 22572 <summary>True of the script is compiled/ran using the mono interpreter, false indicates it
23555 uses the older less efficient lsl2 interprter</summary> 22573 uses the older less efficient lsl2 interprter</summary>
23556 </member> 22574 </member>
23557 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.ObjectID"> 22575 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.ObjectID">
23558 <summary>The Task containing the scripts <seealso cref="T:OpenMetaverse.UUID" /></summary> 22576 <summary>The Task containing the scripts <seealso cref="T:OpenMetaverse.UUID"/></summary>
23559 </member> 22577 </member>
23560 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Running"> 22578 <member name="F:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Running">
23561 <summary>true of the script is in a running state</summary> 22579 <summary>true of the script is in a running state</summary>
@@ -23564,13 +22582,13 @@
23564 <summary> 22582 <summary>
23565 Serialize the object 22583 Serialize the object
23566 </summary> 22584 </summary>
23567 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22585 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23568 </member> 22586 </member>
23569 <member name="M:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22587 <member name="M:OpenMetaverse.Messages.Linden.ScriptRunningReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23570 <summary> 22588 <summary>
23571 Deserialize the message 22589 Deserialize the message
23572 </summary> 22590 </summary>
23573 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22591 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23574 </member> 22592 </member>
23575 <member name="T:OpenMetaverse.Messages.Linden.UpdateGestureAgentInventoryMessage"> 22593 <member name="T:OpenMetaverse.Messages.Linden.UpdateGestureAgentInventoryMessage">
23576 <summary> 22594 <summary>
@@ -23585,13 +22603,13 @@
23585 <summary> 22603 <summary>
23586 Serialize the object 22604 Serialize the object
23587 </summary> 22605 </summary>
23588 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22606 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23589 </member> 22607 </member>
23590 <member name="M:OpenMetaverse.Messages.Linden.UpdateGestureAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22608 <member name="M:OpenMetaverse.Messages.Linden.UpdateGestureAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23591 <summary> 22609 <summary>
23592 Deserialize the message 22610 Deserialize the message
23593 </summary> 22611 </summary>
23594 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22612 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23595 </member> 22613 </member>
23596 <member name="T:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage"> 22614 <member name="T:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage">
23597 <summary> 22615 <summary>
@@ -23600,22 +22618,22 @@
23600 </summary> 22618 </summary>
23601 </member> 22619 </member>
23602 <member name="F:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.TaskID"> 22620 <member name="F:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.TaskID">
23603 <summary>The <seealso cref="T:OpenMetaverse.UUID" /> of the Task containing the notecard asset to update</summary> 22621 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the Task containing the notecard asset to update</summary>
23604 </member> 22622 </member>
23605 <member name="F:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.ItemID"> 22623 <member name="F:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.ItemID">
23606 <summary>The notecard assets <seealso cref="T:OpenMetaverse.UUID" /> contained in the tasks inventory</summary> 22624 <summary>The notecard assets <seealso cref="T:OpenMetaverse.UUID"/> contained in the tasks inventory</summary>
23607 </member> 22625 </member>
23608 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.Serialize"> 22626 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.Serialize">
23609 <summary> 22627 <summary>
23610 Serialize the object 22628 Serialize the object
23611 </summary> 22629 </summary>
23612 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22630 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23613 </member> 22631 </member>
23614 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22632 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardTaskInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23615 <summary> 22633 <summary>
23616 Deserialize the message 22634 Deserialize the message
23617 </summary> 22635 </summary>
23618 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22636 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23619 </member> 22637 </member>
23620 <member name="T:OpenMetaverse.Messages.Linden.UpdateAgentInventoryRequestMessage"> 22638 <member name="T:OpenMetaverse.Messages.Linden.UpdateAgentInventoryRequestMessage">
23621 <summary> 22639 <summary>
@@ -23632,13 +22650,13 @@
23632 <summary> 22650 <summary>
23633 Serialize the object 22651 Serialize the object
23634 </summary> 22652 </summary>
23635 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22653 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23636 </member> 22654 </member>
23637 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInventoryRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22655 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInventoryRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23638 <summary> 22656 <summary>
23639 Deserialize the message 22657 Deserialize the message
23640 </summary> 22658 </summary>
23641 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22659 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23642 </member> 22660 </member>
23643 <member name="T:OpenMetaverse.Messages.Linden.UpdateNotecardAgentInventoryMessage"> 22661 <member name="T:OpenMetaverse.Messages.Linden.UpdateNotecardAgentInventoryMessage">
23644 <summary> 22662 <summary>
@@ -23653,30 +22671,30 @@
23653 <summary> 22671 <summary>
23654 Serialize the object 22672 Serialize the object
23655 </summary> 22673 </summary>
23656 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22674 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23657 </member> 22675 </member>
23658 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22676 <member name="M:OpenMetaverse.Messages.Linden.UpdateNotecardAgentInventoryMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23659 <summary> 22677 <summary>
23660 Deserialize the message 22678 Deserialize the message
23661 </summary> 22679 </summary>
23662 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22680 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23663 </member> 22681 </member>
23664 <member name="M:OpenMetaverse.Messages.Linden.CopyInventoryFromNotecardMessage.Serialize"> 22682 <member name="M:OpenMetaverse.Messages.Linden.CopyInventoryFromNotecardMessage.Serialize">
23665 <summary> 22683 <summary>
23666 Serialize the object 22684 Serialize the object
23667 </summary> 22685 </summary>
23668 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22686 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23669 </member> 22687 </member>
23670 <member name="M:OpenMetaverse.Messages.Linden.CopyInventoryFromNotecardMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22688 <member name="M:OpenMetaverse.Messages.Linden.CopyInventoryFromNotecardMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23671 <summary> 22689 <summary>
23672 Deserialize the message 22690 Deserialize the message
23673 </summary> 22691 </summary>
23674 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22692 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23675 </member> 22693 </member>
23676 <member name="T:OpenMetaverse.Messages.Linden.UploaderScriptRequestError"> 22694 <member name="T:OpenMetaverse.Messages.Linden.UploaderScriptRequestError">
23677 <summary> 22695 <summary>
23678 A message sent from the simulator to the viewer which indicates 22696 A message sent from the simulator to the viewer which indicates
23679 an error occurred while attempting to update a script in an agents or tasks 22697 an error occurred while attempting to update a script in an agents or tasks
23680 inventory 22698 inventory
23681 </summary> 22699 </summary>
23682 </member> 22700 </member>
@@ -23704,24 +22722,24 @@
23704 <summary>The scripts InventoryItem ItemID to update</summary> 22722 <summary>The scripts InventoryItem ItemID to update</summary>
23705 </member> 22723 </member>
23706 <member name="F:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Target"> 22724 <member name="F:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Target">
23707 <summary>A lowercase string containing either "mono" or "lsl2" which 22725 <summary>A lowercase string containing either "mono" or "lsl2" which
23708 specifies the script is compiled and ran on the mono runtime, or the older 22726 specifies the script is compiled and ran on the mono runtime, or the older
23709 lsl runtime</summary> 22727 lsl runtime</summary>
23710 </member> 22728 </member>
23711 <member name="F:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.TaskID"> 22729 <member name="F:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.TaskID">
23712 <summary>The tasks <see cref="T:OpenMetaverse.UUID" /> which contains the script to update</summary> 22730 <summary>The tasks <see cref="T:OpenMetaverse.UUID"/> which contains the script to update</summary>
23713 </member> 22731 </member>
23714 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Serialize"> 22732 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Serialize">
23715 <summary> 22733 <summary>
23716 Serialize the object 22734 Serialize the object
23717 </summary> 22735 </summary>
23718 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22736 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23719 </member> 22737 </member>
23720 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22738 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23721 <summary> 22739 <summary>
23722 Deserialize the message 22740 Deserialize the message
23723 </summary> 22741 </summary>
23724 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22742 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23725 </member> 22743 </member>
23726 <member name="T:OpenMetaverse.Messages.Linden.UpdateScriptTaskMessage"> 22744 <member name="T:OpenMetaverse.Messages.Linden.UpdateScriptTaskMessage">
23727 <summary> 22745 <summary>
@@ -23736,13 +22754,13 @@
23736 <summary> 22754 <summary>
23737 Serialize the object 22755 Serialize the object
23738 </summary> 22756 </summary>
23739 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22757 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23740 </member> 22758 </member>
23741 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22759 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptTaskMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23742 <summary> 22760 <summary>
23743 Deserialize the message 22761 Deserialize the message
23744 </summary> 22762 </summary>
23745 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22763 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23746 </member> 22764 </member>
23747 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestScriptComplete"> 22765 <member name="T:OpenMetaverse.Messages.Linden.UploaderRequestScriptComplete">
23748 <summary> 22766 <summary>
@@ -23773,13 +22791,13 @@
23773 <summary> 22791 <summary>
23774 Serialize the object 22792 Serialize the object
23775 </summary> 22793 </summary>
23776 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22794 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23777 </member> 22795 </member>
23778 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptAgentRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22796 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptAgentRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23779 <summary> 22797 <summary>
23780 Deserialize the message 22798 Deserialize the message
23781 </summary> 22799 </summary>
23782 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22800 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23783 </member> 22801 </member>
23784 <member name="T:OpenMetaverse.Messages.Linden.UpdateScriptAgentMessage"> 22802 <member name="T:OpenMetaverse.Messages.Linden.UpdateScriptAgentMessage">
23785 <summary> 22803 <summary>
@@ -23794,44 +22812,43 @@
23794 <summary> 22812 <summary>
23795 Serialize the object 22813 Serialize the object
23796 </summary> 22814 </summary>
23797 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22815 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23798 </member> 22816 </member>
23799 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptAgentMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22817 <member name="M:OpenMetaverse.Messages.Linden.UpdateScriptAgentMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23800 <summary> 22818 <summary>
23801 Deserialize the message 22819 Deserialize the message
23802 </summary> 22820 </summary>
23803 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22821 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23804 </member> 22822 </member>
23805 <member name="M:OpenMetaverse.Messages.Linden.SendPostcardMessage.Serialize"> 22823 <member name="M:OpenMetaverse.Messages.Linden.SendPostcardMessage.Serialize">
23806 <summary> 22824 <summary>
23807 Serialize the object 22825 Serialize the object
23808 </summary> 22826 </summary>
23809 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22827 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23810 </member> 22828 </member>
23811 <member name="M:OpenMetaverse.Messages.Linden.SendPostcardMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22829 <member name="M:OpenMetaverse.Messages.Linden.SendPostcardMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23812 <summary> 22830 <summary>
23813 Deserialize the message 22831 Deserialize the message
23814 </summary> 22832 </summary>
23815 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22833 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23816 </member> 22834 </member>
23817 <member name="T:OpenMetaverse.Messages.Linden.MapLayerMessageBase"> 22835 <member name="T:OpenMetaverse.Messages.Linden.MapLayerMessageBase">
23818 <summary>Base class for Map Layers via Capabilities</summary> 22836 <summary>Base class for Map Layers via Capabilities</summary>
23819 </member> 22837 </member>
23820 <member name="F:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Flags"> 22838 <member name="F:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Flags">
23821 <summary> 22839 <summary></summary>
23822 </summary>
23823 </member> 22840 </member>
23824 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Serialize"> 22841 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Serialize">
23825 <summary> 22842 <summary>
23826 Serialize the object 22843 Serialize the object
23827 </summary> 22844 </summary>
23828 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22845 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23829 </member> 22846 </member>
23830 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22847 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessageBase.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23831 <summary> 22848 <summary>
23832 Deserialize the message 22849 Deserialize the message
23833 </summary> 22850 </summary>
23834 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22851 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23835 </member> 22852 </member>
23836 <member name="T:OpenMetaverse.Messages.Linden.MapLayerRequestVariant"> 22853 <member name="T:OpenMetaverse.Messages.Linden.MapLayerRequestVariant">
23837 <summary> 22854 <summary>
@@ -23843,6 +22860,21 @@
23843 A message sent from the simulator to the viewer which contains an array of map images and their grid coordinates 22860 A message sent from the simulator to the viewer which contains an array of map images and their grid coordinates
23844 </summary> 22861 </summary>
23845 </member> 22862 </member>
22863 <member name="F:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerDataBlocks">
22864 <summary>An array containing LayerData items</summary>
22865 </member>
22866 <member name="M:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.Serialize">
22867 <summary>
22868 Serialize the object
22869 </summary>
22870 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
22871 </member>
22872 <member name="M:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
22873 <summary>
22874 Deserialize the message
22875 </summary>
22876 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
22877 </member>
23846 <member name="T:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerData"> 22878 <member name="T:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerData">
23847 <summary> 22879 <summary>
23848 An object containing map location details 22880 An object containing map location details
@@ -23863,21 +22895,6 @@
23863 <member name="F:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerData.Top"> 22895 <member name="F:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerData.Top">
23864 <summary>The grid location of the northern border of the map tile</summary> 22896 <summary>The grid location of the northern border of the map tile</summary>
23865 </member> 22897 </member>
23866 <member name="F:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.LayerDataBlocks">
23867 <summary>An array containing LayerData items</summary>
23868 </member>
23869 <member name="M:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.Serialize">
23870 <summary>
23871 Serialize the object
23872 </summary>
23873 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns>
23874 </member>
23875 <member name="M:OpenMetaverse.Messages.Linden.MapLayerReplyVariant.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23876 <summary>
23877 Deserialize the message
23878 </summary>
23879 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param>
23880 </member>
23881 <member name="F:OpenMetaverse.Messages.Linden.MapLayerMessage.Request"> 22898 <member name="F:OpenMetaverse.Messages.Linden.MapLayerMessage.Request">
23882 <summary>Object containing request or response</summary> 22899 <summary>Object containing request or response</summary>
23883 </member> 22900 </member>
@@ -23885,13 +22902,13 @@
23885 <summary> 22902 <summary>
23886 Serialize the object 22903 Serialize the object
23887 </summary> 22904 </summary>
23888 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22905 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23889 </member> 22906 </member>
23890 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22907 <member name="M:OpenMetaverse.Messages.Linden.MapLayerMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23891 <summary> 22908 <summary>
23892 Deserialize the message 22909 Deserialize the message
23893 </summary> 22910 </summary>
23894 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22911 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23895 </member> 22912 </member>
23896 <member name="T:OpenMetaverse.Messages.Linden.ProductInfoRequestMessage"> 22913 <member name="T:OpenMetaverse.Messages.Linden.ProductInfoRequestMessage">
23897 <summary> 22914 <summary>
@@ -23902,25 +22919,25 @@
23902 <summary> 22919 <summary>
23903 Serialize the object 22920 Serialize the object
23904 </summary> 22921 </summary>
23905 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22922 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23906 </member> 22923 </member>
23907 <member name="M:OpenMetaverse.Messages.Linden.ProductInfoRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22924 <member name="M:OpenMetaverse.Messages.Linden.ProductInfoRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23908 <summary> 22925 <summary>
23909 Deserialize the message 22926 Deserialize the message
23910 </summary> 22927 </summary>
23911 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22928 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23912 </member> 22929 </member>
23913 <member name="M:OpenMetaverse.Messages.Linden.SearchStatRequestMessage.Serialize"> 22930 <member name="M:OpenMetaverse.Messages.Linden.SearchStatRequestMessage.Serialize">
23914 <summary> 22931 <summary>
23915 Serialize the object 22932 Serialize the object
23916 </summary> 22933 </summary>
23917 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22934 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23918 </member> 22935 </member>
23919 <member name="M:OpenMetaverse.Messages.Linden.SearchStatRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22936 <member name="M:OpenMetaverse.Messages.Linden.SearchStatRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23920 <summary> 22937 <summary>
23921 Deserialize the message 22938 Deserialize the message
23922 </summary> 22939 </summary>
23923 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22940 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23924 </member> 22941 </member>
23925 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestBlock.Method"> 22942 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestBlock.Method">
23926 <summary>A string containing the method used</summary> 22943 <summary>A string containing the method used</summary>
@@ -23929,10 +22946,10 @@
23929 <summary> 22946 <summary>
23930 A request sent from an agent to the Simulator to begin a new conference. 22947 A request sent from an agent to the Simulator to begin a new conference.
23931 Contains a list of Agents which will be included in the conference 22948 Contains a list of Agents which will be included in the conference
23932 </summary> 22949 </summary>
23933 </member> 22950 </member>
23934 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.AgentsBlock"> 22951 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.AgentsBlock">
23935 <summary>An array containing the <see cref="T:OpenMetaverse.UUID" /> of the agents invited to this conference</summary> 22952 <summary>An array containing the <see cref="T:OpenMetaverse.UUID"/> of the agents invited to this conference</summary>
23936 </member> 22953 </member>
23937 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.SessionID"> 22954 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.SessionID">
23938 <summary>The conferences Session ID</summary> 22955 <summary>The conferences Session ID</summary>
@@ -23941,26 +22958,25 @@
23941 <summary> 22958 <summary>
23942 Serialize the object 22959 Serialize the object
23943 </summary> 22960 </summary>
23944 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22961 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23945 </member> 22962 </member>
23946 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22963 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestStartConference.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23947 <summary> 22964 <summary>
23948 Deserialize the message 22965 Deserialize the message
23949 </summary> 22966 </summary>
23950 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 22967 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23951 </member> 22968 </member>
23952 <member name="T:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate"> 22969 <member name="T:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate">
23953 <summary> 22970 <summary>
23954 A moderation request sent from a conference moderator 22971 A moderation request sent from a conference moderator
23955 Contains an agent and an optional action to take 22972 Contains an agent and an optional action to take
23956 </summary> 22973 </summary>
23957 </member> 22974 </member>
23958 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.SessionID"> 22975 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.SessionID">
23959 <summary>The Session ID</summary> 22976 <summary>The Session ID</summary>
23960 </member> 22977 </member>
23961 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.AgentID"> 22978 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.AgentID">
23962 <summary> 22979 <summary></summary>
23963 </summary>
23964 </member> 22980 </member>
23965 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.RequestKey"> 22981 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.RequestKey">
23966 <summary>A list containing Key/Value pairs, known valid values: 22982 <summary>A list containing Key/Value pairs, known valid values:
@@ -23970,24 +22986,23 @@
23970 <remarks>"text" or "voice"</remarks> 22986 <remarks>"text" or "voice"</remarks>
23971 </member> 22987 </member>
23972 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.RequestValue"> 22988 <member name="F:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.RequestValue">
23973 <summary> 22989 <summary></summary>
23974 </summary>
23975 </member> 22990 </member>
23976 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.Serialize"> 22991 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.Serialize">
23977 <summary> 22992 <summary>
23978 Serialize the object 22993 Serialize the object
23979 </summary> 22994 </summary>
23980 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 22995 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
23981 </member> 22996 </member>
23982 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 22997 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
23983 <summary> 22998 <summary>
23984 Deserialize the message 22999 Deserialize the message
23985 </summary> 23000 </summary>
23986 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23001 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
23987 </member> 23002 </member>
23988 <member name="T:OpenMetaverse.Messages.Linden.ChatSessionAcceptInvitation"> 23003 <member name="T:OpenMetaverse.Messages.Linden.ChatSessionAcceptInvitation">
23989 <summary> 23004 <summary>
23990 A message sent from the agent to the simulator which tells the 23005 A message sent from the agent to the simulator which tells the
23991 simulator we've accepted a conference invitation 23006 simulator we've accepted a conference invitation
23992 </summary> 23007 </summary>
23993 </member> 23008 </member>
@@ -23998,49 +23013,49 @@
23998 <summary> 23013 <summary>
23999 Serialize the object 23014 Serialize the object
24000 </summary> 23015 </summary>
24001 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23016 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24002 </member> 23017 </member>
24003 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionAcceptInvitation.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23018 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionAcceptInvitation.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24004 <summary> 23019 <summary>
24005 Deserialize the message 23020 Deserialize the message
24006 </summary> 23021 </summary>
24007 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23022 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24008 </member> 23023 </member>
24009 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMessage.Serialize"> 23024 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMessage.Serialize">
24010 <summary> 23025 <summary>
24011 Serialize the object 23026 Serialize the object
24012 </summary> 23027 </summary>
24013 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23028 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24014 </member> 23029 </member>
24015 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23030 <member name="M:OpenMetaverse.Messages.Linden.ChatSessionRequestMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24016 <summary> 23031 <summary>
24017 Deserialize the message 23032 Deserialize the message
24018 </summary> 23033 </summary>
24019 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23034 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24020 </member> 23035 </member>
24021 <member name="M:OpenMetaverse.Messages.Linden.ChatterboxSessionEventReplyMessage.Serialize"> 23036 <member name="M:OpenMetaverse.Messages.Linden.ChatterboxSessionEventReplyMessage.Serialize">
24022 <summary> 23037 <summary>
24023 Serialize the object 23038 Serialize the object
24024 </summary> 23039 </summary>
24025 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23040 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24026 </member> 23041 </member>
24027 <member name="M:OpenMetaverse.Messages.Linden.ChatterboxSessionEventReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23042 <member name="M:OpenMetaverse.Messages.Linden.ChatterboxSessionEventReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24028 <summary> 23043 <summary>
24029 Deserialize the message 23044 Deserialize the message
24030 </summary> 23045 </summary>
24031 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23046 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24032 </member> 23047 </member>
24033 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage.Serialize"> 23048 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage.Serialize">
24034 <summary> 23049 <summary>
24035 Serialize the object 23050 Serialize the object
24036 </summary> 23051 </summary>
24037 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23052 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24038 </member> 23053 </member>
24039 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23054 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24040 <summary> 23055 <summary>
24041 Deserialize the message 23056 Deserialize the message
24042 </summary> 23057 </summary>
24043 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23058 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24044 </member> 23059 </member>
24045 <member name="F:OpenMetaverse.Messages.Linden.ChatterBoxInvitationMessage.FromAgentID"> 23060 <member name="F:OpenMetaverse.Messages.Linden.ChatterBoxInvitationMessage.FromAgentID">
24046 <summary>Key of sender</summary> 23061 <summary>Key of sender</summary>
@@ -24088,20 +23103,22 @@
24088 <summary> 23103 <summary>
24089 Serialize the object 23104 Serialize the object
24090 </summary> 23105 </summary>
24091 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23106 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24092 </member> 23107 </member>
24093 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxInvitationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23108 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxInvitationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24094 <summary> 23109 <summary>
24095 Deserialize the message 23110 Deserialize the message
24096 </summary> 23111 </summary>
24097 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23112 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24098 </member> 23113 </member>
24099 <member name="T:OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage"> 23114 <member name="T:OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage">
24100 <summary> 23115 <summary>
24101 Sent from the simulator to the viewer. 23116 Sent from the simulator to the viewer.
23117
24102 When an agent initially joins a session the AgentUpdatesBlock object will contain a list of session members including 23118 When an agent initially joins a session the AgentUpdatesBlock object will contain a list of session members including
24103 a boolean indicating they can use voice chat in this session, a boolean indicating they are allowed to moderate 23119 a boolean indicating they can use voice chat in this session, a boolean indicating they are allowed to moderate
24104 this session, and lastly a string which indicates another agent is entering the session with the Transition set to "ENTER" 23120 this session, and lastly a string which indicates another agent is entering the session with the Transition set to "ENTER"
23121
24105 During the session lifetime updates on individuals are sent. During the update the booleans sent during the initial join are 23122 During the session lifetime updates on individuals are sent. During the update the booleans sent during the initial join are
24106 excluded with the exception of the Transition field. This indicates a new user entering or exiting the session with 23123 excluded with the exception of the Transition field. This indicates a new user entering or exiting the session with
24107 the string "ENTER" or "LEAVE" respectively. 23124 the string "ENTER" or "LEAVE" respectively.
@@ -24111,13 +23128,13 @@
24111 <summary> 23128 <summary>
24112 Serialize the object 23129 Serialize the object
24113 </summary> 23130 </summary>
24114 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23131 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24115 </member> 23132 </member>
24116 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23133 <member name="M:OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24117 <summary> 23134 <summary>
24118 Deserialize the message 23135 Deserialize the message
24119 </summary> 23136 </summary>
24120 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23137 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24121 </member> 23138 </member>
24122 <member name="T:OpenMetaverse.Messages.Linden.ForceCloseChatterBoxSessionMessage"> 23139 <member name="T:OpenMetaverse.Messages.Linden.ForceCloseChatterBoxSessionMessage">
24123 <summary> 23140 <summary>
@@ -24138,101 +23155,102 @@
24138 <summary> 23155 <summary>
24139 Serialize the object 23156 Serialize the object
24140 </summary> 23157 </summary>
24141 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23158 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24142 </member> 23159 </member>
24143 <member name="M:OpenMetaverse.Messages.Linden.ForceCloseChatterBoxSessionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23160 <member name="M:OpenMetaverse.Messages.Linden.ForceCloseChatterBoxSessionMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24144 <summary> 23161 <summary>
24145 Deserialize the message 23162 Deserialize the message
24146 </summary> 23163 </summary>
24147 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23164 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24148 </member> 23165 </member>
24149 <member name="M:OpenMetaverse.Messages.Linden.EventQueueAck.Serialize"> 23166 <member name="M:OpenMetaverse.Messages.Linden.EventQueueAck.Serialize">
24150 <summary> 23167 <summary>
24151 Serialize the object 23168 Serialize the object
24152 </summary> 23169 </summary>
24153 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23170 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24154 </member> 23171 </member>
24155 <member name="M:OpenMetaverse.Messages.Linden.EventQueueAck.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23172 <member name="M:OpenMetaverse.Messages.Linden.EventQueueAck.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24156 <summary> 23173 <summary>
24157 Deserialize the message 23174 Deserialize the message
24158 </summary> 23175 </summary>
24159 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23176 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24160 </member> 23177 </member>
24161 <member name="M:OpenMetaverse.Messages.Linden.EventQueueEvent.Serialize"> 23178 <member name="M:OpenMetaverse.Messages.Linden.EventQueueEvent.Serialize">
24162 <summary> 23179 <summary>
24163 Serialize the object 23180 Serialize the object
24164 </summary> 23181 </summary>
24165 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23182 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24166 </member> 23183 </member>
24167 <member name="M:OpenMetaverse.Messages.Linden.EventQueueEvent.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23184 <member name="M:OpenMetaverse.Messages.Linden.EventQueueEvent.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24168 <summary> 23185 <summary>
24169 Deserialize the message 23186 Deserialize the message
24170 </summary> 23187 </summary>
24171 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23188 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24172 </member> 23189 </member>
24173 <member name="M:OpenMetaverse.Messages.Linden.EventQueueGetMessage.Serialize"> 23190 <member name="M:OpenMetaverse.Messages.Linden.EventQueueGetMessage.Serialize">
24174 <summary> 23191 <summary>
24175 Serialize the object 23192 Serialize the object
24176 </summary> 23193 </summary>
24177 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23194 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24178 </member> 23195 </member>
24179 <member name="M:OpenMetaverse.Messages.Linden.EventQueueGetMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23196 <member name="M:OpenMetaverse.Messages.Linden.EventQueueGetMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24180 <summary> 23197 <summary>
24181 Deserialize the message 23198 Deserialize the message
24182 </summary> 23199 </summary>
24183 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23200 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24184 </member> 23201 </member>
24185 <member name="M:OpenMetaverse.Messages.Linden.ViewerStatsMessage.Serialize"> 23202 <member name="M:OpenMetaverse.Messages.Linden.ViewerStatsMessage.Serialize">
24186 <summary> 23203 <summary>
24187 Serialize the object 23204 Serialize the object
24188 </summary> 23205 </summary>
24189 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23206 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24190 </member> 23207 </member>
24191 <member name="M:OpenMetaverse.Messages.Linden.ViewerStatsMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23208 <member name="M:OpenMetaverse.Messages.Linden.ViewerStatsMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24192 <summary> 23209 <summary>
24193 Deserialize the message 23210 Deserialize the message
24194 </summary> 23211 </summary>
24195 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23212 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24196 </member> 23213 </member>
24197 <member name="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage"> 23214 <member name="T:OpenMetaverse.Messages.Linden.PlacesReplyMessage">
24198 <summary> 23215 <summary>
23216
24199 </summary> 23217 </summary>
24200 </member> 23218 </member>
24201 <member name="M:OpenMetaverse.Messages.Linden.PlacesReplyMessage.Serialize"> 23219 <member name="M:OpenMetaverse.Messages.Linden.PlacesReplyMessage.Serialize">
24202 <summary> 23220 <summary>
24203 Serialize the object 23221 Serialize the object
24204 </summary> 23222 </summary>
24205 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23223 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24206 </member> 23224 </member>
24207 <member name="M:OpenMetaverse.Messages.Linden.PlacesReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23225 <member name="M:OpenMetaverse.Messages.Linden.PlacesReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24208 <summary> 23226 <summary>
24209 Deserialize the message 23227 Deserialize the message
24210 </summary> 23228 </summary>
24211 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23229 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24212 </member> 23230 </member>
24213 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInformationMessage.Serialize"> 23231 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInformationMessage.Serialize">
24214 <summary> 23232 <summary>
24215 Serialize the object 23233 Serialize the object
24216 </summary> 23234 </summary>
24217 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23235 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24218 </member> 23236 </member>
24219 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInformationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23237 <member name="M:OpenMetaverse.Messages.Linden.UpdateAgentInformationMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24220 <summary> 23238 <summary>
24221 Deserialize the message 23239 Deserialize the message
24222 </summary> 23240 </summary>
24223 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23241 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24224 </member> 23242 </member>
24225 <member name="M:OpenMetaverse.Messages.Linden.DirLandReplyMessage.Serialize"> 23243 <member name="M:OpenMetaverse.Messages.Linden.DirLandReplyMessage.Serialize">
24226 <summary> 23244 <summary>
24227 Serialize the object 23245 Serialize the object
24228 </summary> 23246 </summary>
24229 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23247 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24230 </member> 23248 </member>
24231 <member name="M:OpenMetaverse.Messages.Linden.DirLandReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23249 <member name="M:OpenMetaverse.Messages.Linden.DirLandReplyMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24232 <summary> 23250 <summary>
24233 Deserialize the message 23251 Deserialize the message
24234 </summary> 23252 </summary>
24235 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23253 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24236 </member> 23254 </member>
24237 <member name="T:OpenMetaverse.Messages.Linden.ObjectPhysicsPropertiesMessage"> 23255 <member name="T:OpenMetaverse.Messages.Linden.ObjectPhysicsPropertiesMessage">
24238 <summary> 23256 <summary>
@@ -24257,7 +23275,7 @@
24257 </member> 23275 </member>
24258 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaNavigateMessage"> 23276 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaNavigateMessage">
24259 <summary> 23277 <summary>
24260 A message sent from the viewer to the simulator which 23278 A message sent from the viewer to the simulator which
24261 specifies that the user has changed current URL 23279 specifies that the user has changed current URL
24262 of the specific media on a prim face 23280 of the specific media on a prim face
24263 </summary> 23281 </summary>
@@ -24281,13 +23299,13 @@
24281 <summary> 23299 <summary>
24282 Serialize the object 23300 Serialize the object
24283 </summary> 23301 </summary>
24284 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23302 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24285 </member> 23303 </member>
24286 <member name="M:OpenMetaverse.Messages.Linden.ObjectMediaNavigateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23304 <member name="M:OpenMetaverse.Messages.Linden.ObjectMediaNavigateMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24287 <summary> 23305 <summary>
24288 Deserialize the message 23306 Deserialize the message
24289 </summary> 23307 </summary>
24290 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23308 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24291 </member> 23309 </member>
24292 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaBlock"> 23310 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaBlock">
24293 <summary>Base class used for the ObjectMedia message</summary> 23311 <summary>Base class used for the ObjectMedia message</summary>
@@ -24317,7 +23335,7 @@
24317 <summary> 23335 <summary>
24318 Deserialize the message 23336 Deserialize the message
24319 </summary> 23337 </summary>
24320 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23338 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24321 </member> 23339 </member>
24322 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaResponse"> 23340 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaResponse">
24323 <summary> 23341 <summary>
@@ -24349,7 +23367,7 @@
24349 <summary> 23367 <summary>
24350 Deserialize the message 23368 Deserialize the message
24351 </summary> 23369 </summary>
24352 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23370 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24353 </member> 23371 </member>
24354 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaUpdate"> 23372 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaUpdate">
24355 <summary> 23373 <summary>
@@ -24381,7 +23399,7 @@
24381 <summary> 23399 <summary>
24382 Deserialize the message 23400 Deserialize the message
24383 </summary> 23401 </summary>
24384 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23402 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24385 </member> 23403 </member>
24386 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaMessage"> 23404 <member name="T:OpenMetaverse.Messages.Linden.ObjectMediaMessage">
24387 <summary> 23405 <summary>
@@ -24395,13 +23413,13 @@
24395 <summary> 23413 <summary>
24396 Serialize the object 23414 Serialize the object
24397 </summary> 23415 </summary>
24398 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the objects data</returns> 23416 <returns>An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the objects data</returns>
24399 </member> 23417 </member>
24400 <member name="M:OpenMetaverse.Messages.Linden.ObjectMediaMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23418 <member name="M:OpenMetaverse.Messages.Linden.ObjectMediaMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24401 <summary> 23419 <summary>
24402 Deserialize the message 23420 Deserialize the message
24403 </summary> 23421 </summary>
24404 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23422 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24405 </member> 23423 </member>
24406 <member name="T:OpenMetaverse.Messages.Linden.ObjectResourcesDetail"> 23424 <member name="T:OpenMetaverse.Messages.Linden.ObjectResourcesDetail">
24407 <summary>Details about object resource usage</summary> 23425 <summary>Details about object resource usage</summary>
@@ -24428,14 +23446,13 @@
24428 <summary> 23446 <summary>
24429 Deserializes object from OSD 23447 Deserializes object from OSD
24430 </summary> 23448 </summary>
24431 <param name="obj">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23449 <param name="obj">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24432 </member> 23450 </member>
24433 <member name="M:OpenMetaverse.Messages.Linden.ObjectResourcesDetail.FromOSD(OpenMetaverse.StructuredData.OSD)"> 23451 <member name="M:OpenMetaverse.Messages.Linden.ObjectResourcesDetail.FromOSD(OpenMetaverse.StructuredData.OSD)">
24434 <summary> 23452 <summary>
24435 Makes an instance based on deserialized data 23453 Makes an instance based on deserialized data
24436 </summary> 23454 </summary>
24437 <param name="osd"> 23455 <param name="osd"><see cref="T:OpenMetaverse.StructuredData.OSD"/> serialized data</param>
24438 <see cref="T:OpenMetaverse.StructuredData.OSD" /> serialized data</param>
24439 <returns>Instance containg deserialized data</returns> 23456 <returns>Instance containg deserialized data</returns>
24440 </member> 23457 </member>
24441 <member name="T:OpenMetaverse.Messages.Linden.ParcelResourcesDetail"> 23458 <member name="T:OpenMetaverse.Messages.Linden.ParcelResourcesDetail">
@@ -24457,20 +23474,19 @@
24457 <summary>Parcel owner</summary> 23474 <summary>Parcel owner</summary>
24458 </member> 23475 </member>
24459 <member name="F:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.Objects"> 23476 <member name="F:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.Objects">
24460 <summary>Array of <see cref="T:OpenMetaverse.Messages.Linden.ObjectResourcesDetail" /> containing per object resource usage</summary> 23477 <summary>Array of <see cref="T:OpenMetaverse.Messages.Linden.ObjectResourcesDetail"/> containing per object resource usage</summary>
24461 </member> 23478 </member>
24462 <member name="M:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23479 <member name="M:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24463 <summary> 23480 <summary>
24464 Deserializes object from OSD 23481 Deserializes object from OSD
24465 </summary> 23482 </summary>
24466 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23483 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24467 </member> 23484 </member>
24468 <member name="M:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.FromOSD(OpenMetaverse.StructuredData.OSD)"> 23485 <member name="M:OpenMetaverse.Messages.Linden.ParcelResourcesDetail.FromOSD(OpenMetaverse.StructuredData.OSD)">
24469 <summary> 23486 <summary>
24470 Makes an instance based on deserialized data 23487 Makes an instance based on deserialized data
24471 </summary> 23488 </summary>
24472 <param name="osd"> 23489 <param name="osd"><see cref="T:OpenMetaverse.StructuredData.OSD"/> serialized data</param>
24473 <see cref="T:OpenMetaverse.StructuredData.OSD" /> serialized data</param>
24474 <returns>Instance containg deserialized data</returns> 23490 <returns>Instance containg deserialized data</returns>
24475 </member> 23491 </member>
24476 <member name="T:OpenMetaverse.Messages.Linden.BaseResourcesInfo"> 23492 <member name="T:OpenMetaverse.Messages.Linden.BaseResourcesInfo">
@@ -24489,14 +23505,13 @@
24489 <summary> 23505 <summary>
24490 Serializes object 23506 Serializes object
24491 </summary> 23507 </summary>
24492 <returns> 23508 <returns><see cref="T:OpenMetaverse.StructuredData.OSDMap"/> serialized data</returns>
24493 <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> serialized data</returns>
24494 </member> 23509 </member>
24495 <member name="M:OpenMetaverse.Messages.Linden.BaseResourcesInfo.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23510 <member name="M:OpenMetaverse.Messages.Linden.BaseResourcesInfo.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24496 <summary> 23511 <summary>
24497 Deserializes object from OSD 23512 Deserializes object from OSD
24498 </summary> 23513 </summary>
24499 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23514 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24500 </member> 23515 </member>
24501 <member name="T:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage"> 23516 <member name="T:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage">
24502 <summary>Agent resource usage</summary> 23517 <summary>Agent resource usage</summary>
@@ -24508,21 +23523,20 @@
24508 <summary> 23523 <summary>
24509 Deserializes object from OSD 23524 Deserializes object from OSD
24510 </summary> 23525 </summary>
24511 <param name="osd">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23526 <param name="osd">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24512 </member> 23527 </member>
24513 <member name="M:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage.FromOSD(OpenMetaverse.StructuredData.OSD)"> 23528 <member name="M:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage.FromOSD(OpenMetaverse.StructuredData.OSD)">
24514 <summary> 23529 <summary>
24515 Makes an instance based on deserialized data 23530 Makes an instance based on deserialized data
24516 </summary> 23531 </summary>
24517 <param name="osd"> 23532 <param name="osd"><see cref="T:OpenMetaverse.StructuredData.OSD"/> serialized data</param>
24518 <see cref="T:OpenMetaverse.StructuredData.OSD" /> serialized data</param>
24519 <returns>Instance containg deserialized data</returns> 23533 <returns>Instance containg deserialized data</returns>
24520 </member> 23534 </member>
24521 <member name="M:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage.GetMessageHandler(OpenMetaverse.StructuredData.OSDMap)"> 23535 <member name="M:OpenMetaverse.Messages.Linden.AttachmentResourcesMessage.GetMessageHandler(OpenMetaverse.StructuredData.OSDMap)">
24522 <summary> 23536 <summary>
24523 Detects which class handles deserialization of this message 23537 Detects which class handles deserialization of this message
24524 </summary> 23538 </summary>
24525 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23539 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24526 <returns>Object capable of decoding this message</returns> 23540 <returns>Object capable of decoding this message</returns>
24527 </member> 23541 </member>
24528 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesRequest"> 23542 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesRequest">
@@ -24535,14 +23549,13 @@
24535 <summary> 23549 <summary>
24536 Serializes object 23550 Serializes object
24537 </summary> 23551 </summary>
24538 <returns> 23552 <returns><see cref="T:OpenMetaverse.StructuredData.OSDMap"/> serialized data</returns>
24539 <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> serialized data</returns>
24540 </member> 23553 </member>
24541 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesRequest.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23554 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesRequest.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24542 <summary> 23555 <summary>
24543 Deserializes object from OSD 23556 Deserializes object from OSD
24544 </summary> 23557 </summary>
24545 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23558 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24546 </member> 23559 </member>
24547 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesMessage"> 23560 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesMessage">
24548 <summary>Response message for parcel resource usage</summary> 23561 <summary>Response message for parcel resource usage</summary>
@@ -24557,33 +23570,32 @@
24557 <summary> 23570 <summary>
24558 Serializes object 23571 Serializes object
24559 </summary> 23572 </summary>
24560 <returns> 23573 <returns><see cref="T:OpenMetaverse.StructuredData.OSDMap"/> serialized data</returns>
24561 <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> serialized data</returns>
24562 </member> 23574 </member>
24563 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23575 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesMessage.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24564 <summary> 23576 <summary>
24565 Deserializes object from OSD 23577 Deserializes object from OSD
24566 </summary> 23578 </summary>
24567 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23579 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24568 </member> 23580 </member>
24569 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesMessage.GetMessageHandler(OpenMetaverse.StructuredData.OSDMap)"> 23581 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesMessage.GetMessageHandler(OpenMetaverse.StructuredData.OSDMap)">
24570 <summary> 23582 <summary>
24571 Detects which class handles deserialization of this message 23583 Detects which class handles deserialization of this message
24572 </summary> 23584 </summary>
24573 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23585 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24574 <returns>Object capable of decoding this message</returns> 23586 <returns>Object capable of decoding this message</returns>
24575 </member> 23587 </member>
24576 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesInfo"> 23588 <member name="T:OpenMetaverse.Messages.Linden.LandResourcesInfo">
24577 <summary>Parcel resource usage</summary> 23589 <summary>Parcel resource usage</summary>
24578 </member> 23590 </member>
24579 <member name="F:OpenMetaverse.Messages.Linden.LandResourcesInfo.Parcels"> 23591 <member name="F:OpenMetaverse.Messages.Linden.LandResourcesInfo.Parcels">
24580 <summary>Array of <see cref="T:OpenMetaverse.Messages.Linden.ParcelResourcesDetail" /> containing per percal resource usage</summary> 23592 <summary>Array of <see cref="T:OpenMetaverse.Messages.Linden.ParcelResourcesDetail"/> containing per percal resource usage</summary>
24581 </member> 23593 </member>
24582 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesInfo.Deserialize(OpenMetaverse.StructuredData.OSDMap)"> 23594 <member name="M:OpenMetaverse.Messages.Linden.LandResourcesInfo.Deserialize(OpenMetaverse.StructuredData.OSDMap)">
24583 <summary> 23595 <summary>
24584 Deserializes object from OSD 23596 Deserializes object from OSD
24585 </summary> 23597 </summary>
24586 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> containing the data</param> 23598 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap"/> containing the data</param>
24587 </member> 23599 </member>
24588 <member name="T:OpenMetaverse.Messages.Linden.GetDisplayNamesMessage"> 23600 <member name="T:OpenMetaverse.Messages.Linden.GetDisplayNamesMessage">
24589 <summary> 23601 <summary>
@@ -24656,1767 +23668,2470 @@
24656 </summary> 23668 </summary>
24657 <returns>OSD containting the messaage</returns> 23669 <returns>OSD containting the messaage</returns>
24658 </member> 23670 </member>
24659 <member name="M:OpenMetaverse.Messages.MessageUtils.DecodeEvent(System.String,OpenMetaverse.StructuredData.OSDMap)"> 23671 <member name="F:OpenMetaverse.InventorySortOrder.ByName">
24660 <summary> 23672 <summary>Sort by name</summary>
24661 Return a decoded capabilities message as a strongly typed object
24662 </summary>
24663 <param name="eventName">A string containing the name of the capabilities message key</param>
24664 <param name="map">An <see cref="T:OpenMetaverse.StructuredData.OSDMap" /> to decode</param>
24665 <returns>A strongly typed object containing the decoded information from the capabilities message, or null
24666 if no existing Message object exists for the specified event</returns>
24667 </member> 23673 </member>
24668 <member name="T:OpenMetaverse.MediaPermission"> 23674 <member name="F:OpenMetaverse.InventorySortOrder.ByDate">
24669 <summary> 23675 <summary>Sort by date</summary>
24670 Permissions for control of object media
24671 </summary>
24672 </member> 23676 </member>
24673 <member name="T:OpenMetaverse.MediaControls"> 23677 <member name="F:OpenMetaverse.InventorySortOrder.FoldersByName">
24674 <summary> 23678 <summary>Sort folders by name, regardless of whether items are
24675 Style of cotrols that shold be displayed to the user 23679 sorted by name or date</summary>
24676 </summary>
24677 </member> 23680 </member>
24678 <member name="T:OpenMetaverse.MediaEntry"> 23681 <member name="F:OpenMetaverse.InventorySortOrder.SystemFoldersToTop">
23682 <summary>Place system folders at the top</summary>
23683 </member>
23684 <member name="T:OpenMetaverse.DeRezDestination">
24679 <summary> 23685 <summary>
24680 Class representing media data for a single face 23686 Possible destinations for DeRezObject request
24681 </summary> 23687 </summary>
24682 </member> 23688 </member>
24683 <member name="F:OpenMetaverse.MediaEntry.EnableAlterntiveImage"> 23689 <member name="F:OpenMetaverse.DeRezDestination.AgentInventorySave">
24684 <summary>Is display of the alternative image enabled</summary> 23690 <summary></summary>
24685 </member> 23691 </member>
24686 <member name="F:OpenMetaverse.MediaEntry.AutoLoop"> 23692 <member name="F:OpenMetaverse.DeRezDestination.AgentInventoryCopy">
24687 <summary>Should media auto loop</summary> 23693 <summary>Copy from in-world to agent inventory</summary>
24688 </member> 23694 </member>
24689 <member name="F:OpenMetaverse.MediaEntry.AutoPlay"> 23695 <member name="F:OpenMetaverse.DeRezDestination.TaskInventory">
24690 <summary>Shoule media be auto played</summary> 23696 <summary>Derez to TaskInventory</summary>
24691 </member> 23697 </member>
24692 <member name="F:OpenMetaverse.MediaEntry.AutoScale"> 23698 <member name="F:OpenMetaverse.DeRezDestination.Attachment">
24693 <summary>Auto scale media to prim face</summary> 23699 <summary></summary>
24694 </member> 23700 </member>
24695 <member name="F:OpenMetaverse.MediaEntry.AutoZoom"> 23701 <member name="F:OpenMetaverse.DeRezDestination.AgentInventoryTake">
24696 <summary>Should viewer automatically zoom in on the face when clicked</summary> 23702 <summary>Take Object</summary>
24697 </member> 23703 </member>
24698 <member name="F:OpenMetaverse.MediaEntry.InteractOnFirstClick"> 23704 <member name="F:OpenMetaverse.DeRezDestination.ForceToGodInventory">
24699 <summary>Should viewer interpret first click as interaction with the media 23705 <summary></summary>
24700 or when false should the first click be treated as zoom in commadn</summary>
24701 </member> 23706 </member>
24702 <member name="F:OpenMetaverse.MediaEntry.Controls"> 23707 <member name="F:OpenMetaverse.DeRezDestination.TrashFolder">
24703 <summary>Style of controls viewer should display when 23708 <summary>Delete Object</summary>
24704 viewer media on this face</summary>
24705 </member> 23709 </member>
24706 <member name="F:OpenMetaverse.MediaEntry.HomeURL"> 23710 <member name="F:OpenMetaverse.DeRezDestination.AttachmentToInventory">
24707 <summary>Starting URL for the media</summary> 23711 <summary>Put an avatar attachment into agent inventory</summary>
24708 </member> 23712 </member>
24709 <member name="F:OpenMetaverse.MediaEntry.CurrentURL"> 23713 <member name="F:OpenMetaverse.DeRezDestination.AttachmentExists">
24710 <summary>Currently navigated URL</summary> 23714 <summary></summary>
24711 </member> 23715 </member>
24712 <member name="F:OpenMetaverse.MediaEntry.Height"> 23716 <member name="F:OpenMetaverse.DeRezDestination.ReturnToOwner">
24713 <summary>Media height in pixes</summary> 23717 <summary>Return an object back to the owner's inventory</summary>
24714 </member> 23718 </member>
24715 <member name="F:OpenMetaverse.MediaEntry.Width"> 23719 <member name="F:OpenMetaverse.DeRezDestination.ReturnToLastOwner">
24716 <summary>Media width in pixels</summary> 23720 <summary>Return a deeded object back to the last owner's inventory</summary>
24717 </member> 23721 </member>
24718 <member name="F:OpenMetaverse.MediaEntry.ControlPermissions"> 23722 <member name="T:OpenMetaverse.InventoryItemFlags">
24719 <summary>Who can controls the media</summary> 23723 <summary>
23724 Upper half of the Flags field for inventory items
23725 </summary>
24720 </member> 23726 </member>
24721 <member name="F:OpenMetaverse.MediaEntry.InteractPermissions"> 23727 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectSlamPerm">
24722 <summary>Who can interact with the media</summary> 23728 <summary>Indicates that the NextOwner permission will be set to the
23729 most restrictive set of permissions found in the object set
23730 (including linkset items and object inventory items) on next rez</summary>
24723 </member> 23731 </member>
24724 <member name="F:OpenMetaverse.MediaEntry.EnableWhiteList"> 23732 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectSlamSale">
24725 <summary>Is URL whitelist enabled</summary> 23733 <summary>Indicates that the object sale information has been
23734 changed</summary>
24726 </member> 23735 </member>
24727 <member name="F:OpenMetaverse.MediaEntry.WhiteList"> 23736 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteBase">
24728 <summary>Array of URLs that are whitelisted</summary> 23737 <summary>If set, and a slam bit is set, indicates BaseMask will be overwritten on Rez</summary>
24729 </member> 23738 </member>
24730 <member name="M:OpenMetaverse.MediaEntry.GetOSD"> 23739 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteOwner">
24731 <summary> 23740 <summary>If set, and a slam bit is set, indicates OwnerMask will be overwritten on Rez</summary>
24732 Serialize to OSD
24733 </summary>
24734 <returns>OSDMap with the serialized data</returns>
24735 </member> 23741 </member>
24736 <member name="M:OpenMetaverse.MediaEntry.FromOSD(OpenMetaverse.StructuredData.OSD)"> 23742 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteGroup">
23743 <summary>If set, and a slam bit is set, indicates GroupMask will be overwritten on Rez</summary>
23744 </member>
23745 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteEveryone">
23746 <summary>If set, and a slam bit is set, indicates EveryoneMask will be overwritten on Rez</summary>
23747 </member>
23748 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectOverwriteNextOwner">
23749 <summary>If set, and a slam bit is set, indicates NextOwnerMask will be overwritten on Rez</summary>
23750 </member>
23751 <member name="F:OpenMetaverse.InventoryItemFlags.ObjectHasMultipleItems">
23752 <summary>Indicates whether this object is composed of multiple
23753 items or not</summary>
23754 </member>
23755 <member name="F:OpenMetaverse.InventoryItemFlags.SharedSingleReference">
23756 <summary>Indicates that the asset is only referenced by this
23757 inventory item. If this item is deleted or updated to reference a
23758 new assetID, the asset can be deleted</summary>
23759 </member>
23760 <member name="T:OpenMetaverse.InventoryBase">
24737 <summary> 23761 <summary>
24738 Deserialize from OSD data 23762 Base Class for Inventory Items
24739 </summary> 23763 </summary>
24740 <param name="osd">Serialized OSD data</param>
24741 <returns>Deserialized object</returns>
24742 </member> 23764 </member>
24743 <member name="T:OpenMetaverse.Primitive"> 23765 <member name="F:OpenMetaverse.InventoryBase.UUID">
23766 <summary><seealso cref="T:OpenMetaverse.UUID"/> of item/folder</summary>
23767 </member>
23768 <member name="F:OpenMetaverse.InventoryBase.ParentUUID">
23769 <summary><seealso cref="T:OpenMetaverse.UUID"/> of parent folder</summary>
23770 </member>
23771 <member name="F:OpenMetaverse.InventoryBase.Name">
23772 <summary>Name of item/folder</summary>
23773 </member>
23774 <member name="F:OpenMetaverse.InventoryBase.OwnerID">
23775 <summary>Item/Folder Owners <seealso cref="T:OpenMetaverse.UUID"/></summary>
23776 </member>
23777 <member name="M:OpenMetaverse.InventoryBase.#ctor(OpenMetaverse.UUID)">
24744 <summary> 23778 <summary>
24745 Particle system specific enumerators, flags and methods. 23779 Constructor, takes an itemID as a parameter
24746 </summary> 23780 </summary>
23781 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the item</param>
24747 </member> 23782 </member>
24748 <member name="M:OpenMetaverse.Primitive.#ctor"> 23783 <member name="M:OpenMetaverse.InventoryBase.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
24749 <summary> 23784 <summary>
24750 Default constructor 23785
24751 </summary> 23786 </summary>
23787 <returns></returns>
24752 </member> 23788 </member>
24753 <member name="T:OpenMetaverse.Primitive.ParticleSystem"> 23789 <member name="M:OpenMetaverse.InventoryBase.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
24754 <summary> 23790 <summary>
24755 Complete structure for the particle system 23791
24756 </summary> 23792 </summary>
23793 <returns></returns>
24757 </member> 23794 </member>
24758 <member name="M:OpenMetaverse.Primitive.ParticleSystem.#ctor(System.Byte[],System.Int32)"> 23795 <member name="M:OpenMetaverse.InventoryBase.GetHashCode">
24759 <summary> 23796 <summary>
24760 Decodes a byte[] array into a ParticleSystem Object 23797 Generates a number corresponding to the value of the object to support the use of a hash table,
23798 suitable for use in hashing algorithms and data structures such as a hash table
24761 </summary> 23799 </summary>
24762 <param name="data">ParticleSystem object</param> 23800 <returns>A Hashcode of all the combined InventoryBase fields</returns>
24763 <param name="pos">Start position for BitPacker</param>
24764 </member> 23801 </member>
24765 <member name="T:OpenMetaverse.Primitive.ParticleSystem.SourcePattern"> 23802 <member name="M:OpenMetaverse.InventoryBase.Equals(System.Object)">
24766 <summary> 23803 <summary>
24767 Particle source pattern 23804 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase"/> object is equal to the current object
24768 </summary> 23805 </summary>
23806 <param name="o">InventoryBase object to compare against</param>
23807 <returns>true if objects are the same</returns>
24769 </member> 23808 </member>
24770 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.None"> 23809 <member name="M:OpenMetaverse.InventoryBase.Equals(OpenMetaverse.InventoryBase)">
24771 <summary>None</summary>
24772 </member>
24773 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Drop">
24774 <summary>Drop particles from source position with no force</summary>
24775 </member>
24776 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Explode">
24777 <summary>"Explode" particles in all directions</summary>
24778 </member>
24779 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.Angle">
24780 <summary>Particles shoot across a 2D area</summary>
24781 </member>
24782 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.AngleCone">
24783 <summary>Particles shoot across a 3D Cone</summary>
24784 </member>
24785 <member name="F:OpenMetaverse.Primitive.ParticleSystem.SourcePattern.AngleConeEmpty">
24786 <summary>Inverse of AngleCone (shoot particles everywhere except the 3D cone defined</summary>
24787 </member>
24788 <member name="T:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags">
24789 <summary> 23810 <summary>
24790 Particle Data Flags 23811 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase"/> object is equal to the current object
24791 </summary> 23812 </summary>
23813 <param name="o">InventoryBase object to compare against</param>
23814 <returns>true if objects are the same</returns>
24792 </member> 23815 </member>
24793 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.None"> 23816 <member name="M:OpenMetaverse.InventoryBase.GetOSD">
24794 <summary>None</summary>
24795 </member>
24796 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.InterpColor">
24797 <summary>Interpolate color and alpha from start to end</summary>
24798 </member>
24799 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.InterpScale">
24800 <summary>Interpolate scale from start to end</summary>
24801 </member>
24802 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Bounce">
24803 <summary>Bounce particles off particle sources Z height</summary>
24804 </member>
24805 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Wind">
24806 <summary>velocity of particles is dampened toward the simulators wind</summary>
24807 </member>
24808 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.FollowSrc">
24809 <summary>Particles follow the source</summary>
24810 </member>
24811 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.FollowVelocity">
24812 <summary>Particles point towards the direction of source's velocity</summary>
24813 </member>
24814 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.TargetPos">
24815 <summary>Target of the particles</summary>
24816 </member>
24817 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.TargetLinear">
24818 <summary>Particles are sent in a straight line</summary>
24819 </member>
24820 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Emissive">
24821 <summary>Particles emit a glow</summary>
24822 </member>
24823 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleDataFlags.Beam">
24824 <summary>used for point/grab/touch</summary>
24825 </member>
24826 <member name="T:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags">
24827 <summary> 23817 <summary>
24828 Particle Flags Enum 23818 Convert inventory to OSD
24829 </summary> 23819 </summary>
23820 <returns>OSD representation</returns>
24830 </member> 23821 </member>
24831 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.None"> 23822 <member name="T:OpenMetaverse.InventoryItem">
24832 <summary>None</summary>
24833 </member>
24834 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.ObjectRelative">
24835 <summary>Acceleration and velocity for particles are
24836 relative to the object rotation</summary>
24837 </member>
24838 <member name="F:OpenMetaverse.Primitive.ParticleSystem.ParticleFlags.UseNewAngle">
24839 <summary>Particles use new 'correct' angle parameters</summary>
24840 </member>
24841 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartFlags">
24842 <summary>Particle Flags</summary>
24843 <remarks>There appears to be more data packed in to this area
24844 for many particle systems. It doesn't appear to be flag values
24845 and serialization breaks unless there is a flag for every
24846 possible bit so it is left as an unsigned integer</remarks>
24847 </member>
24848 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Pattern">
24849 <summary> 23823 <summary>
24850 <seealso cref="T:SourcePattern" /> pattern of particles</summary> 23824 An Item in Inventory
24851 </member> 23825 </summary>
24852 <member name="F:OpenMetaverse.Primitive.ParticleSystem.MaxAge">
24853 <summary>A <see langword="float" /> representing the maximimum age (in seconds) particle will be displayed</summary>
24854 <remarks>Maximum value is 30 seconds</remarks>
24855 </member>
24856 <member name="F:OpenMetaverse.Primitive.ParticleSystem.StartAge">
24857 <summary>A <see langword="float" /> representing the number of seconds,
24858 from when the particle source comes into view,
24859 or the particle system's creation, that the object will emits particles;
24860 after this time period no more particles are emitted</summary>
24861 </member>
24862 <member name="F:OpenMetaverse.Primitive.ParticleSystem.InnerAngle">
24863 <summary>A <see langword="float" /> in radians that specifies where particles will not be created</summary>
24864 </member>
24865 <member name="F:OpenMetaverse.Primitive.ParticleSystem.OuterAngle">
24866 <summary>A <see langword="float" /> in radians that specifies where particles will be created</summary>
24867 </member>
24868 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstRate">
24869 <summary>A <see langword="float" /> representing the number of seconds between burts.</summary>
24870 </member>
24871 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstRadius">
24872 <summary>A <see langword="float" /> representing the number of meters
24873 around the center of the source where particles will be created.</summary>
24874 </member>
24875 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstSpeedMin">
24876 <summary>A <see langword="float" /> representing in seconds, the minimum speed between bursts of new particles
24877 being emitted</summary>
24878 </member>
24879 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstSpeedMax">
24880 <summary>A <see langword="float" /> representing in seconds the maximum speed of new particles being emitted.</summary>
24881 </member>
24882 <member name="F:OpenMetaverse.Primitive.ParticleSystem.BurstPartCount">
24883 <summary>A <see langword="byte" /> representing the maximum number of particles emitted per burst</summary>
24884 </member> 23826 </member>
24885 <member name="F:OpenMetaverse.Primitive.ParticleSystem.AngularVelocity"> 23827 <member name="F:OpenMetaverse.InventoryItem.AssetUUID">
24886 <summary>A <see cref="T:Vector3" /> which represents the velocity (speed) from the source which particles are emitted</summary> 23828 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of this item</summary>
24887 </member> 23829 </member>
24888 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartAcceleration"> 23830 <member name="F:OpenMetaverse.InventoryItem.Permissions">
24889 <summary>A <see cref="T:Vector3" /> which represents the Acceleration from the source which particles are emitted</summary> 23831 <summary>The combined <seealso cref="T:OpenMetaverse.Permissions"/> of this item</summary>
24890 </member> 23832 </member>
24891 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Texture"> 23833 <member name="F:OpenMetaverse.InventoryItem.AssetType">
24892 <summary>The <see cref="T:UUID" /> Key of the texture displayed on the particle</summary> 23834 <summary>The type of item from <seealso cref="T:OpenMetaverse.AssetType"/></summary>
24893 </member> 23835 </member>
24894 <member name="F:OpenMetaverse.Primitive.ParticleSystem.Target"> 23836 <member name="F:OpenMetaverse.InventoryItem.InventoryType">
24895 <summary>The <see cref="T:UUID" /> Key of the specified target object or avatar particles will follow</summary> 23837 <summary>The type of item from the <seealso cref="T:OpenMetaverse.InventoryType"/> enum</summary>
24896 </member> 23838 </member>
24897 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartDataFlags"> 23839 <member name="F:OpenMetaverse.InventoryItem.CreatorID">
24898 <summary>Flags of particle from <seealso cref="T:ParticleDataFlags" /></summary> 23840 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the creator of this item</summary>
24899 </member> 23841 </member>
24900 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartMaxAge"> 23842 <member name="F:OpenMetaverse.InventoryItem.Description">
24901 <summary>Max Age particle system will emit particles for</summary> 23843 <summary>A Description of this item</summary>
24902 </member> 23844 </member>
24903 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartColor"> 23845 <member name="F:OpenMetaverse.InventoryItem.GroupID">
24904 <summary>The <see cref="T:Color4" /> the particle has at the beginning of its lifecycle</summary> 23846 <summary>The <seealso cref="T:OpenMetaverse.Group"/>s <seealso cref="T:OpenMetaverse.UUID"/> this item is set to or owned by</summary>
24905 </member> 23847 </member>
24906 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndColor"> 23848 <member name="F:OpenMetaverse.InventoryItem.GroupOwned">
24907 <summary>The <see cref="T:Color4" /> the particle has at the ending of its lifecycle</summary> 23849 <summary>If true, item is owned by a group</summary>
24908 </member> 23850 </member>
24909 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartScaleX"> 23851 <member name="F:OpenMetaverse.InventoryItem.SalePrice">
24910 <summary>A <see langword="float" /> that represents the starting X size of the particle</summary> 23852 <summary>The price this item can be purchased for</summary>
24911 <remarks>Minimum value is 0, maximum value is 4</remarks>
24912 </member> 23853 </member>
24913 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartStartScaleY"> 23854 <member name="F:OpenMetaverse.InventoryItem.SaleType">
24914 <summary>A <see langword="float" /> that represents the starting Y size of the particle</summary> 23855 <summary>The type of sale from the <seealso cref="T:OpenMetaverse.SaleType"/> enum</summary>
24915 <remarks>Minimum value is 0, maximum value is 4</remarks>
24916 </member> 23856 </member>
24917 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndScaleX"> 23857 <member name="F:OpenMetaverse.InventoryItem.Flags">
24918 <summary>A <see langword="float" /> that represents the ending X size of the particle</summary> 23858 <summary>Combined flags from <seealso cref="T:OpenMetaverse.InventoryItemFlags"/></summary>
24919 <remarks>Minimum value is 0, maximum value is 4</remarks>
24920 </member> 23859 </member>
24921 <member name="F:OpenMetaverse.Primitive.ParticleSystem.PartEndScaleY"> 23860 <member name="F:OpenMetaverse.InventoryItem.CreationDate">
24922 <summary>A <see langword="float" /> that represents the ending Y size of the particle</summary> 23861 <summary>Time and date this inventory item was created, stored as
24923 <remarks>Minimum value is 0, maximum value is 4</remarks> 23862 UTC (Coordinated Universal Time)</summary>
24924 </member> 23863 </member>
24925 <member name="M:OpenMetaverse.Primitive.ParticleSystem.GetBytes"> 23864 <member name="F:OpenMetaverse.InventoryItem.TransactionID">
24926 <summary> 23865 <summary>Used to update the AssetID in requests sent to the server</summary>
24927 Generate byte[] array from particle data
24928 </summary>
24929 <returns>Byte array</returns>
24930 </member> 23866 </member>
24931 <member name="T:OpenMetaverse.Primitive.ConstructionData"> 23867 <member name="F:OpenMetaverse.InventoryItem.LastOwnerID">
24932 <summary> 23868 <summary>The <seealso cref="T:OpenMetaverse.UUID"/> of the previous owner of the item</summary>
24933 Parameters used to construct a visual representation of a primitive
24934 </summary>
24935 </member> 23869 </member>
24936 <member name="F:OpenMetaverse.Primitive.ConstructionData.profileCurve"> 23870 <member name="M:OpenMetaverse.InventoryItem.#ctor(OpenMetaverse.UUID)">
24937 <summary> 23871 <summary>
23872 Construct a new InventoryItem object
24938 </summary> 23873 </summary>
23874 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the item</param>
24939 </member> 23875 </member>
24940 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathCurve"> 23876 <member name="M:OpenMetaverse.InventoryItem.#ctor(OpenMetaverse.InventoryType,OpenMetaverse.UUID)">
24941 <summary> 23877 <summary>
23878 Construct a new InventoryItem object of a specific Type
24942 </summary> 23879 </summary>
23880 <param name="type">The type of item from <seealso cref="T:OpenMetaverse.InventoryType"/></param>
23881 <param name="itemID"><seealso cref="T:OpenMetaverse.UUID"/> of the item</param>
24943 </member> 23882 </member>
24944 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathEnd"> 23883 <member name="M:OpenMetaverse.InventoryItem.IsLink">
24945 <summary> 23884 <summary>
23885 Indicates inventory item is a link
24946 </summary> 23886 </summary>
23887 <returns>True if inventory item is a link to another inventory item</returns>
24947 </member> 23888 </member>
24948 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathRadiusOffset"> 23889 <member name="M:OpenMetaverse.InventoryItem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
24949 <summary> 23890 <summary>
23891
24950 </summary> 23892 </summary>
23893 <returns></returns>
24951 </member> 23894 </member>
24952 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathSkew"> 23895 <member name="M:OpenMetaverse.InventoryItem.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
24953 <summary> 23896 <summary>
23897
24954 </summary> 23898 </summary>
23899 <returns></returns>
24955 </member> 23900 </member>
24956 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathScaleX"> 23901 <member name="M:OpenMetaverse.InventoryItem.GetHashCode">
24957 <summary> 23902 <summary>
23903 Generates a number corresponding to the value of the object to support the use of a hash table.
23904 Suitable for use in hashing algorithms and data structures such as a hash table
24958 </summary> 23905 </summary>
23906 <returns>A Hashcode of all the combined InventoryItem fields</returns>
24959 </member> 23907 </member>
24960 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathScaleY"> 23908 <member name="M:OpenMetaverse.InventoryItem.Equals(System.Object)">
24961 <summary> 23909 <summary>
23910 Compares an object
24962 </summary> 23911 </summary>
23912 <param name="o">The object to compare</param>
23913 <returns>true if comparison object matches</returns>
24963 </member> 23914 </member>
24964 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathShearX"> 23915 <member name="M:OpenMetaverse.InventoryItem.Equals(OpenMetaverse.InventoryBase)">
24965 <summary> 23916 <summary>
23917 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryBase"/> object is equal to the current object
24966 </summary> 23918 </summary>
23919 <param name="o">The <seealso cref="T:OpenMetaverse.InventoryBase"/> object to compare against</param>
23920 <returns>true if objects are the same</returns>
24967 </member> 23921 </member>
24968 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathShearY"> 23922 <member name="M:OpenMetaverse.InventoryItem.Equals(OpenMetaverse.InventoryItem)">
24969 <summary> 23923 <summary>
23924 Determine whether the specified <seealso cref="T:OpenMetaverse.InventoryItem"/> object is equal to the current object
24970 </summary> 23925 </summary>
23926 <param name="o">The <seealso cref="T:OpenMetaverse.InventoryItem"/> object to compare against</param>
23927 <returns>true if objects are the same</returns>
24971 </member> 23928 </member>
24972 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTaperX"> 23929 <member name="M:OpenMetaverse.InventoryItem.FromOSD(OpenMetaverse.StructuredData.OSD)">
24973 <summary> 23930 <summary>
23931 Create InventoryItem from OSD
24974 </summary> 23932 </summary>
23933 <param name="data">OSD Data that makes up InventoryItem</param>
23934 <returns>Inventory item created</returns>
24975 </member> 23935 </member>
24976 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTaperY"> 23936 <member name="M:OpenMetaverse.InventoryItem.GetOSD">
24977 <summary> 23937 <summary>
23938 Convert InventoryItem to OSD
24978 </summary> 23939 </summary>
23940 <returns>OSD representation of InventoryItem</returns>
24979 </member> 23941 </member>
24980 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathBegin"> 23942 <member name="T:OpenMetaverse.InventoryTexture">
24981 <summary> 23943 <summary>
23944 InventoryTexture Class representing a graphical image
24982 </summary> 23945 </summary>
23946 <seealso cref="!:ManagedImage"/>
24983 </member> 23947 </member>
24984 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTwist"> 23948 <member name="M:OpenMetaverse.InventoryTexture.#ctor(OpenMetaverse.UUID)">
24985 <summary> 23949 <summary>
23950 Construct an InventoryTexture object
24986 </summary> 23951 </summary>
23952 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
23953 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
24987 </member> 23954 </member>
24988 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathTwistBegin"> 23955 <member name="M:OpenMetaverse.InventoryTexture.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
24989 <summary> 23956 <summary>
23957 Construct an InventoryTexture object from a serialization stream
24990 </summary> 23958 </summary>
24991 </member> 23959 </member>
24992 <member name="F:OpenMetaverse.Primitive.ConstructionData.PathRevolutions"> 23960 <member name="T:OpenMetaverse.InventorySound">
24993 <summary> 23961 <summary>
23962 InventorySound Class representing a playable sound
24994 </summary> 23963 </summary>
24995 </member> 23964 </member>
24996 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileBegin"> 23965 <member name="M:OpenMetaverse.InventorySound.#ctor(OpenMetaverse.UUID)">
24997 <summary> 23966 <summary>
23967 Construct an InventorySound object
24998 </summary> 23968 </summary>
23969 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
23970 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
24999 </member> 23971 </member>
25000 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileEnd"> 23972 <member name="M:OpenMetaverse.InventorySound.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25001 <summary> 23973 <summary>
23974 Construct an InventorySound object from a serialization stream
25002 </summary> 23975 </summary>
25003 </member> 23976 </member>
25004 <member name="F:OpenMetaverse.Primitive.ConstructionData.ProfileHollow"> 23977 <member name="T:OpenMetaverse.InventoryCallingCard">
25005 <summary> 23978 <summary>
23979 InventoryCallingCard Class, contains information on another avatar
25006 </summary> 23980 </summary>
25007 </member> 23981 </member>
25008 <member name="F:OpenMetaverse.Primitive.ConstructionData.Material"> 23982 <member name="M:OpenMetaverse.InventoryCallingCard.#ctor(OpenMetaverse.UUID)">
25009 <summary> 23983 <summary>
23984 Construct an InventoryCallingCard object
25010 </summary> 23985 </summary>
23986 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
23987 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25011 </member> 23988 </member>
25012 <member name="F:OpenMetaverse.Primitive.ConstructionData.State"> 23989 <member name="M:OpenMetaverse.InventoryCallingCard.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25013 <summary> 23990 <summary>
23991 Construct an InventoryCallingCard object from a serialization stream
25014 </summary> 23992 </summary>
25015 </member> 23993 </member>
25016 <member name="F:OpenMetaverse.Primitive.ConstructionData.PCode"> 23994 <member name="T:OpenMetaverse.InventoryLandmark">
25017 <summary> 23995 <summary>
23996 InventoryLandmark Class, contains details on a specific location
25018 </summary> 23997 </summary>
25019 </member> 23998 </member>
25020 <member name="P:OpenMetaverse.Primitive.ConstructionData.AttachmentPoint"> 23999 <member name="M:OpenMetaverse.InventoryLandmark.#ctor(OpenMetaverse.UUID)">
25021 <summary>Attachment point to an avatar</summary>
25022 </member>
25023 <member name="P:OpenMetaverse.Primitive.ConstructionData.ProfileCurve">
25024 <summary> 24000 <summary>
24001 Construct an InventoryLandmark object
25025 </summary> 24002 </summary>
24003 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24004 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25026 </member> 24005 </member>
25027 <member name="P:OpenMetaverse.Primitive.ConstructionData.ProfileHole"> 24006 <member name="M:OpenMetaverse.InventoryLandmark.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25028 <summary> 24007 <summary>
24008 Construct an InventoryLandmark object from a serialization stream
25029 </summary> 24009 </summary>
25030 </member> 24010 </member>
25031 <member name="P:OpenMetaverse.Primitive.ConstructionData.PathBeginScale"> 24011 <member name="P:OpenMetaverse.InventoryLandmark.LandmarkVisited">
25032 <summary> 24012 <summary>
24013 Landmarks use the InventoryItemFlags struct and will have a flag of 1 set if they have been visited
25033 </summary> 24014 </summary>
25034 </member> 24015 </member>
25035 <member name="P:OpenMetaverse.Primitive.ConstructionData.PathEndScale"> 24016 <member name="T:OpenMetaverse.InventoryObject">
25036 <summary> 24017 <summary>
24018 InventoryObject Class contains details on a primitive or coalesced set of primitives
25037 </summary> 24019 </summary>
25038 </member> 24020 </member>
25039 <member name="M:OpenMetaverse.Primitive.ConstructionData.GetHashCode"> 24021 <member name="M:OpenMetaverse.InventoryObject.#ctor(OpenMetaverse.UUID)">
25040 <summary> 24022 <summary>
25041 Calculdates hash code for prim construction data 24023 Construct an InventoryObject object
25042 </summary> 24024 </summary>
25043 <returns>The has</returns> 24025 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24026 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25044 </member> 24027 </member>
25045 <member name="T:OpenMetaverse.Primitive.FlexibleData"> 24028 <member name="M:OpenMetaverse.InventoryObject.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25046 <summary> 24029 <summary>
25047 Information on the flexible properties of a primitive 24030 Construct an InventoryObject object from a serialization stream
25048 </summary> 24031 </summary>
25049 </member> 24032 </member>
25050 <member name="M:OpenMetaverse.Primitive.FlexibleData.#ctor"> 24033 <member name="P:OpenMetaverse.InventoryObject.ItemFlags">
25051 <summary> 24034 <summary>
25052 Default constructor 24035 Gets or sets the upper byte of the Flags value
25053 </summary> 24036 </summary>
25054 </member> 24037 </member>
25055 <member name="M:OpenMetaverse.Primitive.FlexibleData.#ctor(System.Byte[],System.Int32)"> 24038 <member name="P:OpenMetaverse.InventoryObject.AttachPoint">
25056 <summary> 24039 <summary>
24040 Gets or sets the object attachment point, the lower byte of the Flags value
25057 </summary> 24041 </summary>
25058 <param name="data">
25059 </param>
25060 <param name="pos">
25061 </param>
25062 </member> 24042 </member>
25063 <member name="F:OpenMetaverse.Primitive.FlexibleData.Softness"> 24043 <member name="T:OpenMetaverse.InventoryNotecard">
25064 <summary> 24044 <summary>
24045 InventoryNotecard Class, contains details on an encoded text document
25065 </summary> 24046 </summary>
25066 </member> 24047 </member>
25067 <member name="F:OpenMetaverse.Primitive.FlexibleData.Gravity"> 24048 <member name="M:OpenMetaverse.InventoryNotecard.#ctor(OpenMetaverse.UUID)">
25068 <summary> 24049 <summary>
24050 Construct an InventoryNotecard object
25069 </summary> 24051 </summary>
24052 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24053 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25070 </member> 24054 </member>
25071 <member name="F:OpenMetaverse.Primitive.FlexibleData.Drag"> 24055 <member name="M:OpenMetaverse.InventoryNotecard.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25072 <summary> 24056 <summary>
24057 Construct an InventoryNotecard object from a serialization stream
25073 </summary> 24058 </summary>
25074 </member> 24059 </member>
25075 <member name="F:OpenMetaverse.Primitive.FlexibleData.Wind"> 24060 <member name="T:OpenMetaverse.InventoryCategory">
25076 <summary> 24061 <summary>
24062 InventoryCategory Class
25077 </summary> 24063 </summary>
24064 <remarks>TODO: Is this even used for anything?</remarks>
25078 </member> 24065 </member>
25079 <member name="F:OpenMetaverse.Primitive.FlexibleData.Tension"> 24066 <member name="M:OpenMetaverse.InventoryCategory.#ctor(OpenMetaverse.UUID)">
25080 <summary> 24067 <summary>
24068 Construct an InventoryCategory object
25081 </summary> 24069 </summary>
24070 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24071 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25082 </member> 24072 </member>
25083 <member name="F:OpenMetaverse.Primitive.FlexibleData.Force"> 24073 <member name="M:OpenMetaverse.InventoryCategory.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25084 <summary> 24074 <summary>
24075 Construct an InventoryCategory object from a serialization stream
25085 </summary> 24076 </summary>
25086 </member> 24077 </member>
25087 <member name="M:OpenMetaverse.Primitive.FlexibleData.GetBytes"> 24078 <member name="T:OpenMetaverse.InventoryLSL">
25088 <summary> 24079 <summary>
24080 InventoryLSL Class, represents a Linden Scripting Language object
25089 </summary> 24081 </summary>
25090 <returns>
25091 </returns>
25092 </member> 24082 </member>
25093 <member name="M:OpenMetaverse.Primitive.FlexibleData.GetOSD"> 24083 <member name="M:OpenMetaverse.InventoryLSL.#ctor(OpenMetaverse.UUID)">
25094 <summary> 24084 <summary>
24085 Construct an InventoryLSL object
25095 </summary> 24086 </summary>
25096 <returns> 24087 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
25097 </returns> 24088 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25098 </member> 24089 </member>
25099 <member name="T:OpenMetaverse.Primitive.LightData"> 24090 <member name="M:OpenMetaverse.InventoryLSL.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25100 <summary> 24091 <summary>
25101 Information on the light properties of a primitive 24092 Construct an InventoryLSL object from a serialization stream
25102 </summary> 24093 </summary>
25103 </member> 24094 </member>
25104 <member name="M:OpenMetaverse.Primitive.LightData.#ctor"> 24095 <member name="T:OpenMetaverse.InventorySnapshot">
25105 <summary> 24096 <summary>
25106 Default constructor 24097 InventorySnapshot Class, an image taken with the viewer
25107 </summary> 24098 </summary>
25108 </member> 24099 </member>
25109 <member name="M:OpenMetaverse.Primitive.LightData.#ctor(System.Byte[],System.Int32)"> 24100 <member name="M:OpenMetaverse.InventorySnapshot.#ctor(OpenMetaverse.UUID)">
25110 <summary> 24101 <summary>
24102 Construct an InventorySnapshot object
25111 </summary> 24103 </summary>
25112 <param name="data"> 24104 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
25113 </param> 24105 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25114 <param name="pos">
25115 </param>
25116 </member> 24106 </member>
25117 <member name="F:OpenMetaverse.Primitive.LightData.Color"> 24107 <member name="M:OpenMetaverse.InventorySnapshot.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25118 <summary> 24108 <summary>
24109 Construct an InventorySnapshot object from a serialization stream
25119 </summary> 24110 </summary>
25120 </member> 24111 </member>
25121 <member name="F:OpenMetaverse.Primitive.LightData.Intensity"> 24112 <member name="T:OpenMetaverse.InventoryAttachment">
25122 <summary> 24113 <summary>
24114 InventoryAttachment Class, contains details on an attachable object
25123 </summary> 24115 </summary>
25124 </member> 24116 </member>
25125 <member name="F:OpenMetaverse.Primitive.LightData.Radius"> 24117 <member name="M:OpenMetaverse.InventoryAttachment.#ctor(OpenMetaverse.UUID)">
25126 <summary> 24118 <summary>
24119 Construct an InventoryAttachment object
25127 </summary> 24120 </summary>
24121 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24122 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25128 </member> 24123 </member>
25129 <member name="F:OpenMetaverse.Primitive.LightData.Cutoff"> 24124 <member name="M:OpenMetaverse.InventoryAttachment.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25130 <summary> 24125 <summary>
24126 Construct an InventoryAttachment object from a serialization stream
25131 </summary> 24127 </summary>
25132 </member> 24128 </member>
25133 <member name="F:OpenMetaverse.Primitive.LightData.Falloff"> 24129 <member name="P:OpenMetaverse.InventoryAttachment.AttachmentPoint">
25134 <summary> 24130 <summary>
24131 Get the last AttachmentPoint this object was attached to
25135 </summary> 24132 </summary>
25136 </member> 24133 </member>
25137 <member name="M:OpenMetaverse.Primitive.LightData.GetBytes"> 24134 <member name="T:OpenMetaverse.InventoryWearable">
25138 <summary> 24135 <summary>
24136 InventoryWearable Class, details on a clothing item or body part
25139 </summary> 24137 </summary>
25140 <returns>
25141 </returns>
25142 </member> 24138 </member>
25143 <member name="M:OpenMetaverse.Primitive.LightData.ToString"> 24139 <member name="M:OpenMetaverse.InventoryWearable.#ctor(OpenMetaverse.UUID)">
25144 <summary> 24140 <summary>
24141 Construct an InventoryWearable object
25145 </summary> 24142 </summary>
25146 <returns> 24143 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
25147 </returns> 24144 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25148 </member> 24145 </member>
25149 <member name="T:OpenMetaverse.Primitive.SculptData"> 24146 <member name="M:OpenMetaverse.InventoryWearable.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25150 <summary> 24147 <summary>
25151 Information on the sculpt properties of a sculpted primitive 24148 Construct an InventoryWearable object from a serialization stream
25152 </summary> 24149 </summary>
25153 </member> 24150 </member>
25154 <member name="M:OpenMetaverse.Primitive.SculptData.#ctor"> 24151 <member name="P:OpenMetaverse.InventoryWearable.WearableType">
25155 <summary> 24152 <summary>
25156 Default constructor 24153 The <seealso cref="T:OpenMetaverse.WearableType"/>, Skin, Shape, Skirt, Etc
25157 </summary> 24154 </summary>
25158 </member> 24155 </member>
25159 <member name="M:OpenMetaverse.Primitive.SculptData.#ctor(System.Byte[],System.Int32)"> 24156 <member name="T:OpenMetaverse.InventoryAnimation">
25160 <summary> 24157 <summary>
24158 InventoryAnimation Class, A bvh encoded object which animates an avatar
25161 </summary> 24159 </summary>
25162 <param name="data">
25163 </param>
25164 <param name="pos">
25165 </param>
25166 </member> 24160 </member>
25167 <member name="P:OpenMetaverse.Primitive.SculptData.Invert"> 24161 <member name="M:OpenMetaverse.InventoryAnimation.#ctor(OpenMetaverse.UUID)">
25168 <summary> 24162 <summary>
25169 Render inside out (inverts the normals). 24163 Construct an InventoryAnimation object
25170 </summary> 24164 </summary>
24165 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24166 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25171 </member> 24167 </member>
25172 <member name="P:OpenMetaverse.Primitive.SculptData.Mirror"> 24168 <member name="M:OpenMetaverse.InventoryAnimation.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25173 <summary> 24169 <summary>
25174 Render an X axis mirror of the sculpty. 24170 Construct an InventoryAnimation object from a serialization stream
25175 </summary> 24171 </summary>
25176 </member> 24172 </member>
25177 <member name="T:OpenMetaverse.Primitive.ObjectProperties"> 24173 <member name="T:OpenMetaverse.InventoryGesture">
25178 <summary> 24174 <summary>
25179 Extended properties to describe an object 24175 InventoryGesture Class, details on a series of animations, sounds, and actions
25180 </summary> 24176 </summary>
25181 </member> 24177 </member>
25182 <member name="M:OpenMetaverse.Primitive.ObjectProperties.#ctor"> 24178 <member name="M:OpenMetaverse.InventoryGesture.#ctor(OpenMetaverse.UUID)">
25183 <summary> 24179 <summary>
25184 Default constructor 24180 Construct an InventoryGesture object
25185 </summary> 24181 </summary>
24182 <param name="itemID">A <seealso cref="T:OpenMetaverse.UUID"/> which becomes the
24183 <seealso cref="T:OpenMetaverse.InventoryItem"/> objects AssetUUID</param>
25186 </member> 24184 </member>
25187 <member name="F:OpenMetaverse.Primitive.ObjectProperties.ObjectID"> 24185 <member name="M:OpenMetaverse.InventoryGesture.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25188 <summary> 24186 <summary>
24187 Construct an InventoryGesture object from a serialization stream
25189 </summary> 24188 </summary>
25190 </member> 24189 </member>
25191 <member name="F:OpenMetaverse.Primitive.ObjectProperties.CreatorID"> 24190 <member name="T:OpenMetaverse.InventoryFolder">
25192 <summary> 24191 <summary>
24192 A folder contains <seealso cref="T:OpenMetaverse.InventoryItem"/>s and has certain attributes specific
24193 to itself
25193 </summary> 24194 </summary>
25194 </member> 24195 </member>
25195 <member name="F:OpenMetaverse.Primitive.ObjectProperties.OwnerID"> 24196 <member name="F:OpenMetaverse.InventoryFolder.PreferredType">
25196 <summary> 24197 <summary>The Preferred <seealso cref="T:OpenMetaverse.AssetType"/> for a folder.</summary>
25197 </summary>
25198 </member> 24198 </member>
25199 <member name="F:OpenMetaverse.Primitive.ObjectProperties.GroupID"> 24199 <member name="F:OpenMetaverse.InventoryFolder.Version">
25200 <summary> 24200 <summary>The Version of this folder</summary>
25201 </summary>
25202 </member> 24201 </member>
25203 <member name="F:OpenMetaverse.Primitive.ObjectProperties.CreationDate"> 24202 <member name="F:OpenMetaverse.InventoryFolder.DescendentCount">
25204 <summary> 24203 <summary>Number of child items this folder contains.</summary>
25205 </summary>
25206 </member> 24204 </member>
25207 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Permissions"> 24205 <member name="M:OpenMetaverse.InventoryFolder.#ctor(OpenMetaverse.UUID)">
25208 <summary> 24206 <summary>
24207 Constructor
25209 </summary> 24208 </summary>
24209 <param name="itemID">UUID of the folder</param>
25210 </member> 24210 </member>
25211 <member name="F:OpenMetaverse.Primitive.ObjectProperties.OwnershipCost"> 24211 <member name="M:OpenMetaverse.InventoryFolder.ToString">
25212 <summary> 24212 <summary>
24213
25213 </summary> 24214 </summary>
24215 <returns></returns>
25214 </member> 24216 </member>
25215 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SaleType"> 24217 <member name="M:OpenMetaverse.InventoryFolder.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25216 <summary> 24218 <summary>
24219 Get Serilization data for this InventoryFolder object
25217 </summary> 24220 </summary>
25218 </member> 24221 </member>
25219 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SalePrice"> 24222 <member name="M:OpenMetaverse.InventoryFolder.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
25220 <summary> 24223 <summary>
24224 Construct an InventoryFolder object from a serialization stream
25221 </summary> 24225 </summary>
25222 </member> 24226 </member>
25223 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePerms"> 24227 <member name="M:OpenMetaverse.InventoryFolder.GetHashCode">
25224 <summary> 24228 <summary>
24229
25225 </summary> 24230 </summary>
24231 <returns></returns>
25226 </member> 24232 </member>
25227 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePermTextures"> 24233 <member name="M:OpenMetaverse.InventoryFolder.Equals(System.Object)">
25228 <summary> 24234 <summary>
24235
25229 </summary> 24236 </summary>
24237 <param name="o"></param>
24238 <returns></returns>
25230 </member> 24239 </member>
25231 <member name="F:OpenMetaverse.Primitive.ObjectProperties.AggregatePermTexturesOwner"> 24240 <member name="M:OpenMetaverse.InventoryFolder.Equals(OpenMetaverse.InventoryBase)">
25232 <summary> 24241 <summary>
24242
25233 </summary> 24243 </summary>
24244 <param name="o"></param>
24245 <returns></returns>
25234 </member> 24246 </member>
25235 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Category"> 24247 <member name="M:OpenMetaverse.InventoryFolder.Equals(OpenMetaverse.InventoryFolder)">
25236 <summary> 24248 <summary>
24249
25237 </summary> 24250 </summary>
24251 <param name="o"></param>
24252 <returns></returns>
25238 </member> 24253 </member>
25239 <member name="F:OpenMetaverse.Primitive.ObjectProperties.InventorySerial"> 24254 <member name="M:OpenMetaverse.InventoryFolder.FromOSD(OpenMetaverse.StructuredData.OSD)">
25240 <summary> 24255 <summary>
24256 Create InventoryFolder from OSD
25241 </summary> 24257 </summary>
24258 <param name="data">OSD Data that makes up InventoryFolder</param>
24259 <returns>Inventory folder created</returns>
25242 </member> 24260 </member>
25243 <member name="F:OpenMetaverse.Primitive.ObjectProperties.ItemID"> 24261 <member name="M:OpenMetaverse.InventoryFolder.GetOSD">
25244 <summary> 24262 <summary>
24263 Convert InventoryItem to OSD
25245 </summary> 24264 </summary>
24265 <returns>OSD representation of InventoryItem</returns>
25246 </member> 24266 </member>
25247 <member name="F:OpenMetaverse.Primitive.ObjectProperties.FolderID"> 24267 <member name="T:OpenMetaverse.InventoryManager">
25248 <summary> 24268 <summary>
24269 Tools for dealing with agents inventory
25249 </summary> 24270 </summary>
25250 </member> 24271 </member>
25251 <member name="F:OpenMetaverse.Primitive.ObjectProperties.FromTaskID"> 24272 <member name="F:OpenMetaverse.InventoryManager.MAGIC_ID">
25252 <summary> 24273 <summary>Used for converting shadow_id to asset_id</summary>
25253 </summary>
25254 </member> 24274 </member>
25255 <member name="F:OpenMetaverse.Primitive.ObjectProperties.LastOwnerID"> 24275 <member name="F:OpenMetaverse.InventoryManager.m_ItemReceived">
25256 <summary> 24276 <summary>The event subscribers, null of no subscribers</summary>
25257 </summary>
25258 </member> 24277 </member>
25259 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Name"> 24278 <member name="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)">
25260 <summary> 24279 <summary>Raises the ItemReceived Event</summary>
25261 </summary> 24280 <param name="e">A ItemReceivedEventArgs object containing
24281 the data sent from the simulator</param>
25262 </member> 24282 </member>
25263 <member name="F:OpenMetaverse.Primitive.ObjectProperties.Description"> 24283 <member name="F:OpenMetaverse.InventoryManager.m_ItemReceivedLock">
25264 <summary> 24284 <summary>Thread sync lock object</summary>
25265 </summary>
25266 </member> 24285 </member>
25267 <member name="F:OpenMetaverse.Primitive.ObjectProperties.TouchName"> 24286 <member name="F:OpenMetaverse.InventoryManager.m_FolderUpdated">
25268 <summary> 24287 <summary>The event subscribers, null of no subscribers</summary>
25269 </summary>
25270 </member> 24288 </member>
25271 <member name="F:OpenMetaverse.Primitive.ObjectProperties.SitName"> 24289 <member name="M:OpenMetaverse.InventoryManager.OnFolderUpdated(OpenMetaverse.FolderUpdatedEventArgs)">
25272 <summary> 24290 <summary>Raises the FolderUpdated Event</summary>
25273 </summary> 24291 <param name="e">A FolderUpdatedEventArgs object containing
24292 the data sent from the simulator</param>
25274 </member> 24293 </member>
25275 <member name="F:OpenMetaverse.Primitive.ObjectProperties.TextureIDs"> 24294 <member name="F:OpenMetaverse.InventoryManager.m_FolderUpdatedLock">
25276 <summary> 24295 <summary>Thread sync lock object</summary>
25277 </summary>
25278 </member> 24296 </member>
25279 <member name="M:OpenMetaverse.Primitive.ObjectProperties.SetFamilyProperties(OpenMetaverse.Primitive.ObjectProperties)"> 24297 <member name="F:OpenMetaverse.InventoryManager.m_InventoryObjectOffered">
25280 <summary> 24298 <summary>The event subscribers, null of no subscribers</summary>
25281 Set the properties that are set in an ObjectPropertiesFamily packet
25282 </summary>
25283 <param name="props">
25284 <seealso cref="T:OpenMetaverse.Primitive.ObjectProperties" /> that has
25285 been partially filled by an ObjectPropertiesFamily packet</param>
25286 </member> 24299 </member>
25287 <member name="T:OpenMetaverse.Primitive.PhysicsProperties"> 24300 <member name="M:OpenMetaverse.InventoryManager.OnInventoryObjectOffered(OpenMetaverse.InventoryObjectOfferedEventArgs)">
25288 <summary> 24301 <summary>Raises the InventoryObjectOffered Event</summary>
25289 Describes physics attributes of the prim 24302 <param name="e">A InventoryObjectOfferedEventArgs object containing
25290 </summary> 24303 the data sent from the simulator</param>
25291 </member> 24304 </member>
25292 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.LocalID"> 24305 <member name="F:OpenMetaverse.InventoryManager.m_InventoryObjectOfferedLock">
25293 <summary>Primitive's local ID</summary> 24306 <summary>Thread sync lock object</summary>
25294 </member> 24307 </member>
25295 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Density"> 24308 <member name="F:OpenMetaverse.InventoryManager.m_TaskItemReceived">
25296 <summary>Density (1000 for normal density)</summary> 24309 <summary>The event subscribers, null of no subscribers</summary>
25297 </member> 24310 </member>
25298 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Friction"> 24311 <member name="M:OpenMetaverse.InventoryManager.OnTaskItemReceived(OpenMetaverse.TaskItemReceivedEventArgs)">
25299 <summary>Friction</summary> 24312 <summary>Raises the TaskItemReceived Event</summary>
24313 <param name="e">A TaskItemReceivedEventArgs object containing
24314 the data sent from the simulator</param>
25300 </member> 24315 </member>
25301 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.GravityMultiplier"> 24316 <member name="F:OpenMetaverse.InventoryManager.m_TaskItemReceivedLock">
25302 <summary>Gravity multiplier (1 for normal gravity) </summary> 24317 <summary>Thread sync lock object</summary>
25303 </member> 24318 </member>
25304 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.PhysicsShapeType"> 24319 <member name="F:OpenMetaverse.InventoryManager.m_FindObjectByPathReply">
25305 <summary>Type of physics representation of this primitive in the simulator</summary> 24320 <summary>The event subscribers, null of no subscribers</summary>
25306 </member> 24321 </member>
25307 <member name="F:OpenMetaverse.Primitive.PhysicsProperties.Restitution"> 24322 <member name="M:OpenMetaverse.InventoryManager.OnFindObjectByPathReply(OpenMetaverse.FindObjectByPathReplyEventArgs)">
25308 <summary>Restitution</summary> 24323 <summary>Raises the FindObjectByPath Event</summary>
24324 <param name="e">A FindObjectByPathEventArgs object containing
24325 the data sent from the simulator</param>
25309 </member> 24326 </member>
25310 <member name="M:OpenMetaverse.Primitive.PhysicsProperties.FromOSD(OpenMetaverse.StructuredData.OSD)"> 24327 <member name="F:OpenMetaverse.InventoryManager.m_FindObjectByPathReplyLock">
25311 <summary> 24328 <summary>Thread sync lock object</summary>
25312 Creates PhysicsProperties from OSD
25313 </summary>
25314 <param name="osd">OSDMap with incoming data</param>
25315 <returns>Deserialized PhysicsProperties object</returns>
25316 </member> 24329 </member>
25317 <member name="M:OpenMetaverse.Primitive.PhysicsProperties.GetOSD"> 24330 <member name="F:OpenMetaverse.InventoryManager.m_TaskInventoryReply">
25318 <summary> 24331 <summary>The event subscribers, null of no subscribers</summary>
25319 Serializes PhysicsProperties to OSD
25320 </summary>
25321 <returns>OSDMap with serialized PhysicsProperties data</returns>
25322 </member> 24332 </member>
25323 <member name="T:OpenMetaverse.Primitive.TextureAnimMode"> 24333 <member name="M:OpenMetaverse.InventoryManager.OnTaskInventoryReply(OpenMetaverse.TaskInventoryReplyEventArgs)">
25324 <summary> 24334 <summary>Raises the TaskInventoryReply Event</summary>
25325 Texture animation mode 24335 <param name="e">A TaskInventoryReplyEventArgs object containing
25326 </summary> 24336 the data sent from the simulator</param>
25327 </member> 24337 </member>
25328 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ANIM_OFF"> 24338 <member name="F:OpenMetaverse.InventoryManager.m_TaskInventoryReplyLock">
25329 <summary>Disable texture animation</summary> 24339 <summary>Thread sync lock object</summary>
25330 </member> 24340 </member>
25331 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ANIM_ON"> 24341 <member name="F:OpenMetaverse.InventoryManager.m_SaveAssetToInventory">
25332 <summary>Enable texture animation</summary> 24342 <summary>The event subscribers, null of no subscribers</summary>
25333 </member> 24343 </member>
25334 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.LOOP"> 24344 <member name="M:OpenMetaverse.InventoryManager.OnSaveAssetToInventory(OpenMetaverse.SaveAssetToInventoryEventArgs)">
25335 <summary>Loop when animating textures</summary> 24345 <summary>Raises the SaveAssetToInventory Event</summary>
24346 <param name="e">A SaveAssetToInventoryEventArgs object containing
24347 the data sent from the simulator</param>
25336 </member> 24348 </member>
25337 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.REVERSE"> 24349 <member name="F:OpenMetaverse.InventoryManager.m_SaveAssetToInventoryLock">
25338 <summary>Animate in reverse direction</summary> 24350 <summary>Thread sync lock object</summary>
25339 </member> 24351 </member>
25340 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.PING_PONG"> 24352 <member name="F:OpenMetaverse.InventoryManager.m_ScriptRunningReply">
25341 <summary>Animate forward then reverse</summary> 24353 <summary>The event subscribers, null of no subscribers</summary>
25342 </member> 24354 </member>
25343 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.SMOOTH"> 24355 <member name="M:OpenMetaverse.InventoryManager.OnScriptRunningReply(OpenMetaverse.ScriptRunningReplyEventArgs)">
25344 <summary>Slide texture smoothly instead of frame-stepping</summary> 24356 <summary>Raises the ScriptRunningReply Event</summary>
24357 <param name="e">A ScriptRunningReplyEventArgs object containing
24358 the data sent from the simulator</param>
25345 </member> 24359 </member>
25346 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.ROTATE"> 24360 <member name="F:OpenMetaverse.InventoryManager.m_ScriptRunningReplyLock">
25347 <summary>Rotate texture instead of using frames</summary> 24361 <summary>Thread sync lock object</summary>
25348 </member> 24362 </member>
25349 <member name="F:OpenMetaverse.Primitive.TextureAnimMode.SCALE"> 24363 <member name="F:OpenMetaverse.InventoryManager._NewFolderNames">
25350 <summary>Scale texture instead of using frames</summary> 24364 <summary>Partial mapping of AssetTypes to folder names</summary>
25351 </member> 24365 </member>
25352 <member name="T:OpenMetaverse.Primitive.TextureEntryFace"> 24366 <member name="M:OpenMetaverse.InventoryManager.#ctor(OpenMetaverse.GridClient)">
25353 <summary> 24367 <summary>
25354 A single textured face. Don't instantiate this class yourself, use the 24368 Default constructor
25355 methods in TextureEntry
25356 </summary> 24369 </summary>
24370 <param name="client">Reference to the GridClient object</param>
25357 </member> 24371 </member>
25358 <member name="M:OpenMetaverse.Primitive.TextureEntryFace.#ctor(OpenMetaverse.Primitive.TextureEntryFace)"> 24372 <member name="M:OpenMetaverse.InventoryManager.FetchItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Int32)">
25359 <summary> 24373 <summary>
25360 Contains the definition for individual faces 24374 Fetch an inventory item from the dataserver
25361 </summary> 24375 </summary>
25362 <param name="defaultTexture"> 24376 <param name="itemID">The items <seealso cref="T:OpenMetaverse.UUID"/></param>
25363 </param> 24377 <param name="ownerID">The item Owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24378 <param name="timeoutMS">a integer representing the number of milliseconds to wait for results</param>
24379 <returns>An <seealso cref="T:OpenMetaverse.InventoryItem"/> object on success, or null if no item was found</returns>
24380 <remarks>Items will also be sent to the <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)"/> event</remarks>
25364 </member> 24381 </member>
25365 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.material"> 24382 <member name="M:OpenMetaverse.InventoryManager.RequestFetchInventory(OpenMetaverse.UUID,OpenMetaverse.UUID)">
25366 <summary> 24383 <summary>
24384 Request A single inventory item
25367 </summary> 24385 </summary>
24386 <param name="itemID">The items <seealso cref="T:OpenMetaverse.UUID"/></param>
24387 <param name="ownerID">The item Owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24388 <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)"/>
25368 </member> 24389 </member>
25369 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.media"> 24390 <member name="M:OpenMetaverse.InventoryManager.RequestFetchInventory(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID})">
25370 <summary> 24391 <summary>
24392 Request inventory items
25371 </summary> 24393 </summary>
24394 <param name="itemIDs">Inventory items to request</param>
24395 <param name="ownerIDs">Owners of the inventory items</param>
24396 <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)"/>
25372 </member> 24397 </member>
25373 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RGBA"> 24398 <member name="M:OpenMetaverse.InventoryManager.RequestFetchInventoryCap(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID})">
25374 <summary> 24399 <summary>
24400 Request inventory items via Capabilities
25375 </summary> 24401 </summary>
24402 <param name="itemIDs">Inventory items to request</param>
24403 <param name="ownerIDs">Owners of the inventory items</param>
24404 <seealso cref="M:OpenMetaverse.InventoryManager.OnItemReceived(OpenMetaverse.ItemReceivedEventArgs)"/>
25376 </member> 24405 </member>
25377 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RepeatU"> 24406 <member name="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)">
25378 <summary> 24407 <summary>
24408 Get contents of a folder
25379 </summary> 24409 </summary>
24410 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID"/> of the folder to search</param>
24411 <param name="owner">The <seealso cref="T:OpenMetaverse.UUID"/> of the folders owner</param>
24412 <param name="folders">true to retrieve folders</param>
24413 <param name="items">true to retrieve items</param>
24414 <param name="order">sort order to return results in</param>
24415 <param name="timeoutMS">a integer representing the number of milliseconds to wait for results</param>
24416 <returns>A list of inventory items matching search criteria within folder</returns>
24417 <seealso cref="M:OpenMetaverse.InventoryManager.RequestFolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)"/>
24418 <remarks>InventoryFolder.DescendentCount will only be accurate if both folders and items are
24419 requested</remarks>
25380 </member> 24420 </member>
25381 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.RepeatV"> 24421 <member name="M:OpenMetaverse.InventoryManager.RequestFolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)">
25382 <summary> 24422 <summary>
24423 Request the contents of an inventory folder
25383 </summary> 24424 </summary>
24425 <param name="folder">The folder to search</param>
24426 <param name="owner">The folder owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24427 <param name="folders">true to return <seealso cref="!:InventoryManager.InventoryFolder"/>s contained in folder</param>
24428 <param name="items">true to return <seealso cref="!:InventoryManager.InventoryItem"/>s containd in folder</param>
24429 <param name="order">the sort order to return items in</param>
24430 <seealso cref="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)"/>
25384 </member> 24431 </member>
25385 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.OffsetU"> 24432 <member name="M:OpenMetaverse.InventoryManager.RequestFolderContentsCap(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder)">
25386 <summary> 24433 <summary>
24434 Request the contents of an inventory folder using HTTP capabilities
25387 </summary> 24435 </summary>
24436 <param name="folderID">The folder to search</param>
24437 <param name="ownerID">The folder owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24438 <param name="fetchFolders">true to return <seealso cref="!:InventoryManager.InventoryFolder"/>s contained in folder</param>
24439 <param name="fetchItems">true to return <seealso cref="!:InventoryManager.InventoryItem"/>s containd in folder</param>
24440 <param name="order">the sort order to return items in</param>
24441 <seealso cref="M:OpenMetaverse.InventoryManager.FolderContents(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventorySortOrder,System.Int32)"/>
25388 </member> 24442 </member>
25389 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.OffsetV"> 24443 <member name="M:OpenMetaverse.InventoryManager.FindFolderForType(OpenMetaverse.AssetType)">
25390 <summary> 24444 <summary>
24445 Returns the UUID of the folder (category) that defaults to
24446 containing 'type'. The folder is not necessarily only for that
24447 type
25391 </summary> 24448 </summary>
24449 <remarks>This will return the root folder if one does not exist</remarks>
24450 <param name="type"></param>
24451 <returns>The UUID of the desired folder if found, the UUID of the RootFolder
24452 if not found, or UUID.Zero on failure</returns>
25392 </member> 24453 </member>
25393 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Rotation"> 24454 <member name="M:OpenMetaverse.InventoryManager.FindObjectByPath(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.Int32)">
25394 <summary> 24455 <summary>
24456 Find an object in inventory using a specific path to search
25395 </summary> 24457 </summary>
24458 <param name="baseFolder">The folder to begin the search in</param>
24459 <param name="inventoryOwner">The object owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24460 <param name="path">A string path to search</param>
24461 <param name="timeoutMS">milliseconds to wait for a reply</param>
24462 <returns>Found items <seealso cref="T:OpenMetaverse.UUID"/> or <seealso cref="F:OpenMetaverse.UUID.Zero"/> if
24463 timeout occurs or item is not found</returns>
25396 </member> 24464 </member>
25397 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Glow"> 24465 <member name="M:OpenMetaverse.InventoryManager.RequestFindObjectByPath(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)">
25398 <summary> 24466 <summary>
24467 Find inventory items by path
25399 </summary> 24468 </summary>
24469 <param name="baseFolder">The folder to begin the search in</param>
24470 <param name="inventoryOwner">The object owners <seealso cref="T:OpenMetaverse.UUID"/></param>
24471 <param name="path">A string path to search, folders/objects separated by a '/'</param>
24472 <remarks>Results are sent to the <seealso cref="!:InventoryManager.OnFindObjectByPath"/> event</remarks>
25400 </member> 24473 </member>
25401 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.Bump"> 24474 <member name="M:OpenMetaverse.InventoryManager.LocalFind(OpenMetaverse.UUID,System.String[],System.Int32,System.Boolean)">
25402 <summary> 24475 <summary>
24476 Search inventory Store object for an item or folder
25403 </summary> 24477 </summary>
24478 <param name="baseFolder">The folder to begin the search in</param>
24479 <param name="path">An array which creates a path to search</param>
24480 <param name="level">Number of levels below baseFolder to conduct searches</param>
24481 <param name="firstOnly">if True, will stop searching after first match is found</param>
24482 <returns>A list of inventory items found</returns>
25404 </member> 24483 </member>
25405 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.MediaFlags"> 24484 <member name="M:OpenMetaverse.InventoryManager.Move(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryFolder)">
25406 <summary>In the future this will specify whether a webpage is
25407 attached to this face</summary>
25408 </member>
25409 <member name="P:OpenMetaverse.Primitive.TextureEntryFace.TextureID">
25410 <summary> 24485 <summary>
24486 Move an inventory item or folder to a new location
25411 </summary> 24487 </summary>
24488 <param name="item">The <seealso cref="T:InventoryBase"/> item or folder to move</param>
24489 <param name="newParent">The <seealso cref="T:InventoryFolder"/> to move item or folder to</param>
25412 </member> 24490 </member>
25413 <member name="M:OpenMetaverse.Primitive.TextureEntryFace.ToString"> 24491 <member name="M:OpenMetaverse.InventoryManager.Move(OpenMetaverse.InventoryBase,OpenMetaverse.InventoryFolder,System.String)">
25414 <summary> 24492 <summary>
24493 Move an inventory item or folder to a new location and change its name
25415 </summary> 24494 </summary>
25416 <returns> 24495 <param name="item">The <seealso cref="T:InventoryBase"/> item or folder to move</param>
25417 </returns> 24496 <param name="newParent">The <seealso cref="T:InventoryFolder"/> to move item or folder to</param>
24497 <param name="newName">The name to change the item or folder to</param>
25418 </member> 24498 </member>
25419 <member name="T:OpenMetaverse.Primitive.TextureEntry"> 24499 <member name="M:OpenMetaverse.InventoryManager.MoveFolder(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)">
25420 <summary> 24500 <summary>
25421 Represents all of the texturable faces for an object 24501 Move and rename a folder
25422 </summary> 24502 </summary>
25423 <remarks>Grid objects have infinite faces, with each face 24503 <param name="folderID">The source folders <seealso cref="T:OpenMetaverse.UUID"/></param>
25424 using the properties of the default face unless set otherwise. So if 24504 <param name="newparentID">The destination folders <seealso cref="T:OpenMetaverse.UUID"/></param>
25425 you have a TextureEntry with a default texture uuid of X, and face 18 24505 <param name="newName">The name to change the folder to</param>
25426 has a texture UUID of Y, every face would be textured with X except for
25427 face 18 that uses Y. In practice however, primitives utilize a maximum
25428 of nine faces</remarks>
25429 </member> 24506 </member>
25430 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(OpenMetaverse.UUID)"> 24507 <member name="M:OpenMetaverse.InventoryManager.UpdateFolderProperties(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType)">
25431 <summary> 24508 <summary>
25432 Constructor that takes a default texture UUID 24509 Update folder properties
25433 </summary> 24510 </summary>
25434 <param name="defaultTextureID">Texture UUID to use as the default texture</param> 24511 <param name="folderID"><seealso cref="T:OpenMetaverse.UUID"/> of the folder to update</param>
24512 <param name="parentID">Sets folder's parent to <seealso cref="T:OpenMetaverse.UUID"/></param>
24513 <param name="name">Folder name</param>
24514 <param name="type">Folder type</param>
25435 </member> 24515 </member>
25436 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(OpenMetaverse.Primitive.TextureEntryFace)"> 24516 <member name="M:OpenMetaverse.InventoryManager.MoveFolder(OpenMetaverse.UUID,OpenMetaverse.UUID)">
25437 <summary> 24517 <summary>
25438 Constructor that takes a <code>TextureEntryFace</code> for the 24518 Move a folder
25439 default face
25440 </summary> 24519 </summary>
25441 <param name="defaultFace">Face to use as the default face</param> 24520 <param name="folderID">The source folders <seealso cref="T:OpenMetaverse.UUID"/></param>
24521 <param name="newParentID">The destination folders <seealso cref="T:OpenMetaverse.UUID"/></param>
25442 </member> 24522 </member>
25443 <member name="M:OpenMetaverse.Primitive.TextureEntry.#ctor(System.Byte[],System.Int32,System.Int32)"> 24523 <member name="M:OpenMetaverse.InventoryManager.MoveFolders(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.UUID})">
25444 <summary> 24524 <summary>
25445 Constructor that creates the TextureEntry class from a byte array 24525 Move multiple folders, the keys in the Dictionary parameter,
24526 to a new parents, the value of that folder's key.
25446 </summary> 24527 </summary>
25447 <param name="data">Byte array containing the TextureEntry field</param> 24528 <param name="foldersNewParents">A Dictionary containing the
25448 <param name="pos">Starting position of the TextureEntry field in 24529 <seealso cref="T:OpenMetaverse.UUID"/> of the source as the key, and the
25449 the byte array</param> 24530 <seealso cref="T:OpenMetaverse.UUID"/> of the destination as the value</param>
25450 <param name="length">Length of the TextureEntry field, in bytes</param>
25451 </member> 24531 </member>
25452 <member name="F:OpenMetaverse.Primitive.TextureEntry.DefaultTexture"> 24532 <member name="M:OpenMetaverse.InventoryManager.MoveItem(OpenMetaverse.UUID,OpenMetaverse.UUID)">
25453 <summary> 24533 <summary>
24534 Move an inventory item to a new folder
25454 </summary> 24535 </summary>
24536 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the source item to move</param>
24537 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID"/> of the destination folder</param>
25455 </member> 24538 </member>
25456 <member name="F:OpenMetaverse.Primitive.TextureEntry.FaceTextures"> 24539 <member name="M:OpenMetaverse.InventoryManager.MoveItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String)">
25457 <summary> 24540 <summary>
24541 Move and rename an inventory item
25458 </summary> 24542 </summary>
24543 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the source item to move</param>
24544 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID"/> of the destination folder</param>
24545 <param name="newName">The name to change the folder to</param>
25459 </member> 24546 </member>
25460 <member name="M:OpenMetaverse.Primitive.TextureEntry.CreateFace(System.UInt32)"> 24547 <member name="M:OpenMetaverse.InventoryManager.MoveItems(System.Collections.Generic.Dictionary{OpenMetaverse.UUID,OpenMetaverse.UUID})">
25461 <summary> 24548 <summary>
25462 This will either create a new face if a custom face for the given 24549 Move multiple inventory items to new locations
25463 index is not defined, or return the custom face for that index if
25464 it already exists
25465 </summary> 24550 </summary>
25466 <param name="index">The index number of the face to create or 24551 <param name="itemsNewParents">A Dictionary containing the
25467 retrieve</param> 24552 <seealso cref="T:OpenMetaverse.UUID"/> of the source item as the key, and the
25468 <returns>A TextureEntryFace containing all the properties for that 24553 <seealso cref="T:OpenMetaverse.UUID"/> of the destination folder as the value</param>
25469 face</returns>
25470 </member> 24554 </member>
25471 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetFace(System.UInt32)"> 24555 <member name="M:OpenMetaverse.InventoryManager.RemoveDescendants(OpenMetaverse.UUID)">
25472 <summary> 24556 <summary>
24557 Remove descendants of a folder
25473 </summary> 24558 </summary>
25474 <param name="index"> 24559 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID"/> of the folder</param>
25475 </param>
25476 <returns>
25477 </returns>
25478 </member> 24560 </member>
25479 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetOSD"> 24561 <member name="M:OpenMetaverse.InventoryManager.RemoveItem(OpenMetaverse.UUID)">
25480 <summary> 24562 <summary>
24563 Remove a single item from inventory
25481 </summary> 24564 </summary>
25482 <returns> 24565 <param name="item">The <seealso cref="T:OpenMetaverse.UUID"/> of the inventory item to remove</param>
25483 </returns>
25484 </member> 24566 </member>
25485 <member name="M:OpenMetaverse.Primitive.TextureEntry.GetBytes"> 24567 <member name="M:OpenMetaverse.InventoryManager.RemoveFolder(OpenMetaverse.UUID)">
25486 <summary> 24568 <summary>
24569 Remove a folder from inventory
25487 </summary> 24570 </summary>
25488 <returns> 24571 <param name="folder">The <seealso cref="T:OpenMetaverse.UUID"/> of the folder to remove</param>
25489 </returns>
25490 </member> 24572 </member>
25491 <member name="M:OpenMetaverse.Primitive.TextureEntry.ToString"> 24573 <member name="M:OpenMetaverse.InventoryManager.Remove(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID})">
25492 <summary> 24574 <summary>
24575 Remove multiple items or folders from inventory
25493 </summary> 24576 </summary>
25494 <returns> 24577 <param name="items">A List containing the <seealso cref="T:OpenMetaverse.UUID"/>s of items to remove</param>
25495 </returns> 24578 <param name="folders">A List containing the <seealso cref="T:OpenMetaverse.UUID"/>s of the folders to remove</param>
25496 </member> 24579 </member>
25497 <member name="T:OpenMetaverse.Primitive.TextureAnimation"> 24580 <member name="M:OpenMetaverse.InventoryManager.EmptyLostAndFound">
25498 <summary> 24581 <summary>
25499 Controls the texture animation of a particular prim 24582 Empty the Lost and Found folder
25500 </summary> 24583 </summary>
25501 </member> 24584 </member>
25502 <member name="M:OpenMetaverse.Primitive.TextureAnimation.#ctor(System.Byte[],System.Int32)"> 24585 <member name="M:OpenMetaverse.InventoryManager.EmptyTrash">
25503 <summary> 24586 <summary>
24587 Empty the Trash folder
25504 </summary> 24588 </summary>
25505 <param name="data">
25506 </param>
25507 <param name="pos">
25508 </param>
25509 </member> 24589 </member>
25510 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Flags"> 24590 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItem(OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,OpenMetaverse.InventoryType,OpenMetaverse.PermissionMask,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25511 <summary> 24591 <summary>
24592
25512 </summary> 24593 </summary>
24594 <param name="parentFolder"></param>
24595 <param name="name"></param>
24596 <param name="description"></param>
24597 <param name="type"></param>
24598 <param name="assetTransactionID">Proper use is to upload the inventory's asset first, then provide the Asset's TransactionID here.</param>
24599 <param name="invType"></param>
24600 <param name="nextOwnerMask"></param>
24601 <param name="callback"></param>
25513 </member> 24602 </member>
25514 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Face"> 24603 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItem(OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,OpenMetaverse.InventoryType,OpenMetaverse.WearableType,OpenMetaverse.PermissionMask,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25515 <summary> 24604 <summary>
24605
25516 </summary> 24606 </summary>
24607 <param name="parentFolder"></param>
24608 <param name="name"></param>
24609 <param name="description"></param>
24610 <param name="type"></param>
24611 <param name="assetTransactionID">Proper use is to upload the inventory's asset first, then provide the Asset's TransactionID here.</param>
24612 <param name="invType"></param>
24613 <param name="wearableType"></param>
24614 <param name="nextOwnerMask"></param>
24615 <param name="callback"></param>
25517 </member> 24616 </member>
25518 <member name="F:OpenMetaverse.Primitive.TextureAnimation.SizeX"> 24617 <member name="M:OpenMetaverse.InventoryManager.CreateFolder(OpenMetaverse.UUID,System.String)">
25519 <summary> 24618 <summary>
24619 Creates a new inventory folder
25520 </summary> 24620 </summary>
24621 <param name="parentID">ID of the folder to put this folder in</param>
24622 <param name="name">Name of the folder to create</param>
24623 <returns>The UUID of the newly created folder</returns>
25521 </member> 24624 </member>
25522 <member name="F:OpenMetaverse.Primitive.TextureAnimation.SizeY"> 24625 <member name="M:OpenMetaverse.InventoryManager.CreateFolder(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType)">
25523 <summary> 24626 <summary>
24627 Creates a new inventory folder
25524 </summary> 24628 </summary>
24629 <param name="parentID">ID of the folder to put this folder in</param>
24630 <param name="name">Name of the folder to create</param>
24631 <param name="preferredType">Sets this folder as the default folder
24632 for new assets of the specified type. Use <code>AssetType.Unknown</code>
24633 to create a normal folder, otherwise it will likely create a
24634 duplicate of an existing folder type</param>
24635 <returns>The UUID of the newly created folder</returns>
24636 <remarks>If you specify a preferred type of <code>AsseType.Folder</code>
24637 it will create a new root folder which may likely cause all sorts
24638 of strange problems</remarks>
25525 </member> 24639 </member>
25526 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Start"> 24640 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItemFromAsset(System.Byte[],System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback)">
25527 <summary> 24641 <summary>
24642 Create an inventory item and upload asset data
25528 </summary> 24643 </summary>
24644 <param name="data">Asset data</param>
24645 <param name="name">Inventory item name</param>
24646 <param name="description">Inventory item description</param>
24647 <param name="assetType">Asset type</param>
24648 <param name="invType">Inventory type</param>
24649 <param name="folderID">Put newly created inventory in this folder</param>
24650 <param name="callback">Delegate that will receive feedback on success or failure</param>
25529 </member> 24651 </member>
25530 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Length"> 24652 <member name="M:OpenMetaverse.InventoryManager.RequestCreateItemFromAsset(System.Byte[],System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.Permissions,OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback)">
25531 <summary> 24653 <summary>
24654 Create an inventory item and upload asset data
25532 </summary> 24655 </summary>
24656 <param name="data">Asset data</param>
24657 <param name="name">Inventory item name</param>
24658 <param name="description">Inventory item description</param>
24659 <param name="assetType">Asset type</param>
24660 <param name="invType">Inventory type</param>
24661 <param name="folderID">Put newly created inventory in this folder</param>
24662 <param name="permissions">Permission of the newly created item
24663 (EveryoneMask, GroupMask, and NextOwnerMask of Permissions struct are supported)</param>
24664 <param name="callback">Delegate that will receive feedback on success or failure</param>
25533 </member> 24665 </member>
25534 <member name="F:OpenMetaverse.Primitive.TextureAnimation.Rate"> 24666 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryBase,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25535 <summary> 24667 <summary>
24668 Creates inventory link to another inventory item or folder
25536 </summary> 24669 </summary>
24670 <param name="folderID">Put newly created link in folder with this UUID</param>
24671 <param name="bse">Inventory item or folder</param>
24672 <param name="callback">Method to call upon creation of the link</param>
25537 </member> 24673 </member>
25538 <member name="M:OpenMetaverse.Primitive.TextureAnimation.GetBytes"> 24674 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryItem,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25539 <summary> 24675 <summary>
24676 Creates inventory link to another inventory item
25540 </summary> 24677 </summary>
25541 <returns> 24678 <param name="folderID">Put newly created link in folder with this UUID</param>
25542 </returns> 24679 <param name="item">Original inventory item</param>
24680 <param name="callback">Method to call upon creation of the link</param>
25543 </member> 24681 </member>
25544 <member name="F:OpenMetaverse.Primitive.MediaVersion"> 24682 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.InventoryFolder,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25545 <summary> 24683 <summary>
25546 Current version of the media data for the prim 24684 Creates inventory link to another inventory folder
25547 </summary> 24685 </summary>
24686 <param name="folderID">Put newly created link in folder with this UUID</param>
24687 <param name="folder">Original inventory folder</param>
24688 <param name="callback">Method to call upon creation of the link</param>
25548 </member> 24689 </member>
25549 <member name="F:OpenMetaverse.Primitive.FaceMedia"> 24690 <member name="M:OpenMetaverse.InventoryManager.CreateLink(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,System.String,OpenMetaverse.AssetType,OpenMetaverse.InventoryType,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCreatedCallback)">
25550 <summary> 24691 <summary>
25551 Array of media entries indexed by face number 24692 Creates inventory link to another inventory item or folder
25552 </summary> 24693 </summary>
24694 <param name="folderID">Put newly created link in folder with this UUID</param>
24695 <param name="itemID">Original item's UUID</param>
24696 <param name="name">Name</param>
24697 <param name="description">Description</param>
24698 <param name="assetType">Asset Type</param>
24699 <param name="invType">Inventory Type</param>
24700 <param name="transactionID">Transaction UUID</param>
24701 <param name="callback">Method to call upon creation of the link</param>
25553 </member> 24702 </member>
25554 <member name="F:OpenMetaverse.Primitive.ParticleSys"> 24703 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.InventoryManager.ItemCopiedCallback)">
25555 <summary> 24704 <summary>
24705
25556 </summary> 24706 </summary>
24707 <param name="item"></param>
24708 <param name="newParent"></param>
24709 <param name="newName"></param>
24710 <param name="callback"></param>
25557 </member> 24711 </member>
25558 <member name="F:OpenMetaverse.Primitive.ID"> 24712 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItem(OpenMetaverse.UUID,OpenMetaverse.UUID,System.String,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)">
25559 <summary> 24713 <summary>
24714
25560 </summary> 24715 </summary>
24716 <param name="item"></param>
24717 <param name="newParent"></param>
24718 <param name="newName"></param>
24719 <param name="oldOwnerID"></param>
24720 <param name="callback"></param>
25561 </member> 24721 </member>
25562 <member name="F:OpenMetaverse.Primitive.GroupID"> 24722 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItems(System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{OpenMetaverse.UUID},System.Collections.Generic.List{System.String},OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)">
25563 <summary> 24723 <summary>
24724
25564 </summary> 24725 </summary>
24726 <param name="items"></param>
24727 <param name="targetFolders"></param>
24728 <param name="newNames"></param>
24729 <param name="oldOwnerID"></param>
24730 <param name="callback"></param>
25565 </member> 24731 </member>
25566 <member name="F:OpenMetaverse.Primitive.LocalID"> 24732 <member name="M:OpenMetaverse.InventoryManager.RequestCopyItemFromNotecard(OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.ItemCopiedCallback)">
25567 <summary> 24733 <summary>
24734 Request a copy of an asset embedded within a notecard
25568 </summary> 24735 </summary>
24736 <param name="objectID">Usually UUID.Zero for copying an asset from a notecard</param>
24737 <param name="notecardID">UUID of the notecard to request an asset from</param>
24738 <param name="folderID">Target folder for asset to go to in your inventory</param>
24739 <param name="itemID">UUID of the embedded asset</param>
24740 <param name="callback">callback to run when item is copied to inventory</param>
25569 </member> 24741 </member>
25570 <member name="F:OpenMetaverse.Primitive.ParentID"> 24742 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItem(OpenMetaverse.InventoryItem)">
25571 <summary> 24743 <summary>
24744
25572 </summary> 24745 </summary>
24746 <param name="item"></param>
25573 </member> 24747 </member>
25574 <member name="F:OpenMetaverse.Primitive.RegionHandle"> 24748 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{OpenMetaverse.InventoryItem})">
25575 <summary> 24749 <summary>
24750
25576 </summary> 24751 </summary>
24752 <param name="items"></param>
25577 </member> 24753 </member>
25578 <member name="F:OpenMetaverse.Primitive.Flags"> 24754 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{OpenMetaverse.InventoryItem},OpenMetaverse.UUID)">
25579 <summary> 24755 <summary>
24756
25580 </summary> 24757 </summary>
24758 <param name="items"></param>
24759 <param name="transactionID"></param>
25581 </member> 24760 </member>
25582 <member name="F:OpenMetaverse.Primitive.TreeSpecies"> 24761 <member name="M:OpenMetaverse.InventoryManager.RequestUploadNotecardAsset(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)">
25583 <summary>Foliage type for this primitive. Only applicable if this
25584 primitive is foliage</summary>
25585 </member>
25586 <member name="F:OpenMetaverse.Primitive.ScratchPad">
25587 <summary>Unknown</summary>
25588 </member>
25589 <member name="F:OpenMetaverse.Primitive.Position">
25590 <summary> 24762 <summary>
24763
25591 </summary> 24764 </summary>
24765 <param name="data"></param>
24766 <param name="notecardID"></param>
24767 <param name="callback"></param>
25592 </member> 24768 </member>
25593 <member name="F:OpenMetaverse.Primitive.Scale"> 24769 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateNotecardTask(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)">
25594 <summary> 24770 <summary>
24771 Save changes to notecard embedded in object contents
25595 </summary> 24772 </summary>
24773 <param name="data">Encoded notecard asset data</param>
24774 <param name="notecardID">Notecard UUID</param>
24775 <param name="taskID">Object's UUID</param>
24776 <param name="callback">Called upon finish of the upload with status information</param>
25596 </member> 24777 </member>
25597 <member name="F:OpenMetaverse.Primitive.Rotation"> 24778 <member name="M:OpenMetaverse.InventoryManager.RequestUploadGestureAsset(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback)">
25598 <summary> 24779 <summary>
24780 Upload new gesture asset for an inventory gesture item
25599 </summary> 24781 </summary>
24782 <param name="data">Encoded gesture asset</param>
24783 <param name="gestureID">Gesture inventory UUID</param>
24784 <param name="callback">Callback whick will be called when upload is complete</param>
25600 </member> 24785 </member>
25601 <member name="F:OpenMetaverse.Primitive.Velocity"> 24786 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateScriptAgentInventory(System.Byte[],OpenMetaverse.UUID,System.Boolean,OpenMetaverse.InventoryManager.ScriptUpdatedCallback)">
25602 <summary> 24787 <summary>
24788 Update an existing script in an agents Inventory
25603 </summary> 24789 </summary>
24790 <param name="data">A byte[] array containing the encoded scripts contents</param>
24791 <param name="itemID">the itemID of the script</param>
24792 <param name="mono">if true, sets the script content to run on the mono interpreter</param>
24793 <param name="callback"></param>
25604 </member> 24794 </member>
25605 <member name="F:OpenMetaverse.Primitive.AngularVelocity"> 24795 <member name="M:OpenMetaverse.InventoryManager.RequestUpdateScriptTask(System.Byte[],OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean,System.Boolean,OpenMetaverse.InventoryManager.ScriptUpdatedCallback)">
25606 <summary> 24796 <summary>
24797 Update an existing script in an task Inventory
25607 </summary> 24798 </summary>
24799 <param name="data">A byte[] array containing the encoded scripts contents</param>
24800 <param name="itemID">the itemID of the script</param>
24801 <param name="taskID">UUID of the prim containting the script</param>
24802 <param name="mono">if true, sets the script content to run on the mono interpreter</param>
24803 <param name="running">if true, sets the script to running</param>
24804 <param name="callback"></param>
25608 </member> 24805 </member>
25609 <member name="F:OpenMetaverse.Primitive.Acceleration"> 24806 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem)">
25610 <summary> 24807 <summary>
24808 Rez an object from inventory
25611 </summary> 24809 </summary>
24810 <param name="simulator">Simulator to place object in</param>
24811 <param name="rotation">Rotation of the object when rezzed</param>
24812 <param name="position">Vector of where to place object</param>
24813 <param name="item">InventoryItem object containing item details</param>
25612 </member> 24814 </member>
25613 <member name="F:OpenMetaverse.Primitive.CollisionPlane"> 24815 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem,OpenMetaverse.UUID)">
25614 <summary> 24816 <summary>
24817 Rez an object from inventory
25615 </summary> 24818 </summary>
24819 <param name="simulator">Simulator to place object in</param>
24820 <param name="rotation">Rotation of the object when rezzed</param>
24821 <param name="position">Vector of where to place object</param>
24822 <param name="item">InventoryItem object containing item details</param>
24823 <param name="groupOwner">UUID of group to own the object</param>
25616 </member> 24824 </member>
25617 <member name="F:OpenMetaverse.Primitive.Flexible"> 24825 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)">
25618 <summary> 24826 <summary>
24827 Rez an object from inventory
25619 </summary> 24828 </summary>
24829 <param name="simulator">Simulator to place object in</param>
24830 <param name="rotation">Rotation of the object when rezzed</param>
24831 <param name="position">Vector of where to place object</param>
24832 <param name="item">InventoryItem object containing item details</param>
24833 <param name="groupOwner">UUID of group to own the object</param>
24834 <param name="queryID">User defined queryID to correlate replies</param>
24835 <param name="rezSelected">If set to true, the CreateSelected flag
24836 will be set on the rezzed object</param>
25620 </member> 24837 </member>
25621 <member name="F:OpenMetaverse.Primitive.Light"> 24838 <member name="M:OpenMetaverse.InventoryManager.RequestRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.UUID,OpenMetaverse.Quaternion,OpenMetaverse.Vector3,OpenMetaverse.InventoryItem,OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)">
25622 <summary> 24839 <summary>
24840 Rez an object from inventory
25623 </summary> 24841 </summary>
24842 <param name="simulator">Simulator to place object in</param>
24843 <param name="taskID">TaskID object when rezzed</param>
24844 <param name="rotation">Rotation of the object when rezzed</param>
24845 <param name="position">Vector of where to place object</param>
24846 <param name="item">InventoryItem object containing item details</param>
24847 <param name="groupOwner">UUID of group to own the object</param>
24848 <param name="queryID">User defined queryID to correlate replies</param>
24849 <param name="rezSelected">If set to true, the CreateSelected flag
24850 will be set on the rezzed object</param>
25624 </member> 24851 </member>
25625 <member name="F:OpenMetaverse.Primitive.Sculpt"> 24852 <member name="M:OpenMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32)">
25626 <summary> 24853 <summary>
24854 DeRez an object from the simulator to the agents Objects folder in the agents Inventory
25627 </summary> 24855 </summary>
24856 <param name="objectLocalID">The simulator Local ID of the object</param>
24857 <remarks>If objectLocalID is a child primitive in a linkset, the entire linkset will be derezzed</remarks>
25628 </member> 24858 </member>
25629 <member name="F:OpenMetaverse.Primitive.ClickAction"> 24859 <member name="M:OpenMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32,OpenMetaverse.DeRezDestination,OpenMetaverse.UUID,OpenMetaverse.UUID)">
25630 <summary> 24860 <summary>
24861 DeRez an object from the simulator and return to inventory
25631 </summary> 24862 </summary>
24863 <param name="objectLocalID">The simulator Local ID of the object</param>
24864 <param name="destType">The type of destination from the <seealso cref="T:OpenMetaverse.DeRezDestination"/> enum</param>
24865 <param name="destFolder">The destination inventory folders <seealso cref="T:OpenMetaverse.UUID"/> -or-
24866 if DeRezzing object to a tasks Inventory, the Tasks <seealso cref="T:OpenMetaverse.UUID"/></param>
24867 <param name="transactionID">The transaction ID for this request which
24868 can be used to correlate this request with other packets</param>
24869 <remarks>If objectLocalID is a child primitive in a linkset, the entire linkset will be derezzed</remarks>
25632 </member> 24870 </member>
25633 <member name="F:OpenMetaverse.Primitive.Sound"> 24871 <member name="M:OpenMetaverse.InventoryManager.RequestRestoreRezFromInventory(OpenMetaverse.Simulator,OpenMetaverse.InventoryItem,OpenMetaverse.UUID)">
25634 <summary> 24872 <summary>
24873 Rez an item from inventory to its previous simulator location
25635 </summary> 24874 </summary>
24875 <param name="simulator"></param>
24876 <param name="item"></param>
24877 <param name="queryID"></param>
24878 <returns></returns>
25636 </member> 24879 </member>
25637 <member name="F:OpenMetaverse.Primitive.OwnerID"> 24880 <member name="M:OpenMetaverse.InventoryManager.GiveItem(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,System.Boolean)">
25638 <summary>Identifies the owner if audio or a particle system is
25639 active</summary>
25640 </member>
25641 <member name="F:OpenMetaverse.Primitive.SoundFlags">
25642 <summary> 24881 <summary>
24882 Give an inventory item to another avatar
25643 </summary> 24883 </summary>
24884 <param name="itemID">The <seealso cref="T:OpenMetaverse.UUID"/> of the item to give</param>
24885 <param name="itemName">The name of the item</param>
24886 <param name="assetType">The type of the item from the <seealso cref="T:OpenMetaverse.AssetType"/> enum</param>
24887 <param name="recipient">The <seealso cref="T:OpenMetaverse.UUID"/> of the recipient</param>
24888 <param name="doEffect">true to generate a beameffect during transfer</param>
25644 </member> 24889 </member>
25645 <member name="F:OpenMetaverse.Primitive.SoundGain"> 24890 <member name="M:OpenMetaverse.InventoryManager.GiveFolder(OpenMetaverse.UUID,System.String,OpenMetaverse.AssetType,OpenMetaverse.UUID,System.Boolean)">
25646 <summary> 24891 <summary>
24892 Give an inventory Folder with contents to another avatar
25647 </summary> 24893 </summary>
24894 <param name="folderID">The <seealso cref="T:OpenMetaverse.UUID"/> of the Folder to give</param>
24895 <param name="folderName">The name of the folder</param>
24896 <param name="assetType">The type of the item from the <seealso cref="T:OpenMetaverse.AssetType"/> enum</param>
24897 <param name="recipient">The <seealso cref="T:OpenMetaverse.UUID"/> of the recipient</param>
24898 <param name="doEffect">true to generate a beameffect during transfer</param>
25648 </member> 24899 </member>
25649 <member name="F:OpenMetaverse.Primitive.SoundRadius"> 24900 <member name="M:OpenMetaverse.InventoryManager.UpdateTaskInventory(System.UInt32,OpenMetaverse.InventoryItem)">
25650 <summary> 24901 <summary>
24902 Copy or move an <see cref="T:OpenMetaverse.InventoryItem"/> from agent inventory to a task (primitive) inventory
25651 </summary> 24903 </summary>
24904 <param name="objectLocalID">The target object</param>
24905 <param name="item">The item to copy or move from inventory</param>
24906 <returns></returns>
24907 <remarks>For items with copy permissions a copy of the item is placed in the tasks inventory,
24908 for no-copy items the object is moved to the tasks inventory</remarks>
25652 </member> 24909 </member>
25653 <member name="F:OpenMetaverse.Primitive.Text"> 24910 <member name="M:OpenMetaverse.InventoryManager.GetTaskInventory(OpenMetaverse.UUID,System.UInt32,System.Int32)">
25654 <summary> 24911 <summary>
24912 Retrieve a listing of the items contained in a task (Primitive)
25655 </summary> 24913 </summary>
24914 <param name="objectID">The tasks <seealso cref="T:OpenMetaverse.UUID"/></param>
24915 <param name="objectLocalID">The tasks simulator local ID</param>
24916 <param name="timeoutMS">milliseconds to wait for reply from simulator</param>
24917 <returns>A list containing the inventory items inside the task or null
24918 if a timeout occurs</returns>
24919 <remarks>This request blocks until the response from the simulator arrives
24920 or timeoutMS is exceeded</remarks>
25656 </member> 24921 </member>
25657 <member name="F:OpenMetaverse.Primitive.TextColor"> 24922 <member name="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32)">
25658 <summary> 24923 <summary>
24924 Request the contents of a tasks (primitives) inventory from the
24925 current simulator
25659 </summary> 24926 </summary>
24927 <param name="objectLocalID">The LocalID of the object</param>
24928 <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply"/>
25660 </member> 24929 </member>
25661 <member name="F:OpenMetaverse.Primitive.MediaURL"> 24930 <member name="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32,OpenMetaverse.Simulator)">
25662 <summary> 24931 <summary>
24932 Request the contents of a tasks (primitives) inventory
25663 </summary> 24933 </summary>
24934 <param name="objectLocalID">The simulator Local ID of the object</param>
24935 <param name="simulator">A reference to the simulator object that contains the object</param>
24936 <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply"/>
25664 </member> 24937 </member>
25665 <member name="F:OpenMetaverse.Primitive.Joint"> 24938 <member name="M:OpenMetaverse.InventoryManager.MoveTaskInventory(System.UInt32,OpenMetaverse.UUID,OpenMetaverse.UUID,OpenMetaverse.Simulator)">
25666 <summary> 24939 <summary>
24940 Move an item from a tasks (Primitive) inventory to the specified folder in the avatars inventory
25667 </summary> 24941 </summary>
24942 <param name="objectLocalID">LocalID of the object in the simulator</param>
24943 <param name="taskItemID">UUID of the task item to move</param>
24944 <param name="inventoryFolderID">The ID of the destination folder in this agents inventory</param>
24945 <param name="simulator">Simulator Object</param>
24946 <remarks>Raises the <see cref="M:OpenMetaverse.InventoryManager.OnTaskItemReceived(OpenMetaverse.TaskItemReceivedEventArgs)"/> event</remarks>
25668 </member> 24947 </member>
25669 <member name="F:OpenMetaverse.Primitive.JointPivot"> 24948 <member name="M:OpenMetaverse.InventoryManager.RemoveTaskInventory(System.UInt32,OpenMetaverse.UUID,OpenMetaverse.Simulator)">
25670 <summary> 24949 <summary>
24950 Remove an item from an objects (Prim) Inventory
25671 </summary> 24951 </summary>
24952 <param name="objectLocalID">LocalID of the object in the simulator</param>
24953 <param name="taskItemID">UUID of the task item to remove</param>
24954 <param name="simulator">Simulator Object</param>
24955 <remarks>You can confirm the removal by comparing the tasks inventory serial before and after the
24956 request with the <see cref="M:OpenMetaverse.InventoryManager.RequestTaskInventory(System.UInt32)"/> request combined with
24957 the <seealso cref="E:OpenMetaverse.InventoryManager.TaskInventoryReply"/> event</remarks>
25672 </member> 24958 </member>
25673 <member name="F:OpenMetaverse.Primitive.JointAxisOrAnchor"> 24959 <member name="M:OpenMetaverse.InventoryManager.CopyScriptToTask(System.UInt32,OpenMetaverse.InventoryItem,System.Boolean)">
25674 <summary> 24960 <summary>
25675 </summary> 24961 Copy an InventoryScript item from the Agents Inventory into a primitives task inventory
24962 </summary>
24963 <param name="objectLocalID">An unsigned integer representing a primitive being simulated</param>
24964 <param name="item">An <seealso cref="T:OpenMetaverse.InventoryItem"/> which represents a script object from the agents inventory</param>
24965 <param name="enableScript">true to set the scripts running state to enabled</param>
24966 <returns>A Unique Transaction ID</returns>
24967 <example>
24968 The following example shows the basic steps necessary to copy a script from the agents inventory into a tasks inventory
24969 and assumes the script exists in the agents inventory.
24970 <code>
24971 uint primID = 95899503; // Fake prim ID
24972 UUID scriptID = UUID.Parse("92a7fe8a-e949-dd39-a8d8-1681d8673232"); // Fake Script UUID in Inventory
24973
24974 Client.Inventory.FolderContents(Client.Inventory.FindFolderForType(AssetType.LSLText), Client.Self.AgentID,
24975 false, true, InventorySortOrder.ByName, 10000);
24976
24977 Client.Inventory.RezScript(primID, (InventoryItem)Client.Inventory.Store[scriptID]);
24978 </code>
24979 </example>
25676 </member> 24980 </member>
25677 <member name="F:OpenMetaverse.Primitive.NameValues"> 24981 <member name="M:OpenMetaverse.InventoryManager.RequestGetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID)">
25678 <summary> 24982 <summary>
24983 Request the running status of a script contained in a task (primitive) inventory
25679 </summary> 24984 </summary>
24985 <param name="objectID">The ID of the primitive containing the script</param>
24986 <param name="scriptID">The ID of the script</param>
24987 <remarks>The <see cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply"/> event can be used to obtain the results of the
24988 request</remarks>
24989 <seealso cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply"/>
25680 </member> 24990 </member>
25681 <member name="F:OpenMetaverse.Primitive.PrimData"> 24991 <member name="M:OpenMetaverse.InventoryManager.RequestSetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID,System.Boolean)">
25682 <summary> 24992 <summary>
24993 Send a request to set the running state of a script contained in a task (primitive) inventory
25683 </summary> 24994 </summary>
24995 <param name="objectID">The ID of the primitive containing the script</param>
24996 <param name="scriptID">The ID of the script</param>
24997 <param name="running">true to set the script running, false to stop a running script</param>
24998 <remarks>To verify the change you can use the <see cref="M:OpenMetaverse.InventoryManager.RequestGetScriptRunning(OpenMetaverse.UUID,OpenMetaverse.UUID)"/> method combined
24999 with the <see cref="E:OpenMetaverse.InventoryManager.ScriptRunningReply"/> event</remarks>
25684 </member> 25000 </member>
25685 <member name="F:OpenMetaverse.Primitive.Properties"> 25001 <member name="M:OpenMetaverse.InventoryManager.ItemCRC(OpenMetaverse.InventoryItem)">
25686 <summary> 25002 <summary>
25003 Create a CRC from an InventoryItem
25687 </summary> 25004 </summary>
25005 <param name="iitem">The source InventoryItem</param>
25006 <returns>A uint representing the source InventoryItem as a CRC</returns>
25688 </member> 25007 </member>
25689 <member name="F:OpenMetaverse.Primitive.PhysicsProps"> 25008 <member name="M:OpenMetaverse.InventoryManager.DecryptShadowID(OpenMetaverse.UUID)">
25690 <summary>Objects physics engine propertis</summary>
25691 </member>
25692 <member name="F:OpenMetaverse.Primitive.Tag">
25693 <summary>Extra data about primitive</summary>
25694 </member>
25695 <member name="F:OpenMetaverse.Primitive.IsAttachment">
25696 <summary>Indicates if prim is attached to an avatar</summary>
25697 </member>
25698 <member name="F:OpenMetaverse.Primitive.Textures">
25699 <summary> 25009 <summary>
25010 Reverses a cheesy XORing with a fixed UUID to convert a shadow_id to an asset_id
25700 </summary> 25011 </summary>
25012 <param name="shadowID">Obfuscated shadow_id value</param>
25013 <returns>Deobfuscated asset_id value</returns>
25701 </member> 25014 </member>
25702 <member name="F:OpenMetaverse.Primitive.TextureAnim"> 25015 <member name="M:OpenMetaverse.InventoryManager.EncryptAssetID(OpenMetaverse.UUID)">
25703 <summary> 25016 <summary>
25017 Does a cheesy XORing with a fixed UUID to convert an asset_id to a shadow_id
25704 </summary> 25018 </summary>
25019 <param name="assetID">asset_id value to obfuscate</param>
25020 <returns>Obfuscated shadow_id value</returns>
25705 </member> 25021 </member>
25706 <member name="P:OpenMetaverse.Primitive.Type"> 25022 <member name="M:OpenMetaverse.InventoryManager.CreateInventoryItem(OpenMetaverse.InventoryType,OpenMetaverse.UUID)">
25707 <summary>Uses basic heuristics to estimate the primitive shape</summary>
25708 </member>
25709 <member name="M:OpenMetaverse.Primitive.PackPathTwist(System.Single)">
25710 <summary> 25023 <summary>
25711 Packs PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew 25024 Wrapper for creating a new <seealso cref="T:OpenMetaverse.InventoryItem"/> object
25712 parameters in to signed eight bit values
25713 </summary> 25025 </summary>
25714 <param name="pathTwist">Floating point parameter to pack</param> 25026 <param name="type">The type of item from the <seealso cref="T:OpenMetaverse.InventoryType"/> enum</param>
25715 <returns>Signed eight bit value containing the packed parameter</returns> 25027 <param name="id">The <seealso cref="T:OpenMetaverse.UUID"/> of the newly created object</param>
25028 <returns>An <seealso cref="T:OpenMetaverse.InventoryItem"/> object with the type and id passed</returns>
25716 </member> 25029 </member>
25717 <member name="M:OpenMetaverse.Primitive.UnpackPathTwist(System.SByte)"> 25030 <member name="M:OpenMetaverse.InventoryManager.ParseTaskInventory(System.String)">
25718 <summary> 25031 <summary>
25719 Unpacks PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew 25032 Parse the results of a RequestTaskInventory() response
25720 parameters from signed eight bit integers to floating point values
25721 </summary> 25033 </summary>
25722 <param name="pathTwist">Signed eight bit value to unpack</param> 25034 <param name="taskData">A string which contains the data from the task reply</param>
25723 <returns>Unpacked floating point value</returns> 25035 <returns>A List containing the items contained within the tasks inventory</returns>
25724 </member> 25036 </member>
25725 <member name="T:OpenMetaverse.Bumpiness"> 25037 <member name="M:OpenMetaverse.InventoryManager.SaveAssetIntoInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25726 <summary> 25038 <summary>Process an incoming packet and raise the appropriate events</summary>
25727 The type of bump-mapping applied to a face 25039 <param name="sender">The sender</param>
25728 </summary> 25040 <param name="e">The EventArgs object containing the packet data</param>
25729 </member> 25041 </member>
25730 <member name="F:OpenMetaverse.Bumpiness.None"> 25042 <member name="M:OpenMetaverse.InventoryManager.InventoryDescendentsHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25731 <summary> 25043 <summary>Process an incoming packet and raise the appropriate events</summary>
25732 </summary> 25044 <param name="sender">The sender</param>
25045 <param name="e">The EventArgs object containing the packet data</param>
25733 </member> 25046 </member>
25734 <member name="F:OpenMetaverse.Bumpiness.Brightness"> 25047 <member name="M:OpenMetaverse.InventoryManager.UpdateCreateInventoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25735 <summary> 25048 <summary>
25049 UpdateCreateInventoryItem packets are received when a new inventory item
25050 is created. This may occur when an object that's rezzed in world is
25051 taken into inventory, when an item is created using the CreateInventoryItem
25052 packet, or when an object is purchased
25736 </summary> 25053 </summary>
25054 <param name="sender">The sender</param>
25055 <param name="e">The EventArgs object containing the packet data</param>
25737 </member> 25056 </member>
25738 <member name="F:OpenMetaverse.Bumpiness.Darkness"> 25057 <member name="M:OpenMetaverse.InventoryManager.MoveInventoryItemHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25058 <summary>Process an incoming packet and raise the appropriate events</summary>
25059 <param name="sender">The sender</param>
25060 <param name="e">The EventArgs object containing the packet data</param>
25061 </member>
25062 <member name="M:OpenMetaverse.InventoryManager.BulkUpdateInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25063 <summary>Process an incoming packet and raise the appropriate events</summary>
25064 <param name="sender">The sender</param>
25065 <param name="e">The EventArgs object containing the packet data</param>
25066 </member>
25067 <member name="M:OpenMetaverse.InventoryManager.FetchInventoryReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25068 <summary>Process an incoming packet and raise the appropriate events</summary>
25069 <param name="sender">The sender</param>
25070 <param name="e">The EventArgs object containing the packet data</param>
25071 </member>
25072 <member name="M:OpenMetaverse.InventoryManager.ReplyTaskInventoryHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25073 <summary>Process an incoming packet and raise the appropriate events</summary>
25074 <param name="sender">The sender</param>
25075 <param name="e">The EventArgs object containing the packet data</param>
25076 </member>
25077 <member name="E:OpenMetaverse.InventoryManager.ItemReceived">
25078 <summary>Raised when the simulator sends us data containing
25079 ...</summary>
25080 </member>
25081 <member name="E:OpenMetaverse.InventoryManager.FolderUpdated">
25082 <summary>Raised when the simulator sends us data containing
25083 ...</summary>
25084 </member>
25085 <member name="E:OpenMetaverse.InventoryManager.InventoryObjectOffered">
25086 <summary>Raised when the simulator sends us data containing
25087 an inventory object sent by another avatar or primitive</summary>
25088 </member>
25089 <member name="E:OpenMetaverse.InventoryManager.TaskItemReceived">
25090 <summary>Raised when the simulator sends us data containing
25091 ...</summary>
25092 </member>
25093 <member name="E:OpenMetaverse.InventoryManager.FindObjectByPathReply">
25094 <summary>Raised when the simulator sends us data containing
25095 ...</summary>
25096 </member>
25097 <member name="E:OpenMetaverse.InventoryManager.TaskInventoryReply">
25098 <summary>Raised when the simulator sends us data containing
25099 ...</summary>
25100 </member>
25101 <member name="E:OpenMetaverse.InventoryManager.SaveAssetToInventory">
25102 <summary>Raised when the simulator sends us data containing
25103 ...</summary>
25104 </member>
25105 <member name="E:OpenMetaverse.InventoryManager.ScriptRunningReply">
25106 <summary>Raised when the simulator sends us data containing
25107 ...</summary>
25108 </member>
25109 <member name="P:OpenMetaverse.InventoryManager.Store">
25739 <summary> 25110 <summary>
25111 Get this agents Inventory data
25740 </summary> 25112 </summary>
25741 </member> 25113 </member>
25742 <member name="F:OpenMetaverse.Bumpiness.Woodgrain"> 25114 <member name="T:OpenMetaverse.InventoryManager.ItemCreatedCallback">
25743 <summary> 25115 <summary>
25116 Callback for inventory item creation finishing
25744 </summary> 25117 </summary>
25118 <param name="success">Whether the request to create an inventory
25119 item succeeded or not</param>
25120 <param name="item">Inventory item being created. If success is
25121 false this will be null</param>
25745 </member> 25122 </member>
25746 <member name="F:OpenMetaverse.Bumpiness.Bark"> 25123 <member name="T:OpenMetaverse.InventoryManager.ItemCreatedFromAssetCallback">
25747 <summary> 25124 <summary>
25125 Callback for an inventory item being create from an uploaded asset
25748 </summary> 25126 </summary>
25127 <param name="success">true if inventory item creation was successful</param>
25128 <param name="status"></param>
25129 <param name="itemID"></param>
25130 <param name="assetID"></param>
25749 </member> 25131 </member>
25750 <member name="F:OpenMetaverse.Bumpiness.Bricks"> 25132 <member name="T:OpenMetaverse.InventoryManager.ItemCopiedCallback">
25751 <summary> 25133 <summary>
25134
25752 </summary> 25135 </summary>
25136 <param name="item"></param>
25753 </member> 25137 </member>
25754 <member name="F:OpenMetaverse.Bumpiness.Checker"> 25138 <member name="T:OpenMetaverse.InventoryManager.InventoryUploadedAssetCallback">
25755 <summary> 25139 <summary>
25140 Reply received when uploading an inventory asset
25756 </summary> 25141 </summary>
25142 <param name="success">Has upload been successful</param>
25143 <param name="status">Error message if upload failed</param>
25144 <param name="itemID">Inventory asset UUID</param>
25145 <param name="assetID">New asset UUID</param>
25757 </member> 25146 </member>
25758 <member name="F:OpenMetaverse.Bumpiness.Concrete"> 25147 <member name="T:OpenMetaverse.InventoryManager.ScriptUpdatedCallback">
25759 <summary> 25148 <summary>
25149 Delegate that is invoked when script upload is completed
25760 </summary> 25150 </summary>
25151 <param name="uploadSuccess">Has upload succeded (note, there still might be compile errors)</param>
25152 <param name="uploadStatus">Upload status message</param>
25153 <param name="compileSuccess">Is compilation successful</param>
25154 <param name="compileMessages">If compilation failed, list of error messages, null on compilation success</param>
25155 <param name="itemID">Script inventory UUID</param>
25156 <param name="assetID">Script's new asset UUID</param>
25761 </member> 25157 </member>
25762 <member name="F:OpenMetaverse.Bumpiness.Crustytile"> 25158 <member name="P:OpenMetaverse.InventoryObjectOfferedEventArgs.Accept">
25159 <summary>Set to true to accept offer, false to decline it</summary>
25160 </member>
25161 <member name="P:OpenMetaverse.InventoryObjectOfferedEventArgs.FolderID">
25162 <summary>The folder to accept the inventory into, if null default folder for <see cref="P:OpenMetaverse.InventoryObjectOfferedEventArgs.AssetType"/> will be used</summary>
25163 </member>
25164 <member name="T:OpenMetaverse.TaskItemReceivedEventArgs">
25763 <summary> 25165 <summary>
25166 Callback when an inventory object is accepted and received from a
25167 task inventory. This is the callback in which you actually get
25168 the ItemID, as in ObjectOfferedCallback it is null when received
25169 from a task.
25764 </summary> 25170 </summary>
25765 </member> 25171 </member>
25766 <member name="F:OpenMetaverse.Bumpiness.Cutstone"> 25172 <member name="T:OpenMetaverse.GridLayerType">
25767 <summary> 25173 <summary>
25174 Map layer request type
25768 </summary> 25175 </summary>
25769 </member> 25176 </member>
25770 <member name="F:OpenMetaverse.Bumpiness.Discs"> 25177 <member name="F:OpenMetaverse.GridLayerType.Objects">
25178 <summary>Objects and terrain are shown</summary>
25179 </member>
25180 <member name="F:OpenMetaverse.GridLayerType.Terrain">
25181 <summary>Only the terrain is shown, no objects</summary>
25182 </member>
25183 <member name="F:OpenMetaverse.GridLayerType.LandForSale">
25184 <summary>Overlay showing land for sale and for auction</summary>
25185 </member>
25186 <member name="T:OpenMetaverse.GridItemType">
25771 <summary> 25187 <summary>
25188 Type of grid item, such as telehub, event, populator location, etc.
25772 </summary> 25189 </summary>
25773 </member> 25190 </member>
25774 <member name="F:OpenMetaverse.Bumpiness.Gravel"> 25191 <member name="F:OpenMetaverse.GridItemType.Telehub">
25192 <summary>Telehub</summary>
25193 </member>
25194 <member name="F:OpenMetaverse.GridItemType.PgEvent">
25195 <summary>PG rated event</summary>
25196 </member>
25197 <member name="F:OpenMetaverse.GridItemType.MatureEvent">
25198 <summary>Mature rated event</summary>
25199 </member>
25200 <member name="F:OpenMetaverse.GridItemType.Popular">
25201 <summary>Popular location</summary>
25202 </member>
25203 <member name="F:OpenMetaverse.GridItemType.AgentLocations">
25204 <summary>Locations of avatar groups in a region</summary>
25205 </member>
25206 <member name="F:OpenMetaverse.GridItemType.LandForSale">
25207 <summary>Land for sale</summary>
25208 </member>
25209 <member name="F:OpenMetaverse.GridItemType.Classified">
25210 <summary>Classified ad</summary>
25211 </member>
25212 <member name="F:OpenMetaverse.GridItemType.AdultEvent">
25213 <summary>Adult rated event</summary>
25214 </member>
25215 <member name="F:OpenMetaverse.GridItemType.AdultLandForSale">
25216 <summary>Adult land for sale</summary>
25217 </member>
25218 <member name="T:OpenMetaverse.GridRegion">
25775 <summary> 25219 <summary>
25220 Information about a region on the grid map
25776 </summary> 25221 </summary>
25777 </member> 25222 </member>
25778 <member name="F:OpenMetaverse.Bumpiness.Petridish"> 25223 <member name="F:OpenMetaverse.GridRegion.X">
25224 <summary>Sim X position on World Map</summary>
25225 </member>
25226 <member name="F:OpenMetaverse.GridRegion.Y">
25227 <summary>Sim Y position on World Map</summary>
25228 </member>
25229 <member name="F:OpenMetaverse.GridRegion.Name">
25230 <summary>Sim Name (NOTE: In lowercase!)</summary>
25231 </member>
25232 <member name="F:OpenMetaverse.GridRegion.Access">
25233 <summary></summary>
25234 </member>
25235 <member name="F:OpenMetaverse.GridRegion.RegionFlags">
25236 <summary>Appears to always be zero (None)</summary>
25237 </member>
25238 <member name="F:OpenMetaverse.GridRegion.WaterHeight">
25239 <summary>Sim's defined Water Height</summary>
25240 </member>
25241 <member name="F:OpenMetaverse.GridRegion.Agents">
25242 <summary></summary>
25243 </member>
25244 <member name="F:OpenMetaverse.GridRegion.MapImageID">
25245 <summary>UUID of the World Map image</summary>
25246 </member>
25247 <member name="F:OpenMetaverse.GridRegion.RegionHandle">
25248 <summary>Unique identifier for this region, a combination of the X
25249 and Y position</summary>
25250 </member>
25251 <member name="M:OpenMetaverse.GridRegion.ToString">
25779 <summary> 25252 <summary>
25253
25780 </summary> 25254 </summary>
25255 <returns></returns>
25781 </member> 25256 </member>
25782 <member name="F:OpenMetaverse.Bumpiness.Siding"> 25257 <member name="M:OpenMetaverse.GridRegion.GetHashCode">
25783 <summary> 25258 <summary>
25259
25784 </summary> 25260 </summary>
25261 <returns></returns>
25785 </member> 25262 </member>
25786 <member name="F:OpenMetaverse.Bumpiness.Stonetile"> 25263 <member name="M:OpenMetaverse.GridRegion.Equals(System.Object)">
25787 <summary> 25264 <summary>
25265
25788 </summary> 25266 </summary>
25267 <param name="obj"></param>
25268 <returns></returns>
25789 </member> 25269 </member>
25790 <member name="F:OpenMetaverse.Bumpiness.Stucco"> 25270 <member name="T:OpenMetaverse.GridLayer">
25791 <summary> 25271 <summary>
25272 Visual chunk of the grid map
25792 </summary> 25273 </summary>
25793 </member> 25274 </member>
25794 <member name="F:OpenMetaverse.Bumpiness.Suction"> 25275 <member name="T:OpenMetaverse.MapItem">
25795 <summary> 25276 <summary>
25277 Base class for Map Items
25796 </summary> 25278 </summary>
25797 </member> 25279 </member>
25798 <member name="F:OpenMetaverse.Bumpiness.Weave"> 25280 <member name="F:OpenMetaverse.MapItem.GlobalX">
25281 <summary>The Global X position of the item</summary>
25282 </member>
25283 <member name="F:OpenMetaverse.MapItem.GlobalY">
25284 <summary>The Global Y position of the item</summary>
25285 </member>
25286 <member name="P:OpenMetaverse.MapItem.LocalX">
25287 <summary>Get the Local X position of the item</summary>
25288 </member>
25289 <member name="P:OpenMetaverse.MapItem.LocalY">
25290 <summary>Get the Local Y position of the item</summary>
25291 </member>
25292 <member name="P:OpenMetaverse.MapItem.RegionHandle">
25293 <summary>Get the Handle of the region</summary>
25294 </member>
25295 <member name="T:OpenMetaverse.MapAgentLocation">
25799 <summary> 25296 <summary>
25297 Represents an agent or group of agents location
25800 </summary> 25298 </summary>
25801 </member> 25299 </member>
25802 <member name="T:OpenMetaverse.Shininess"> 25300 <member name="T:OpenMetaverse.MapTelehub">
25803 <summary> 25301 <summary>
25804 The level of shininess applied to a face 25302 Represents a Telehub location
25805 </summary> 25303 </summary>
25806 </member> 25304 </member>
25807 <member name="F:OpenMetaverse.Shininess.None"> 25305 <member name="T:OpenMetaverse.MapLandForSale">
25808 <summary> 25306 <summary>
25307 Represents a non-adult parcel of land for sale
25809 </summary> 25308 </summary>
25810 </member> 25309 </member>
25811 <member name="F:OpenMetaverse.Shininess.Low"> 25310 <member name="T:OpenMetaverse.MapAdultLandForSale">
25812 <summary> 25311 <summary>
25312 Represents an Adult parcel of land for sale
25813 </summary> 25313 </summary>
25814 </member> 25314 </member>
25815 <member name="F:OpenMetaverse.Shininess.Medium"> 25315 <member name="T:OpenMetaverse.MapPGEvent">
25816 <summary> 25316 <summary>
25317 Represents a PG Event
25817 </summary> 25318 </summary>
25818 </member> 25319 </member>
25819 <member name="F:OpenMetaverse.Shininess.High"> 25320 <member name="T:OpenMetaverse.MapMatureEvent">
25820 <summary> 25321 <summary>
25322 Represents a Mature event
25821 </summary> 25323 </summary>
25822 </member> 25324 </member>
25823 <member name="T:OpenMetaverse.MappingType"> 25325 <member name="T:OpenMetaverse.MapAdultEvent">
25824 <summary> 25326 <summary>
25825 The texture mapping style used for a face 25327 Represents an Adult event
25826 </summary> 25328 </summary>
25827 </member> 25329 </member>
25828 <member name="F:OpenMetaverse.MappingType.Default"> 25330 <member name="T:OpenMetaverse.GridManager">
25829 <summary> 25331 <summary>
25332 Manages grid-wide tasks such as the world map
25830 </summary> 25333 </summary>
25831 </member> 25334 </member>
25832 <member name="F:OpenMetaverse.MappingType.Planar"> 25335 <member name="F:OpenMetaverse.GridManager.m_CoarseLocationUpdate">
25336 <summary>The event subscribers. null if no subcribers</summary>
25337 </member>
25338 <member name="M:OpenMetaverse.GridManager.OnCoarseLocationUpdate(OpenMetaverse.CoarseLocationUpdateEventArgs)">
25339 <summary>Raises the CoarseLocationUpdate event</summary>
25340 <param name="e">A CoarseLocationUpdateEventArgs object containing the
25341 data sent by simulator</param>
25342 </member>
25343 <member name="F:OpenMetaverse.GridManager.m_CoarseLocationUpdateLock">
25344 <summary>Thread sync lock object</summary>
25345 </member>
25346 <member name="F:OpenMetaverse.GridManager.m_GridRegion">
25347 <summary>The event subscribers. null if no subcribers</summary>
25348 </member>
25349 <member name="M:OpenMetaverse.GridManager.OnGridRegion(OpenMetaverse.GridRegionEventArgs)">
25350 <summary>Raises the GridRegion event</summary>
25351 <param name="e">A GridRegionEventArgs object containing the
25352 data sent by simulator</param>
25353 </member>
25354 <member name="F:OpenMetaverse.GridManager.m_GridRegionLock">
25355 <summary>Thread sync lock object</summary>
25356 </member>
25357 <member name="F:OpenMetaverse.GridManager.m_GridLayer">
25358 <summary>The event subscribers. null if no subcribers</summary>
25359 </member>
25360 <member name="M:OpenMetaverse.GridManager.OnGridLayer(OpenMetaverse.GridLayerEventArgs)">
25361 <summary>Raises the GridLayer event</summary>
25362 <param name="e">A GridLayerEventArgs object containing the
25363 data sent by simulator</param>
25364 </member>
25365 <member name="F:OpenMetaverse.GridManager.m_GridLayerLock">
25366 <summary>Thread sync lock object</summary>
25367 </member>
25368 <member name="F:OpenMetaverse.GridManager.m_GridItems">
25369 <summary>The event subscribers. null if no subcribers</summary>
25370 </member>
25371 <member name="M:OpenMetaverse.GridManager.OnGridItems(OpenMetaverse.GridItemsEventArgs)">
25372 <summary>Raises the GridItems event</summary>
25373 <param name="e">A GridItemEventArgs object containing the
25374 data sent by simulator</param>
25375 </member>
25376 <member name="F:OpenMetaverse.GridManager.m_GridItemsLock">
25377 <summary>Thread sync lock object</summary>
25378 </member>
25379 <member name="F:OpenMetaverse.GridManager.m_RegionHandleReply">
25380 <summary>The event subscribers. null if no subcribers</summary>
25381 </member>
25382 <member name="M:OpenMetaverse.GridManager.OnRegionHandleReply(OpenMetaverse.RegionHandleReplyEventArgs)">
25383 <summary>Raises the RegionHandleReply event</summary>
25384 <param name="e">A RegionHandleReplyEventArgs object containing the
25385 data sent by simulator</param>
25386 </member>
25387 <member name="F:OpenMetaverse.GridManager.m_RegionHandleReplyLock">
25388 <summary>Thread sync lock object</summary>
25389 </member>
25390 <member name="F:OpenMetaverse.GridManager.Regions">
25391 <summary>A dictionary of all the regions, indexed by region name</summary>
25392 </member>
25393 <member name="F:OpenMetaverse.GridManager.RegionsByHandle">
25394 <summary>A dictionary of all the regions, indexed by region handle</summary>
25395 </member>
25396 <member name="M:OpenMetaverse.GridManager.#ctor(OpenMetaverse.GridClient)">
25833 <summary> 25397 <summary>
25398 Constructor
25834 </summary> 25399 </summary>
25400 <param name="client">Instance of GridClient object to associate with this GridManager instance</param>
25835 </member> 25401 </member>
25836 <member name="F:OpenMetaverse.MappingType.Spherical"> 25402 <member name="M:OpenMetaverse.GridManager.RequestMapLayer(OpenMetaverse.GridLayerType)">
25837 <summary> 25403 <summary>
25404
25838 </summary> 25405 </summary>
25406 <param name="layer"></param>
25839 </member> 25407 </member>
25840 <member name="F:OpenMetaverse.MappingType.Cylindrical"> 25408 <member name="M:OpenMetaverse.GridManager.RequestMapRegion(System.String,OpenMetaverse.GridLayerType)">
25841 <summary> 25409 <summary>
25410 Request a map layer
25842 </summary> 25411 </summary>
25412 <param name="regionName">The name of the region</param>
25413 <param name="layer">The type of layer</param>
25843 </member> 25414 </member>
25844 <member name="T:OpenMetaverse.TextureAttributes"> 25415 <member name="M:OpenMetaverse.GridManager.RequestMapBlocks(OpenMetaverse.GridLayerType,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.Boolean)">
25845 <summary> 25416 <summary>
25846 Flags in the TextureEntry block that describe which properties are 25417
25847 set
25848 </summary> 25418 </summary>
25419 <param name="layer"></param>
25420 <param name="minX"></param>
25421 <param name="minY"></param>
25422 <param name="maxX"></param>
25423 <param name="maxY"></param>
25424 <param name="returnNonExistent"></param>
25849 </member> 25425 </member>
25850 <member name="F:OpenMetaverse.TextureAttributes.None"> 25426 <member name="M:OpenMetaverse.GridManager.MapItems(System.UInt64,OpenMetaverse.GridItemType,OpenMetaverse.GridLayerType,System.Int32)">
25851 <summary> 25427 <summary>
25428
25852 </summary> 25429 </summary>
25430 <param name="regionHandle"></param>
25431 <param name="item"></param>
25432 <param name="layer"></param>
25433 <param name="timeoutMS"></param>
25434 <returns></returns>
25853 </member> 25435 </member>
25854 <member name="F:OpenMetaverse.TextureAttributes.TextureID"> 25436 <member name="M:OpenMetaverse.GridManager.RequestMapItems(System.UInt64,OpenMetaverse.GridItemType,OpenMetaverse.GridLayerType)">
25855 <summary> 25437 <summary>
25438
25856 </summary> 25439 </summary>
25440 <param name="regionHandle"></param>
25441 <param name="item"></param>
25442 <param name="layer"></param>
25857 </member> 25443 </member>
25858 <member name="F:OpenMetaverse.TextureAttributes.RGBA"> 25444 <member name="M:OpenMetaverse.GridManager.RequestMainlandSims(OpenMetaverse.GridLayerType)">
25859 <summary> 25445 <summary>
25446 Request data for all mainland (Linden managed) simulators
25860 </summary> 25447 </summary>
25861 </member> 25448 </member>
25862 <member name="F:OpenMetaverse.TextureAttributes.RepeatU"> 25449 <member name="M:OpenMetaverse.GridManager.RequestRegionHandle(OpenMetaverse.UUID)">
25863 <summary> 25450 <summary>
25451 Request the region handle for the specified region UUID
25864 </summary> 25452 </summary>
25453 <param name="regionID">UUID of the region to look up</param>
25865 </member> 25454 </member>
25866 <member name="F:OpenMetaverse.TextureAttributes.RepeatV"> 25455 <member name="M:OpenMetaverse.GridManager.GetGridRegion(System.String,OpenMetaverse.GridLayerType,OpenMetaverse.GridRegion@)">
25867 <summary> 25456 <summary>
25457 Get grid region information using the region name, this function
25458 will block until it can find the region or gives up
25868 </summary> 25459 </summary>
25460 <param name="name">Name of sim you're looking for</param>
25461 <param name="layer">Layer that you are requesting</param>
25462 <param name="region">Will contain a GridRegion for the sim you're
25463 looking for if successful, otherwise an empty structure</param>
25464 <returns>True if the GridRegion was successfully fetched, otherwise
25465 false</returns>
25869 </member> 25466 </member>
25870 <member name="F:OpenMetaverse.TextureAttributes.OffsetU"> 25467 <member name="M:OpenMetaverse.GridManager.MapBlockReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25468 <summary>Process an incoming packet and raise the appropriate events</summary>
25469 <param name="sender">The sender</param>
25470 <param name="e">The EventArgs object containing the packet data</param>
25471 </member>
25472 <member name="M:OpenMetaverse.GridManager.MapItemReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25473 <summary>Process an incoming packet and raise the appropriate events</summary>
25474 <param name="sender">The sender</param>
25475 <param name="e">The EventArgs object containing the packet data</param>
25476 </member>
25477 <member name="M:OpenMetaverse.GridManager.SimulatorViewerTimeMessageHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25478 <summary>Process an incoming packet and raise the appropriate events</summary>
25479 <param name="sender">The sender</param>
25480 <param name="e">The EventArgs object containing the packet data</param>
25481 </member>
25482 <member name="M:OpenMetaverse.GridManager.CoarseLocationHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25483 <summary>Process an incoming packet and raise the appropriate events</summary>
25484 <param name="sender">The sender</param>
25485 <param name="e">The EventArgs object containing the packet data</param>
25486 </member>
25487 <member name="M:OpenMetaverse.GridManager.RegionHandleReplyHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25488 <summary>Process an incoming packet and raise the appropriate events</summary>
25489 <param name="sender">The sender</param>
25490 <param name="e">The EventArgs object containing the packet data</param>
25491 </member>
25492 <member name="E:OpenMetaverse.GridManager.CoarseLocationUpdate">
25493 <summary>Raised when the simulator sends a <see cref="T:OpenMetaverse.Packets.CoarseLocationUpdatePacket"/>
25494 containing the location of agents in the simulator</summary>
25495 </member>
25496 <member name="E:OpenMetaverse.GridManager.GridRegion">
25497 <summary>Raised when the simulator sends a Region Data in response to
25498 a Map request</summary>
25499 </member>
25500 <member name="E:OpenMetaverse.GridManager.GridLayer">
25501 <summary>Raised when the simulator sends GridLayer object containing
25502 a map tile coordinates and texture information</summary>
25503 </member>
25504 <member name="E:OpenMetaverse.GridManager.GridItems">
25505 <summary>Raised when the simulator sends GridItems object containing
25506 details on events, land sales at a specific location</summary>
25507 </member>
25508 <member name="E:OpenMetaverse.GridManager.RegionHandleReply">
25509 <summary>Raised in response to a Region lookup</summary>
25510 </member>
25511 <member name="P:OpenMetaverse.GridManager.SunPhase">
25512 <summary>Unknown</summary>
25513 </member>
25514 <member name="P:OpenMetaverse.GridManager.SunDirection">
25515 <summary>Current direction of the sun</summary>
25516 </member>
25517 <member name="P:OpenMetaverse.GridManager.SunAngVelocity">
25518 <summary>Current angular velocity of the sun</summary>
25519 </member>
25520 <member name="P:OpenMetaverse.GridManager.TimeOfDay">
25521 <summary>Microseconds since the start of SL 4-hour day</summary>
25522 </member>
25523 <member name="M:OpenMetaverse.CoordinateFrame.LookDirection(OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
25871 <summary> 25524 <summary>
25525
25872 </summary> 25526 </summary>
25527 <param name="at">Looking direction, must be a normalized vector</param>
25528 <param name="upDirection">Up direction, must be a normalized vector</param>
25873 </member> 25529 </member>
25874 <member name="F:OpenMetaverse.TextureAttributes.OffsetV"> 25530 <member name="M:OpenMetaverse.CoordinateFrame.LookDirection(System.Double)">
25875 <summary> 25531 <summary>
25532 Align the coordinate frame X and Y axis with a given rotation
25533 around the Z axis in radians
25876 </summary> 25534 </summary>
25535 <param name="heading">Absolute rotation around the Z axis in
25536 radians</param>
25877 </member> 25537 </member>
25878 <member name="F:OpenMetaverse.TextureAttributes.Rotation"> 25538 <member name="P:OpenMetaverse.CoordinateFrame.Origin">
25539 <summary>Origin position of this coordinate frame</summary>
25540 </member>
25541 <member name="P:OpenMetaverse.CoordinateFrame.XAxis">
25542 <summary>X axis of this coordinate frame, or Forward/At in grid terms</summary>
25543 </member>
25544 <member name="P:OpenMetaverse.CoordinateFrame.YAxis">
25545 <summary>Y axis of this coordinate frame, or Left in grid terms</summary>
25546 </member>
25547 <member name="P:OpenMetaverse.CoordinateFrame.ZAxis">
25548 <summary>Z axis of this coordinate frame, or Up in grid terms</summary>
25549 </member>
25550 <member name="T:OpenMetaverse.Assets.AssetTexture">
25879 <summary> 25551 <summary>
25552 Represents a texture
25880 </summary> 25553 </summary>
25881 </member> 25554 </member>
25882 <member name="F:OpenMetaverse.TextureAttributes.Material"> 25555 <member name="F:OpenMetaverse.Assets.AssetTexture.Image">
25556 <summary>A <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object containing image data</summary>
25557 </member>
25558 <member name="F:OpenMetaverse.Assets.AssetTexture.LayerInfo">
25559 <summary></summary>
25560 </member>
25561 <member name="F:OpenMetaverse.Assets.AssetTexture.Components">
25562 <summary></summary>
25563 </member>
25564 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor">
25565 <summary>Initializes a new instance of an AssetTexture object</summary>
25566 </member>
25567 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor(OpenMetaverse.UUID,System.Byte[])">
25883 <summary> 25568 <summary>
25569 Initializes a new instance of an AssetTexture object
25884 </summary> 25570 </summary>
25571 <param name="assetID">A unique <see cref="T:OpenMetaverse.UUID"/> specific to this asset</param>
25572 <param name="assetData">A byte array containing the raw asset data</param>
25885 </member> 25573 </member>
25886 <member name="F:OpenMetaverse.TextureAttributes.Media"> 25574 <member name="M:OpenMetaverse.Assets.AssetTexture.#ctor(OpenMetaverse.Imaging.ManagedImage)">
25887 <summary> 25575 <summary>
25576 Initializes a new instance of an AssetTexture object
25888 </summary> 25577 </summary>
25578 <param name="image">A <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object containing texture data</param>
25889 </member> 25579 </member>
25890 <member name="F:OpenMetaverse.TextureAttributes.Glow"> 25580 <member name="M:OpenMetaverse.Assets.AssetTexture.Encode">
25891 <summary> 25581 <summary>
25582 Populates the <seealso cref="!:AssetData"/> byte array with a JPEG2000
25583 encoded image created from the data in <seealso cref="F:OpenMetaverse.Assets.AssetTexture.Image"/>
25892 </summary> 25584 </summary>
25893 </member> 25585 </member>
25894 <member name="F:OpenMetaverse.TextureAttributes.All"> 25586 <member name="M:OpenMetaverse.Assets.AssetTexture.Decode">
25895 <summary> 25587 <summary>
25588 Decodes the JPEG2000 data in <code>AssetData</code> to the
25589 <seealso cref="T:OpenMetaverse.Imaging.ManagedImage"/> object <seealso cref="F:OpenMetaverse.Assets.AssetTexture.Image"/>
25896 </summary> 25590 </summary>
25591 <returns>True if the decoding was successful, otherwise false</returns>
25897 </member> 25592 </member>
25898 <member name="T:OpenMetaverse.Rendering.LindenMesh.LODMesh"> 25593 <member name="M:OpenMetaverse.Assets.AssetTexture.DecodeLayerBoundaries">
25899 <summary> 25594 <summary>
25900 Level of Detail mesh 25595 Decodes the begin and end byte positions for each quality layer in
25596 the image
25901 </summary> 25597 </summary>
25598 <returns></returns>
25902 </member> 25599 </member>
25903 <member name="T:OpenMetaverse.Rendering.FacetedMesh"> 25600 <member name="P:OpenMetaverse.Assets.AssetTexture.AssetType">
25601 <summary>Override the base classes AssetType</summary>
25602 </member>
25603 <member name="T:OpenMetaverse.Settings">
25904 <summary> 25604 <summary>
25905 Contains all mesh faces that belong to a prim 25605 Class for controlling various system settings.
25906 </summary> 25606 </summary>
25607 <remarks>Some values are readonly because they affect things that
25608 happen when the GridClient object is initialized, so changing them at
25609 runtime won't do any good. Non-readonly values may affect things that
25610 happen at login or dynamically</remarks>
25907 </member> 25611 </member>
25908 <member name="F:OpenMetaverse.Rendering.FacetedMesh.Faces"> 25612 <member name="F:OpenMetaverse.Settings.AGNI_LOGIN_SERVER">
25909 <summary>List of primitive faces</summary> 25613 <summary>Main grid login server</summary>
25910 </member> 25614 </member>
25911 <member name="M:OpenMetaverse.Rendering.FacetedMesh.TryDecodeFromAsset(OpenMetaverse.Primitive,OpenMetaverse.Assets.AssetMesh,OpenMetaverse.Rendering.DetailLevel,OpenMetaverse.Rendering.FacetedMesh@)"> 25615 <member name="F:OpenMetaverse.Settings.ADITI_LOGIN_SERVER">
25616 <summary>Beta grid login server</summary>
25617 </member>
25618 <member name="F:OpenMetaverse.Settings.ENABLE_INVENTORY_STORE">
25912 <summary> 25619 <summary>
25913 Decodes mesh asset into FacetedMesh 25620 InventoryManager requests inventory information on login,
25621 GridClient initializes an Inventory store for main inventory.
25914 </summary> 25622 </summary>
25915 <param name="prim">Mesh primitive</param>
25916 <param name="meshAsset">Asset retrieved from the asset server</param>
25917 <param name="LOD">Level of detail</param>
25918 <param name="mesh">Resulting decoded FacetedMesh</param>
25919 <returns>True if mesh asset decoding was successful</returns>
25920 </member> 25623 </member>
25921 <member name="M:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.#ctor"> 25624 <member name="F:OpenMetaverse.Settings.ENABLE_LIBRARY_STORE">
25922 <summary> 25625 <summary>
25923 Constructor for default logging settings 25626 InventoryManager requests library information on login,
25627 GridClient initializes an Inventory store for the library.
25924 </summary> 25628 </summary>
25925 </member> 25629 </member>
25926 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.Enabled"> 25630 <member name="F:OpenMetaverse.Settings.PING_INTERVAL">
25927 <summary>Enable logging</summary> 25631 <summary>Number of milliseconds between sending pings to each sim</summary>
25928 </member> 25632 </member>
25929 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.Folder"> 25633 <member name="F:OpenMetaverse.Settings.DEFAULT_AGENT_UPDATE_INTERVAL">
25930 <summary>The folder where any logs will be created</summary> 25634 <summary>Number of milliseconds between sending camera updates</summary>
25931 </member> 25635 </member>
25932 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.FileNamePrefix"> 25636 <member name="F:OpenMetaverse.Settings.INTERPOLATION_INTERVAL">
25933 <summary>This will be prepended to beginning of each log file</summary> 25637 <summary>Number of milliseconds between updating the current
25638 positions of moving, non-accelerating and non-colliding objects</summary>
25934 </member> 25639 </member>
25935 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.FileNameSuffix"> 25640 <member name="F:OpenMetaverse.Settings.NETWORK_TICK_INTERVAL">
25936 <summary>The suffix or extension to be appended to each log file</summary> 25641 <summary>Millisecond interval between ticks, where all ACKs are
25642 sent out and the age of unACKed packets is checked</summary>
25937 </member> 25643 </member>
25938 <member name="F:OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings.LogLevel"> 25644 <member name="F:OpenMetaverse.Settings.PACKET_INBOX_SIZE">
25939 <summary> 25645 <summary>The initial size of the packet inbox, where packets are
25940 0: NONE - No logging 25646 stored before processing</summary>
25941 1: ERROR - Log errors only
25942 2: WARNING - Log errors and warnings
25943 3: INFO - Log errors, warnings and info
25944 4: DEBUG - Log errors, warnings, info and debug
25945 </summary>
25946 </member> 25647 </member>
25947 <member name="T:OpenMetaverse.Voice.VoiceGateway.AudioPropertiesEventArgs"> 25648 <member name="F:OpenMetaverse.Settings.MAX_PACKET_SIZE">
25948 Audio Properties Events are sent after audio capture is started. These events are used to display a microphone VU meter</member> 25649 <summary>Maximum size of packet that we want to send over the wire</summary>
25949 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnVoiceResponse"> 25650 </member>
25651 <member name="F:OpenMetaverse.Settings.MAX_SEQUENCE">
25652 <summary>The maximum value of a packet sequence number before it
25653 rolls over back to one</summary>
25654 </member>
25655 <member name="F:OpenMetaverse.Settings.RESOURCE_DIR">
25656 <summary>The relative directory where external resources are kept</summary>
25657 </member>
25658 <member name="F:OpenMetaverse.Settings.LOGIN_SERVER">
25659 <summary>Login server to connect to</summary>
25660 </member>
25661 <member name="F:OpenMetaverse.Settings.BIND_ADDR">
25662 <summary>IP Address the client will bind to</summary>
25663 </member>
25664 <member name="F:OpenMetaverse.Settings.USE_LLSD_LOGIN">
25665 <summary>Use XML-RPC Login or LLSD Login, default is XML-RPC Login</summary>
25666 </member>
25667 <member name="F:OpenMetaverse.Settings.HTTP_INVENTORY">
25950 <summary> 25668 <summary>
25951 Event for most mundane request reposnses. 25669 Use Caps for fetching inventory where available
25952 </summary> 25670 </summary>
25953 </member> 25671 </member>
25954 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnConnectorCreateResponse"> 25672 <member name="F:OpenMetaverse.Settings.TRANSFER_TIMEOUT">
25955 <summary>Response to Connector.Create request</summary> 25673 <summary>Number of milliseconds before an asset transfer will time
25674 out</summary>
25956 </member> 25675 </member>
25957 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxGetCaptureDevicesResponse"> 25676 <member name="F:OpenMetaverse.Settings.TELEPORT_TIMEOUT">
25958 <summary>Response to Aux.GetCaptureDevices request</summary> 25677 <summary>Number of milliseconds before a teleport attempt will time
25678 out</summary>
25959 </member> 25679 </member>
25960 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxGetRenderDevicesResponse"> 25680 <member name="F:OpenMetaverse.Settings.LOGOUT_TIMEOUT">
25961 <summary>Response to Aux.GetRenderDevices request</summary> 25681 <summary>Number of milliseconds before NetworkManager.Logout() will
25682 time out</summary>
25962 </member> 25683 </member>
25963 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAuxAudioPropertiesEvent"> 25684 <member name="F:OpenMetaverse.Settings.CAPS_TIMEOUT">
25964 <summary>Audio Properties Events are sent after audio capture is started. 25685 <summary>Number of milliseconds before a CAPS call will time out</summary>
25965 These events are used to display a microphone VU meter</summary> 25686 <remarks>Setting this too low will cause web requests time out and
25687 possibly retry repeatedly</remarks>
25966 </member> 25688 </member>
25967 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAccountLoginResponse"> 25689 <member name="F:OpenMetaverse.Settings.LOGIN_TIMEOUT">
25968 <summary>Response to Account.Login request</summary> 25690 <summary>Number of milliseconds for xml-rpc to timeout</summary>
25969 </member> 25691 </member>
25970 <member name="E:OpenMetaverse.Voice.VoiceGateway.OnAccountLoginStateChangeEvent"> 25692 <member name="F:OpenMetaverse.Settings.RESEND_TIMEOUT">
25971 <summary>This event message is sent whenever the login state of the 25693 <summary>Milliseconds before a packet is assumed lost and resent</summary>
25972 particular Account has transitioned from one value to another</summary>
25973 </member> 25694 </member>
25974 <member name="P:OpenMetaverse.Voice.VoiceGateway.CaptureDevices"> 25695 <member name="F:OpenMetaverse.Settings.SIMULATOR_TIMEOUT">
25975 <summary> 25696 <summary>Milliseconds without receiving a packet before the
25976 List of audio input devices 25697 connection to a simulator is assumed lost</summary>
25977 </summary>
25978 </member> 25698 </member>
25979 <member name="P:OpenMetaverse.Voice.VoiceGateway.PlaybackDevices"> 25699 <member name="F:OpenMetaverse.Settings.MAP_REQUEST_TIMEOUT">
25980 <summary> 25700 <summary>Milliseconds to wait for a simulator info request through
25981 List of audio output devices 25701 the grid interface</summary>
25982 </summary>
25983 </member> 25702 </member>
25984 <member name="P:OpenMetaverse.Voice.VoiceGateway.TestMode"> 25703 <member name="F:OpenMetaverse.Settings.PACKET_ARCHIVE_SIZE">
25985 <summary> 25704 <summary>The maximum size of the sequence number archive, used to
25986 Set audio test mode 25705 check for resent and/or duplicate packets</summary>
25987 </summary>
25988 </member> 25706 </member>
25989 <member name="M:OpenMetaverse.Voice.VoiceGateway.AccountLogin(System.String,System.String,System.String,System.String,System.String,System.Int32,System.Boolean)"> 25707 <member name="F:OpenMetaverse.Settings.MAX_PENDING_ACKS">
25990 <summary> 25708 <summary>Maximum number of queued ACKs to be sent before SendAcks()
25991 This is used to login a specific user account(s). It may only be called after 25709 is forced</summary>
25992 Connector initialization has completed successfully
25993 </summary>
25994 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param>
25995 <param name="AccountName">User's account name</param>
25996 <param name="AccountPassword">User's account password</param>
25997 <param name="AudioSessionAnswerMode">Values may be �AutoAnswer� or �VerifyAnswer�</param>
25998 <param name="AccountURI">""</param>
25999 <param name="ParticipantPropertyFrequency">This is an integer that specifies how often
26000 the daemon will send participant property events while in a channel. If this is not set
26001 the default will be �on state change�, which means that the events will be sent when
26002 the participant starts talking, stops talking, is muted, is unmuted.
26003 The valid values are:
26004 0 � Never
26005 5 � 10 times per second
26006 10 � 5 times per second
26007 50 � 1 time per second
26008 100 � on participant state change (this is the default)</param>
26009 <param name="EnableBuddiesAndPresence">false</param>
26010 <returns>
26011 </returns>
26012 </member> 25710 </member>
26013 <member name="M:OpenMetaverse.Voice.VoiceGateway.AccountLogout(System.String)"> 25711 <member name="F:OpenMetaverse.Settings.STATS_QUEUE_SIZE">
26014 <summary> 25712 <summary>Network stats queue length (seconds)</summary>
26015 This is used to logout a user session. It should only be called with a valid AccountHandle.
26016 </summary>
26017 <param name="AccountHandle">Handle returned from successful Connector �login� request</param>
26018 <returns>
26019 </returns>
26020 </member> 25713 </member>
26021 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxGetCaptureDevices"> 25714 <member name="F:OpenMetaverse.Settings.CACHE_PRIMITIVES">
26022 <summary> 25715 <summary>
26023 This is used to get a list of audio devices that can be used for capture (input) of voice. 25716 Primitives will be reused when falling in/out of interest list (and shared between clients)
25717 prims returning to interest list do not need re-requested
25718 Helps also in not re-requesting prim.Properties for code that checks for a Properties == null per client
26024 </summary> 25719 </summary>
26025 <returns>
26026 </returns>
26027 </member> 25720 </member>
26028 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxGetRenderDevices"> 25721 <member name="F:OpenMetaverse.Settings.POOL_PARCEL_DATA">
26029 <summary> 25722 <summary>
26030 This is used to get a list of audio devices that can be used for render (playback) of voice. 25723 Pool parcel data between clients (saves on requesting multiple times when all clients may need it)
26031 </summary> 25724 </summary>
26032 </member> 25725 </member>
26033 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetRenderDevice(System.String)"> 25726 <member name="F:OpenMetaverse.Settings.SIMULATOR_POOL_TIMEOUT">
26034 <summary> 25727 <summary>
26035 This command is used to select the render device. 25728 How long to preserve cached data when no client is connected to a simulator
25729 The reason for setting it to something like 2 minutes is in case a client
25730 is running back and forth between region edges or a sim is comming and going
26036 </summary> 25731 </summary>
26037 <param name="RenderDeviceSpecifier">The name of the device as returned by the Aux.GetRenderDevices command.</param>
26038 </member> 25732 </member>
26039 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetCaptureDevice(System.String)"> 25733 <member name="F:OpenMetaverse.Settings.STORE_LAND_PATCHES">
26040 <summary> 25734 <summary>Enable/disable storing terrain heightmaps in the
26041 This command is used to select the capture device. 25735 TerrainManager</summary>
26042 </summary>
26043 <param name="CaptureDeviceSpecifier">The name of the device as returned by the Aux.GetCaptureDevices command.</param>
26044 </member> 25736 </member>
26045 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxCaptureAudioStart(System.Int32)"> 25737 <member name="F:OpenMetaverse.Settings.SEND_AGENT_UPDATES">
26046 <summary> 25738 <summary>Enable/disable sending periodic camera updates</summary>
26047 This command is used to start the audio capture process which will cause
26048 AuxAudioProperty Events to be raised. These events can be used to display a
26049 microphone VU meter for the currently selected capture device. This command
26050 should not be issued if the user is on a call.
26051 </summary>
26052 <param name="Duration">(unused but required)</param>
26053 <returns>
26054 </returns>
26055 </member> 25739 </member>
26056 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxCaptureAudioStop"> 25740 <member name="F:OpenMetaverse.Settings.SEND_AGENT_APPEARANCE">
26057 <summary> 25741 <summary>Enable/disable automatically setting agent appearance at
26058 This command is used to stop the audio capture process. 25742 login and after sim crossing</summary>
26059 </summary>
26060 <returns>
26061 </returns>
26062 </member> 25743 </member>
26063 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetMicLevel(System.Int32)"> 25744 <member name="F:OpenMetaverse.Settings.SEND_AGENT_THROTTLE">
26064 <summary> 25745 <summary>Enable/disable automatically setting the bandwidth throttle
26065 This command is used to set the mic volume while in the audio tuning process. 25746 after connecting to each simulator</summary>
26066 Once an acceptable mic level is attained, the application must issue a 25747 <remarks>The default throttle uses the equivalent of the maximum
26067 connector set mic volume command to have that level be used while on voice 25748 bandwidth setting in the official client. If you do not set a
26068 calls. 25749 throttle your connection will by default be throttled well below
26069 </summary> 25750 the minimum values and you may experience connection problems</remarks>
26070 <param name="Level">the microphone volume (-100 to 100 inclusive)</param>
26071 <returns>
26072 </returns>
26073 </member> 25751 </member>
26074 <member name="M:OpenMetaverse.Voice.VoiceGateway.AuxSetSpeakerLevel(System.Int32)"> 25752 <member name="F:OpenMetaverse.Settings.SEND_PINGS">
26075 <summary> 25753 <summary>Enable/disable the sending of pings to monitor lag and
26076 This command is used to set the speaker volume while in the audio tuning 25754 packet loss</summary>
26077 process. Once an acceptable speaker level is attained, the application must
26078 issue a connector set speaker volume command to have that level be used while
26079 on voice calls.
26080 </summary>
26081 <param name="Level">the speaker volume (-100 to 100 inclusive)</param>
26082 <returns>
26083 </returns>
26084 </member> 25755 </member>
26085 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorCreate(System.String,System.String,System.UInt16,System.UInt16,OpenMetaverse.Voice.VoiceGateway.VoiceLoggingSettings)"> 25756 <member name="F:OpenMetaverse.Settings.MULTIPLE_SIMS">
26086 <summary> 25757 <summary>Should we connect to multiple sims? This will allow
26087 This is used to initialize and stop the Connector as a whole. The Connector 25758 viewing in to neighboring simulators and sim crossings
26088 Create call must be completed successfully before any other requests are made 25759 (Experimental)</summary>
26089 (typically during application initialization). The shutdown should be called
26090 when the application is shutting down to gracefully release resources
26091 </summary>
26092 <param name="ClientName">A string value indicting the Application name</param>
26093 <param name="AccountManagementServer">URL for the management server</param>
26094 <param name="Logging">LoggingSettings</param>
26095 <param name="MaximumPort">
26096 </param>
26097 <param name="MinimumPort">
26098 </param>
26099 </member> 25760 </member>
26100 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorInitiateShutdown(System.String)"> 25761 <member name="F:OpenMetaverse.Settings.ALWAYS_DECODE_OBJECTS">
26101 <summary> 25762 <summary>If true, all object update packets will be decoded in to
26102 Shutdown Connector -- Should be called when the application is shutting down 25763 native objects. If false, only updates for our own agent will be
26103 to gracefully release resources 25764 decoded. Registering an event handler will force objects for that
26104 </summary> 25765 type to always be decoded. If this is disabled the object tracking
26105 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param> 25766 will have missing or partial prim and avatar information</summary>
26106 </member> 25767 </member>
26107 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorMuteLocalMic(System.String,System.Boolean)"> 25768 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_OBJECTS">
26108 <summary> 25769 <summary>If true, when a cached object check is received from the
26109 Mute or unmute the microphone 25770 server the full object info will automatically be requested</summary>
26110 </summary>
26111 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param>
26112 <param name="Mute">true (mute) or false (unmute)</param>
26113 </member> 25771 </member>
26114 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorMuteLocalSpeaker(System.String,System.Boolean)"> 25772 <member name="F:OpenMetaverse.Settings.ENABLE_CAPS">
26115 <summary> 25773 <summary>Whether to establish connections to HTTP capabilities
26116 Mute or unmute the speaker 25774 servers for simulators</summary>
26117 </summary>
26118 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param>
26119 <param name="Mute">true (mute) or false (unmute)</param>
26120 </member> 25775 </member>
26121 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorSetLocalMicVolume(System.String,System.Int32)"> 25776 <member name="F:OpenMetaverse.Settings.ENABLE_SIMSTATS">
26122 <summary> 25777 <summary>Whether to decode sim stats</summary>
26123 Set microphone volume
26124 </summary>
26125 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param>
26126 <param name="Value">The level of the audio, a number between -100 and 100 where
26127 0 represents �normal� speaking volume</param>
26128 </member> 25778 </member>
26129 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectorSetLocalSpeakerVolume(System.String,System.Int32)"> 25779 <member name="F:OpenMetaverse.Settings.LOG_ALL_CAPS_ERRORS">
26130 <summary> 25780 <summary>The capabilities servers are currently designed to
26131 Set local speaker volume 25781 periodically return a 502 error which signals for the client to
26132 </summary> 25782 re-establish a connection. Set this to true to log those 502 errors</summary>
26133 <param name="ConnectorHandle">Handle returned from successful Connector �create� request</param>
26134 <param name="Value">The level of the audio, a number between -100 and 100 where
26135 0 represents �normal� speaking volume</param>
26136 </member> 25783 </member>
26137 <member name="M:OpenMetaverse.Voice.VoiceGateway.Start"> 25784 <member name="F:OpenMetaverse.Settings.FETCH_MISSING_INVENTORY">
26138 <summary> 25785 <summary>If true, any reference received for a folder or item
26139 Start up the Voice service. 25786 the library is not aware of will automatically be fetched</summary>
26140 </summary>
26141 </member> 25787 </member>
26142 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnVoiceResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceResponseEventArgs)"> 25788 <member name="F:OpenMetaverse.Settings.DISABLE_AGENT_UPDATE_DUPLICATE_CHECK">
26143 <summary> 25789 <summary>If true, and <code>SEND_AGENT_UPDATES</code> is true,
26144 Handle miscellaneous request status 25790 AgentUpdate packets will continuously be sent out to give the bot
26145 </summary> 25791 smoother movement and autopiloting</summary>
26146 <param name="sender"> 25792 </member>
26147 </param> 25793 <member name="F:OpenMetaverse.Settings.AVATAR_TRACKING">
26148 <param name="e"> 25794 <summary>If true, currently visible avatars will be stored
26149 </param> 25795 in dictionaries inside <code>Simulator.ObjectAvatars</code>.
26150 ///<remarks>If something goes wrong, we log it.</remarks></member> 25796 If false, a new Avatar or Primitive object will be created
26151 <member name="M:OpenMetaverse.Voice.VoiceGateway.Dispose"> 25797 each time an object update packet is received</summary>
25798 </member>
25799 <member name="F:OpenMetaverse.Settings.OBJECT_TRACKING">
25800 <summary>If true, currently visible avatars will be stored
25801 in dictionaries inside <code>Simulator.ObjectPrimitives</code>.
25802 If false, a new Avatar or Primitive object will be created
25803 each time an object update packet is received</summary>
25804 </member>
25805 <member name="F:OpenMetaverse.Settings.USE_INTERPOLATION_TIMER">
25806 <summary>If true, position and velocity will periodically be
25807 interpolated (extrapolated, technically) for objects and
25808 avatars that are being tracked by the library. This is
25809 necessary to increase the accuracy of speed and position
25810 estimates for simulated objects</summary>
25811 </member>
25812 <member name="F:OpenMetaverse.Settings.TRACK_UTILIZATION">
26152 <summary> 25813 <summary>
26153 Cleanup oject resources 25814 If true, utilization statistics will be tracked. There is a minor penalty
25815 in CPU time for enabling this option.
26154 </summary> 25816 </summary>
26155 </member> 25817 </member>
26156 <member name="M:OpenMetaverse.Voice.VoiceGateway.Network_EventQueueRunning(System.Object,OpenMetaverse.EventQueueRunningEventArgs)"> 25818 <member name="F:OpenMetaverse.Settings.PARCEL_TRACKING">
25819 <summary>If true, parcel details will be stored in the
25820 <code>Simulator.Parcels</code> dictionary as they are received</summary>
25821 </member>
25822 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_PARCEL_ACL">
26157 <summary> 25823 <summary>
26158 Request voice cap when changing regions 25824 If true, an incoming parcel properties reply will automatically send
25825 a request for the parcel access list
26159 </summary> 25826 </summary>
26160 </member> 25827 </member>
26161 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnSessionStateChangeEvent(System.Object,OpenMetaverse.Voice.VoiceGateway.SessionStateChangeEventArgs)"> 25828 <member name="F:OpenMetaverse.Settings.ALWAYS_REQUEST_PARCEL_DWELL">
26162 <summary> 25829 <summary>
26163 Handle a change in session state 25830 if true, an incoming parcel properties reply will automatically send
25831 a request for the traffic count.
26164 </summary> 25832 </summary>
26165 </member> 25833 </member>
26166 <member name="M:OpenMetaverse.Voice.VoiceGateway.CloseSession(System.String)"> 25834 <member name="F:OpenMetaverse.Settings.USE_ASSET_CACHE">
26167 <summary> 25835 <summary>
26168 Close a voice session 25836 If true, images, and other assets downloaded from the server
25837 will be cached in a local directory
26169 </summary> 25838 </summary>
26170 <param name="sessionHandle">
26171 </param>
26172 </member> 25839 </member>
26173 <member name="M:OpenMetaverse.Voice.VoiceGateway.FindSession(System.String,System.Boolean)"> 25840 <member name="F:OpenMetaverse.Settings.ASSET_CACHE_DIR">
25841 <summary>Path to store cached texture data</summary>
25842 </member>
25843 <member name="F:OpenMetaverse.Settings.ASSET_CACHE_MAX_SIZE">
25844 <summary>Maximum size cached files are allowed to take on disk (bytes)</summary>
25845 </member>
25846 <member name="F:OpenMetaverse.Settings.DEFAULT_EFFECT_COLOR">
25847 <summary>Default color used for viewer particle effects</summary>
25848 </member>
25849 <member name="F:OpenMetaverse.Settings.MAX_RESEND_COUNT">
25850 <summary>Maximum number of times to resend a failed packet</summary>
25851 </member>
25852 <member name="F:OpenMetaverse.Settings.THROTTLE_OUTGOING_PACKETS">
25853 <summary>Throttle outgoing packet rate</summary>
25854 </member>
25855 <member name="F:OpenMetaverse.Settings.CLIENT_IDENTIFICATION_TAG">
25856 <summary>UUID of a texture used by some viewers to indentify type of client used</summary>
25857 </member>
25858 <member name="F:OpenMetaverse.Settings.USE_HTTP_TEXTURES">
26174 <summary> 25859 <summary>
26175 Locate a Session context from its handle 25860 Download textures using GetTexture capability when available
26176 </summary> 25861 </summary>
26177 <remarks>Creates the session context if it does not exist.</remarks>
26178 </member> 25862 </member>
26179 <member name="M:OpenMetaverse.Voice.VoiceGateway.cClient_OnComplete(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)"> 25863 <member name="F:OpenMetaverse.Settings.MAX_CONCURRENT_TEXTURE_DOWNLOADS">
25864 <summary>The maximum number of concurrent texture downloads allowed</summary>
25865 <remarks>Increasing this number will not necessarily increase texture retrieval times due to
25866 simulator throttles</remarks>
25867 </member>
25868 <member name="F:OpenMetaverse.Settings.PIPELINE_REFRESH_INTERVAL">
26180 <summary> 25869 <summary>
26181 Handle completion of main voice cap request. 25870 The Refresh timer inteval is used to set the delay between checks for stalled texture downloads
26182 </summary> 25871 </summary>
26183 <param name="client"> 25872 <remarks>This is a static variable which applies to all instances</remarks>
26184 </param>
26185 <param name="result">
26186 </param>
26187 <param name="error">
26188 </param>
26189 </member> 25873 </member>
26190 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnDaemonRunning"> 25874 <member name="F:OpenMetaverse.Settings.PIPELINE_REQUEST_TIMEOUT">
26191 <summary> 25875 <summary>
26192 Daemon has started so connect to it. 25876 Textures taking longer than this value will be flagged as timed out and removed from the pipeline
26193 </summary> 25877 </summary>
26194 </member> 25878 </member>
26195 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnDaemonConnected"> 25879 <member name="F:OpenMetaverse.Settings.LOG_LEVEL">
26196 <summary> 25880 <summary>
26197 The daemon TCP connection is open. 25881 Get or set the minimum log level to output to the console by default
25882
25883 If the library is not compiled with DEBUG defined and this level is set to DEBUG
25884 You will get no output on the console. This behavior can be overriden by creating
25885 a logger configuration file for log4net
26198 </summary> 25886 </summary>
26199 </member> 25887 </member>
26200 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnConnectorCreateResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceConnectorEventArgs)"> 25888 <member name="F:OpenMetaverse.Settings.LOG_NAMES">
25889 <summary>Attach avatar names to log messages</summary>
25890 </member>
25891 <member name="F:OpenMetaverse.Settings.LOG_RESENDS">
25892 <summary>Log packet retransmission info</summary>
25893 </member>
25894 <member name="F:OpenMetaverse.Settings.LOG_DISKCACHE">
25895 <summary>Log disk cache misses and other info</summary>
25896 </member>
25897 <member name="M:OpenMetaverse.Settings.#ctor(OpenMetaverse.GridClient)">
25898 <summary>Constructor</summary>
25899 <param name="client">Reference to a GridClient object</param>
25900 </member>
25901 <member name="M:OpenMetaverse.Settings.EconomyDataHandler(System.Object,OpenMetaverse.PacketReceivedEventArgs)">
25902 <summary>Process an incoming packet and raise the appropriate events</summary>
25903 <param name="sender">The sender</param>
25904 <param name="e">The EventArgs object containing the packet data</param>
25905 </member>
25906 <member name="P:OpenMetaverse.Settings.UPLOAD_COST">
25907 <summary>Cost of uploading an asset</summary>
25908 <remarks>Read-only since this value is dynamically fetched at login</remarks>
25909 </member>
25910 <member name="T:OpenMetaverse.GridClient">
26201 <summary> 25911 <summary>
26202 Handle creation of the Connector. 25912 Main class to expose grid functionality to clients. All of the
25913 classes needed for sending and receiving data are accessible through
25914 this class.
26203 </summary> 25915 </summary>
25916 <example>
25917 <code>
25918 // Example minimum code required to instantiate class and
25919 // connect to a simulator.
25920 using System;
25921 using System.Collections.Generic;
25922 using System.Text;
25923 using OpenMetaverse;
25924
25925 namespace FirstBot
25926 {
25927 class Bot
25928 {
25929 public static GridClient Client;
25930 static void Main(string[] args)
25931 {
25932 Client = new GridClient(); // instantiates the GridClient class
25933 // to the global Client object
25934 // Login to Simulator
25935 Client.Network.Login("FirstName", "LastName", "Password", "FirstBot", "1.0");
25936 // Wait for a Keypress
25937 Console.ReadLine();
25938 // Logout of simulator
25939 Client.Network.Logout();
25940 }
25941 }
25942 }
25943 </code>
25944 </example>
26204 </member> 25945 </member>
26205 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnAuxGetRenderDevicesResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceDevicesEventArgs)"> 25946 <member name="F:OpenMetaverse.GridClient.Network">
25947 <summary>Networking subsystem</summary>
25948 </member>
25949 <member name="F:OpenMetaverse.GridClient.Settings">
25950 <summary>Settings class including constant values and changeable
25951 parameters for everything</summary>
25952 </member>
25953 <member name="F:OpenMetaverse.GridClient.Parcels">
25954 <summary>Parcel (subdivided simulator lots) subsystem</summary>
25955 </member>
25956 <member name="F:OpenMetaverse.GridClient.Self">
25957 <summary>Our own avatars subsystem</summary>
25958 </member>
25959 <member name="F:OpenMetaverse.GridClient.Avatars">
25960 <summary>Other avatars subsystem</summary>
25961 </member>
25962 <member name="F:OpenMetaverse.GridClient.Estate">
25963 <summary>Estate subsystem</summary>
25964 </member>
25965 <member name="F:OpenMetaverse.GridClient.Friends">
25966 <summary>Friends list subsystem</summary>
25967 </member>
25968 <member name="F:OpenMetaverse.GridClient.Grid">
25969 <summary>Grid (aka simulator group) subsystem</summary>
25970 </member>
25971 <member name="F:OpenMetaverse.GridClient.Objects">
25972 <summary>Object subsystem</summary>
25973 </member>
25974 <member name="F:OpenMetaverse.GridClient.Groups">
25975 <summary>Group subsystem</summary>
25976 </member>
25977 <member name="F:OpenMetaverse.GridClient.Assets">
25978 <summary>Asset subsystem</summary>
25979 </member>
25980 <member name="F:OpenMetaverse.GridClient.Appearance">
25981 <summary>Appearance subsystem</summary>
25982 </member>
25983 <member name="F:OpenMetaverse.GridClient.Inventory">
25984 <summary>Inventory subsystem</summary>
25985 </member>
25986 <member name="F:OpenMetaverse.GridClient.Directory">
25987 <summary>Directory searches including classifieds, people, land
25988 sales, etc</summary>
25989 </member>
25990 <member name="F:OpenMetaverse.GridClient.Terrain">
25991 <summary>Handles land, wind, and cloud heightmaps</summary>
25992 </member>
25993 <member name="F:OpenMetaverse.GridClient.Sound">
25994 <summary>Handles sound-related networking</summary>
25995 </member>
25996 <member name="F:OpenMetaverse.GridClient.Throttle">
25997 <summary>Throttling total bandwidth usage, or allocating bandwidth
25998 for specific data stream types</summary>
25999 </member>
26000 <member name="M:OpenMetaverse.GridClient.#ctor">
26206 <summary> 26001 <summary>
26207 Handle response to audio output device query 26002 Default constructor
26208 </summary> 26003 </summary>
26209 </member> 26004 </member>
26210 <member name="M:OpenMetaverse.Voice.VoiceGateway.connector_OnAuxGetCaptureDevicesResponse(System.Object,OpenMetaverse.Voice.VoiceGateway.VoiceDevicesEventArgs)"> 26005 <member name="M:OpenMetaverse.GridClient.ToString">
26211 <summary> 26006 <summary>
26212 Handle response to audio input device query 26007 Return the full name of this instance
26213 </summary> 26008 </summary>
26009 <returns>Client avatars full name</returns>
26214 </member> 26010 </member>
26215 <member name="M:OpenMetaverse.Voice.VoiceGateway.ParcelChanged"> 26011 <member name="T:OpenMetaverse.AssetCache">
26216 <summary> 26012 <summary>
26217 Set voice channel for new parcel 26013 Class that handles the local asset cache
26218 </summary> 26014 </summary>
26219 </member> 26015 </member>
26220 <member name="M:OpenMetaverse.Voice.VoiceGateway.RequestParcelInfo(System.Uri)"> 26016 <member name="M:OpenMetaverse.AssetCache.#ctor(OpenMetaverse.GridClient)">
26221 <summary> 26017 <summary>
26222 Request info from a parcel capability Uri. 26018 Default constructor
26223 </summary> 26019 </summary>
26224 <param name="cap"> 26020 <param name="client">A reference to the GridClient object</param>
26225 </param>
26226 </member> 26021 </member>
26227 <member name="M:OpenMetaverse.Voice.VoiceGateway.pCap_OnComplete(OpenMetaverse.Http.CapsClient,OpenMetaverse.StructuredData.OSD,System.Exception)"> 26022 <member name="M:OpenMetaverse.AssetCache.DestroyTimer">
26228 <summary> 26023 <summary>
26229 Receive parcel voice cap 26024 Disposes cleanup timer
26230 </summary> 26025 </summary>
26231 <param name="client">
26232 </param>
26233 <param name="result">
26234 </param>
26235 <param name="error">
26236 </param>
26237 </member> 26026 </member>
26238 <member name="M:OpenMetaverse.Voice.VoiceGateway.UpdatePosition(OpenMetaverse.AgentManager)"> 26027 <member name="M:OpenMetaverse.AssetCache.SetupTimer">
26239 <summary> 26028 <summary>
26240 Tell Vivox where we are standing 26029 Only create timer when needed
26241 </summary> 26030 </summary>
26242 <remarks>This has to be called when we move or turn.</remarks>
26243 </member> 26031 </member>
26244 <member name="M:OpenMetaverse.Voice.VoiceGateway.PosUpdating(System.Boolean)"> 26032 <member name="M:OpenMetaverse.AssetCache.GetCachedAssetBytes(OpenMetaverse.UUID)">
26245 <summary> 26033 <summary>
26246 Start and stop updating out position. 26034 Return bytes read from the local asset cache, null if it does not exist
26247 </summary> 26035 </summary>
26248 <param name="go"> 26036 <param name="assetID">UUID of the asset we want to get</param>
26249 </param> 26037 <returns>Raw bytes of the asset, or null on failure</returns>
26250 </member> 26038 </member>
26251 <member name="M:OpenMetaverse.Voice.VoiceGateway.StartDaemon(System.String,System.String)"> 26039 <member name="M:OpenMetaverse.AssetCache.GetCachedImage(OpenMetaverse.UUID)">
26252 <summary> 26040 <summary>
26253 Starts a thread that keeps the daemon running 26041 Returns ImageDownload object of the
26042 image from the local image cache, null if it does not exist
26254 </summary> 26043 </summary>
26255 <param name="path"> 26044 <param name="imageID">UUID of the image we want to get</param>
26256 </param> 26045 <returns>ImageDownload object containing the image, or null on failure</returns>
26257 <param name="args">
26258 </param>
26259 </member> 26046 </member>
26260 <member name="M:OpenMetaverse.Voice.VoiceGateway.StopDaemon"> 26047 <member name="M:OpenMetaverse.AssetCache.FileName(OpenMetaverse.UUID)">
26261 <summary> 26048 <summary>
26262 Stops the daemon and the thread keeping it running 26049 Constructs a file name of the cached asset
26263 </summary> 26050 </summary>
26051 <param name="assetID">UUID of the asset</param>
26052 <returns>String with the file name of the cahced asset</returns>
26264 </member> 26053 </member>
26265 <member name="M:OpenMetaverse.Voice.VoiceGateway.ConnectToDaemon(System.String,System.Int32)"> 26054 <member name="M:OpenMetaverse.AssetCache.StaticFileName(OpenMetaverse.UUID)">
26266 <summary> 26055 <summary>
26056 Constructs a file name of the static cached asset
26267 </summary> 26057 </summary>
26268 <param name="address"> 26058 <param name="assetID">UUID of the asset</param>
26269 </param> 26059 <returns>String with the file name of the static cached asset</returns>
26270 <param name="port">
26271 </param>
26272 <returns>
26273 </returns>
26274 </member> 26060 </member>
26275 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionCreate(System.String,System.String,System.String,System.String,System.Boolean,System.Boolean,System.String)"> 26061 <member name="M:OpenMetaverse.AssetCache.SaveAssetToCache(OpenMetaverse.UUID,System.Byte[])">
26276 <summary> 26062 <summary>
26277 Create a Session 26063 Saves an asset to the local cache
26278 Sessions typically represent a connection to a media session with one or more
26279 participants. This is used to generate an �outbound� call to another user or
26280 channel. The specifics depend on the media types involved. A session handle is
26281 required to control the local user functions within the session (or remote
26282 users if the current account has rights to do so). Currently creating a
26283 session automatically connects to the audio media, there is no need to call
26284 Session.Connect at this time, this is reserved for future use.
26285 </summary> 26064 </summary>
26286 <param name="AccountHandle">Handle returned from successful Connector �create� request</param> 26065 <param name="assetID">UUID of the asset</param>
26287 <param name="URI">This is the URI of the terminating point of the session (ie who/what is being called)</param> 26066 <param name="assetData">Raw bytes the asset consists of</param>
26288 <param name="Name">This is the display name of the entity being called (user or channel)</param> 26067 <returns>Weather the operation was successfull</returns>
26289 <param name="Password">Only needs to be supplied when the target URI is password protected</param>
26290 <param name="PasswordHashAlgorithm">This indicates the format of the password as passed in. This can either be
26291 �ClearText� or �SHA1UserName�. If this element does not exist, it is assumed to be �ClearText�. If it is
26292 �SHA1UserName�, the password as passed in is the SHA1 hash of the password and username concatenated together,
26293 then base64 encoded, with the final �=� character stripped off.</param>
26294 <param name="JoinAudio">
26295 </param>
26296 <param name="JoinText">
26297 </param>
26298 <returns>
26299 </returns>
26300 </member> 26068 </member>
26301 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionConnect(System.String,System.String)"> 26069 <member name="M:OpenMetaverse.AssetCache.AssetFileName(OpenMetaverse.UUID)">
26302 <summary> 26070 <summary>
26303 Used to accept a call 26071 Get the file name of the asset stored with gived UUID
26304 </summary> 26072 </summary>
26305 <param name="SessionHandle">SessionHandle such as received from SessionNewEvent</param> 26073 <param name="assetID">UUID of the asset</param>
26306 <param name="AudioMedia">"default"</param> 26074 <returns>Null if we don't have that UUID cached on disk, file name if found in the cache folder</returns>
26307 <returns>
26308 </returns>
26309 </member> 26075 </member>
26310 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionRenderAudioStart(System.String,System.Boolean)"> 26076 <member name="M:OpenMetaverse.AssetCache.HasAsset(OpenMetaverse.UUID)">
26311 <summary> 26077 <summary>
26312 This command is used to start the audio render process, which will then play 26078 Checks if the asset exists in the local cache
26313 the passed in file through the selected audio render device. This command
26314 should not be issued if the user is on a call.
26315 </summary> 26079 </summary>
26316 <param name="SoundFilePath">The fully qualified path to the sound file.</param> 26080 <param name="assetID">UUID of the asset</param>
26317 <param name="Loop">True if the file is to be played continuously and false if it is should be played once.</param> 26081 <returns>True is the asset is stored in the cache, otherwise false</returns>
26318 <returns>
26319 </returns>
26320 </member> 26082 </member>
26321 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionRenderAudioStop(System.String)"> 26083 <member name="M:OpenMetaverse.AssetCache.Clear">
26322 <summary> 26084 <summary>
26323 This command is used to stop the audio render process. 26085 Wipes out entire cache
26324 </summary> 26086 </summary>
26325 <param name="SoundFilePath">The fully qualified path to the sound file issued in the start render command.</param>
26326 <returns>
26327 </returns>
26328 </member> 26087 </member>
26329 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionTerminate(System.String)"> 26088 <member name="M:OpenMetaverse.AssetCache.Prune">
26330 <summary> 26089 <summary>
26331 This is used to �end� an established session (i.e. hang-up or disconnect). 26090 Brings cache size to the 90% of the max size
26332 </summary> 26091 </summary>
26333 <param name="SessionHandle">Handle returned from successful Session �create� request or a SessionNewEvent</param>
26334 <returns>
26335 </returns>
26336 </member> 26092 </member>
26337 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionSet3DPosition(System.String,OpenMetaverse.Voice.VoicePosition,OpenMetaverse.Voice.VoicePosition)"> 26093 <member name="M:OpenMetaverse.AssetCache.BeginPrune">
26338 <summary> 26094 <summary>
26339 Set the combined speaking and listening position in 3D space. 26095 Asynchronously brings cache size to the 90% of the max size
26340 </summary> 26096 </summary>
26341 <param name="SessionHandle">Handle returned from successful Session �create� request or a SessionNewEvent</param>
26342 <param name="SpeakerPosition">Speaking position</param>
26343 <param name="ListenerPosition">Listening position</param>
26344 <returns>
26345 </returns>
26346 </member> 26097 </member>
26347 <member name="M:OpenMetaverse.Voice.VoiceGateway.SessionSetParticipantVolumeForMe(System.String,System.String,System.Int32)"> 26098 <member name="M:OpenMetaverse.AssetCache.GetFileSize(System.IO.FileInfo[])">
26348 <summary> 26099 <summary>
26349 Set User Volume for a particular user. Does not affect how other users hear that user. 26100 Adds up file sizes passes in a FileInfo array
26350 </summary> 26101 </summary>
26351 <param name="SessionHandle">Handle returned from successful Session �create� request or a SessionNewEvent</param>
26352 <param name="ParticipantURI">
26353 </param>
26354 <param name="Volume">The level of the audio, a number between -100 and 100 where 0 represents �normal� speaking volume</param>
26355 <returns>
26356 </returns>
26357 </member>
26358 <member name="F:OpenMetaverse.Voice.VoicePosition.Position">
26359 <summary>Positional vector of the users position</summary>
26360 </member>
26361 <member name="F:OpenMetaverse.Voice.VoicePosition.Velocity">
26362 <summary>Velocity vector of the position</summary>
26363 </member>
26364 <member name="F:OpenMetaverse.Voice.VoicePosition.AtOrientation">
26365 <summary>At Orientation (X axis) of the position</summary>
26366 </member>
26367 <member name="F:OpenMetaverse.Voice.VoicePosition.UpOrientation">
26368 <summary>Up Orientation (Y axis) of the position</summary>
26369 </member>
26370 <member name="F:OpenMetaverse.Voice.VoicePosition.LeftOrientation">
26371 <summary>Left Orientation (Z axis) of the position</summary>
26372 </member> 26102 </member>
26373 <member name="M:OpenMetaverse.Voice.VoiceParticipant.IDFromName(System.String)"> 26103 <member name="M:OpenMetaverse.AssetCache.Operational">
26374 <summary> 26104 <summary>
26375 Extract the avatar UUID encoded in a SIP URI 26105 Checks whether caching is enabled
26376 </summary> 26106 </summary>
26377 <param name="inName">
26378 </param>
26379 <returns>
26380 </returns>
26381 </member> 26107 </member>
26382 <member name="T:OpenMetaverse.Voice.VoiceSession"> 26108 <member name="M:OpenMetaverse.AssetCache.cleanerTimer_Elapsed(System.Object,System.Timers.ElapsedEventArgs)">
26383 <summary> 26109 <summary>
26384 Represents a single Voice Session to the Vivox service. 26110 Periodically prune the cache
26385 </summary> 26111 </summary>
26386 </member> 26112 </member>
26387 <member name="M:OpenMetaverse.Voice.VoiceSession.Close"> 26113 <member name="M:OpenMetaverse.AssetCache.NiceFileSize(System.Int64)">
26388 <summary> 26114 <summary>
26389 Close this session. 26115 Nicely formats file sizes
26390 </summary> 26116 </summary>
26117 <param name="byteCount">Byte size we want to output</param>
26118 <returns>String with humanly readable file size</returns>
26391 </member> 26119 </member>
26392 <member name="M:OpenMetaverse.Voice.VoiceSession.FindParticipant(System.String)"> 26120 <member name="P:OpenMetaverse.AssetCache.AutoPruneEnabled">
26393 <summary> 26121 <summary>
26394 Look up an existing Participants in this session 26122 Allows setting weather to periodicale prune the cache if it grows too big
26123 Default is enabled, when caching is enabled
26395 </summary> 26124 </summary>
26396 <param name="puri">
26397 </param>
26398 <returns>
26399 </returns>
26400 </member> 26125 </member>
26401 <member name="T:OpenMetaverse.DictionaryChangeCallback"> 26126 <member name="P:OpenMetaverse.AssetCache.AutoPruneInterval">
26402 <summary> 26127 <summary>
26128 How long (in ms) between cache checks (default is 5 min.)
26403 </summary> 26129 </summary>
26404 <param name="action">
26405 </param>
26406 <param name="entry">
26407 </param>
26408 </member> 26130 </member>
26409 <member name="T:OpenMetaverse.TextureDownloadCallback"> 26131 <member name="T:OpenMetaverse.AssetCache.SortFilesByAccesTimeHelper">
26410 <summary> 26132 <summary>
26411 A callback fired to indicate the status or final state of the requested texture. For progressive 26133 Helper class for sorting files by their last accessed time
26412 downloads this will fire each time new asset data is returned from the simulator.
26413 </summary> 26134 </summary>
26414 <param name="state">The <see cref="T:OpenMetaverse.TextureRequestState" /> indicating either Progress for textures not fully downloaded,
26415 or the final result of the request after it has been processed through the TexturePipeline</param>
26416 <param name="assetTexture">The <see cref="T:OpenMetaverse.Assets.AssetTexture" /> object containing the Assets ID, raw data
26417 and other information. For progressive rendering the <see cref="F:OpenMetaverse.Assets.Asset.AssetData" /> will contain
26418 the data from the beginning of the file. For failed, aborted and timed out requests it will contain
26419 an empty byte array.</param>
26420 </member> 26135 </member>
26421 </members> 26136 </members>
26422</doc> 26137</doc>
diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll
index 3e210ba..59e8083 100755
--- a/bin/OpenMetaverse.dll
+++ b/bin/OpenMetaverse.dll
Binary files differ
diff --git a/bin/OpenMetaverse.dll.config b/bin/OpenMetaverse.dll.config
index f5423b2..6b7b999 100644
--- a/bin/OpenMetaverse.dll.config
+++ b/bin/OpenMetaverse.dll.config
@@ -1,5 +1,7 @@
1<configuration> 1<configuration>
2 <dllmap os="osx" dll="openjpeg-dotnet.dll" target="lib64/libopenjpeg-dotnet.dylib" /> 2 <dllmap os="osx" dll="openjpeg-dotnet.dll" target="libopenjpeg-dotnet-2-1.5.0-dotnet-1.dylib" />
3 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet-x86_64.dll" target="lib64/libopenjpeg-dotnet-x86_64" /> 3 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet.dll" target="libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64" />
4 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet.dll" target="lib32/libopenjpeg-dotnet" /> 4 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet-x86_64.dll" target="libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64" />
5 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet.dll" target="libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686" />
6 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet-x86_64.dll" target="libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686" />
5</configuration> 7</configuration>
diff --git a/bin/OpenMetaverseTypes.XML b/bin/OpenMetaverseTypes.XML
index ce1298e..56e3ac7 100644
--- a/bin/OpenMetaverseTypes.XML
+++ b/bin/OpenMetaverseTypes.XML
@@ -1,481 +1,1040 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<doc> 2<doc>
3 <assembly> 3 <assembly>
4 <name>/home/root/libomv-0.9.1-source/bin/OpenMetaverseTypes</name> 4 <name>OpenMetaverseTypes</name>
5 </assembly> 5 </assembly>
6 <members> 6 <members>
7 <member name="T:OpenMetaverse.BlockingQueue`1"> 7 <member name="F:OpenMetaverse.Utils.DEG_TO_RAD">
8 <summary>Used for converting degrees to radians</summary>
9 </member>
10 <member name="F:OpenMetaverse.Utils.RAD_TO_DEG">
11 <summary>Used for converting radians to degrees</summary>
12 </member>
13 <member name="M:OpenMetaverse.Utils.BytesToInt16(System.Byte[])">
8 <summary> 14 <summary>
9 Same as Queue except Dequeue function blocks until there is an object to return. 15 Convert the first two bytes starting in the byte array in
10 Note: This class does not need to be synchronized 16 little endian ordering to a signed short integer
11 </summary> 17 </summary>
18 <param name="bytes">An array two bytes or longer</param>
19 <returns>A signed short integer, will be zero if a short can't be
20 read at the given position</returns>
12 </member> 21 </member>
13 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> 22 <member name="M:OpenMetaverse.Utils.BytesToInt16(System.Byte[],System.Int32)">
14 <summary> 23 <summary>
15 Create new BlockingQueue. 24 Convert the first two bytes starting at the given position in
25 little endian ordering to a signed short integer
16 </summary> 26 </summary>
17 <param name="col">The System.Collections.ICollection to copy elements from</param> 27 <param name="bytes">An array two bytes or longer</param>
28 <param name="pos">Position in the array to start reading</param>
29 <returns>A signed short integer, will be zero if a short can't be
30 read at the given position</returns>
18 </member> 31 </member>
19 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor(System.Int32)"> 32 <member name="M:OpenMetaverse.Utils.BytesToInt(System.Byte[],System.Int32)">
20 <summary> 33 <summary>
21 Create new BlockingQueue. 34 Convert the first four bytes starting at the given position in
35 little endian ordering to a signed integer
22 </summary> 36 </summary>
23 <param name="capacity">The initial number of elements that the queue can contain</param> 37 <param name="bytes">An array four bytes or longer</param>
38 <param name="pos">Position to start reading the int from</param>
39 <returns>A signed integer, will be zero if an int can't be read
40 at the given position</returns>
24 </member> 41 </member>
25 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor"> 42 <member name="M:OpenMetaverse.Utils.BytesToInt(System.Byte[])">
26 <summary> 43 <summary>
27 Create new BlockingQueue. 44 Convert the first four bytes of the given array in little endian
45 ordering to a signed integer
28 </summary> 46 </summary>
47 <param name="bytes">An array four bytes or longer</param>
48 <returns>A signed integer, will be zero if the array contains
49 less than four bytes</returns>
29 </member> 50 </member>
30 <member name="P:OpenMetaverse.BlockingQueue`1.Closed"> 51 <member name="M:OpenMetaverse.Utils.BytesToInt64(System.Byte[])">
31 <summary> 52 <summary>
32 Gets flag indicating if queue has been closed. 53 Convert the first eight bytes of the given array in little endian
54 ordering to a signed long integer
33 </summary> 55 </summary>
56 <param name="bytes">An array eight bytes or longer</param>
57 <returns>A signed long integer, will be zero if the array contains
58 less than eight bytes</returns>
34 </member> 59 </member>
35 <member name="M:OpenMetaverse.BlockingQueue`1.Finalize"> 60 <member name="M:OpenMetaverse.Utils.BytesToInt64(System.Byte[],System.Int32)">
36 <summary> 61 <summary>
37 BlockingQueue Destructor (Close queue, resume any waiting thread). 62 Convert the first eight bytes starting at the given position in
63 little endian ordering to a signed long integer
38 </summary> 64 </summary>
65 <param name="bytes">An array eight bytes or longer</param>
66 <param name="pos">Position to start reading the long from</param>
67 <returns>A signed long integer, will be zero if a long can't be read
68 at the given position</returns>
39 </member> 69 </member>
40 <member name="M:OpenMetaverse.BlockingQueue`1.Clear"> 70 <member name="M:OpenMetaverse.Utils.BytesToUInt16(System.Byte[],System.Int32)">
41 <summary> 71 <summary>
42 Remove all objects from the Queue. 72 Convert the first two bytes starting at the given position in
73 little endian ordering to an unsigned short
43 </summary> 74 </summary>
75 <param name="bytes">Byte array containing the ushort</param>
76 <param name="pos">Position to start reading the ushort from</param>
77 <returns>An unsigned short, will be zero if a ushort can't be read
78 at the given position</returns>
44 </member> 79 </member>
45 <member name="M:OpenMetaverse.BlockingQueue`1.Close"> 80 <member name="M:OpenMetaverse.Utils.BytesToUInt16(System.Byte[])">
46 <summary> 81 <summary>
47 Remove all objects from the Queue, resume all dequeue threads. 82 Convert two bytes in little endian ordering to an unsigned short
48 </summary> 83 </summary>
84 <param name="bytes">Byte array containing the ushort</param>
85 <returns>An unsigned short, will be zero if a ushort can't be
86 read</returns>
49 </member> 87 </member>
50 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue"> 88 <member name="M:OpenMetaverse.Utils.BytesToUInt(System.Byte[],System.Int32)">
51 <summary> 89 <summary>
52 Removes and returns the object at the beginning of the Queue. 90 Convert the first four bytes starting at the given position in
91 little endian ordering to an unsigned integer
53 </summary> 92 </summary>
54 <returns>Object in queue.</returns> 93 <param name="bytes">Byte array containing the uint</param>
94 <param name="pos">Position to start reading the uint from</param>
95 <returns>An unsigned integer, will be zero if a uint can't be read
96 at the given position</returns>
55 </member> 97 </member>
56 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue(System.TimeSpan)"> 98 <member name="M:OpenMetaverse.Utils.BytesToUInt(System.Byte[])">
57 <summary> 99 <summary>
58 Removes and returns the object at the beginning of the Queue. 100 Convert the first four bytes of the given array in little endian
101 ordering to an unsigned integer
59 </summary> 102 </summary>
60 <param name="timeout">time to wait before returning</param> 103 <param name="bytes">An array four bytes or longer</param>
61 <returns>Object in queue.</returns> 104 <returns>An unsigned integer, will be zero if the array contains
105 less than four bytes</returns>
62 </member> 106 </member>
63 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue(System.Int32)"> 107 <member name="M:OpenMetaverse.Utils.BytesToUInt64(System.Byte[])">
64 <summary> 108 <summary>
65 Removes and returns the object at the beginning of the Queue. 109 Convert the first eight bytes of the given array in little endian
110 ordering to an unsigned 64-bit integer
66 </summary> 111 </summary>
67 <param name="timeout">time to wait before returning (in milliseconds)</param> 112 <param name="bytes">An array eight bytes or longer</param>
68 <returns>Object in queue.</returns> 113 <returns>An unsigned 64-bit integer, will be zero if the array
114 contains less than eight bytes</returns>
69 </member> 115 </member>
70 <member name="M:OpenMetaverse.BlockingQueue`1.Enqueue(`0)"> 116 <member name="M:OpenMetaverse.Utils.BytesToFloat(System.Byte[],System.Int32)">
71 <summary> 117 <summary>
72 Adds an object to the end of the Queue 118 Convert four bytes in little endian ordering to a floating point
119 value
73 </summary> 120 </summary>
74 <param name="obj">Object to put in queue</param> 121 <param name="bytes">Byte array containing a little ending floating
122 point value</param>
123 <param name="pos">Starting position of the floating point value in
124 the byte array</param>
125 <returns>Single precision value</returns>
75 </member> 126 </member>
76 <member name="M:OpenMetaverse.BlockingQueue`1.Open"> 127 <member name="M:OpenMetaverse.Utils.IntToBytes(System.Int32)">
77 <summary> 128 <summary>
78 Open Queue. 129 Convert an integer to a byte array in little endian format
79 </summary> 130 </summary>
131 <param name="value">The integer to convert</param>
132 <returns>A four byte little endian array</returns>
80 </member> 133 </member>
81 <member name="M:OpenMetaverse.CircularQueue`1.#ctor(OpenMetaverse.CircularQueue{`0})"> 134 <member name="M:OpenMetaverse.Utils.IntToBytesBig(System.Int32)">
82 <summary> 135 <summary>
83 Copy constructor 136 Convert an integer to a byte array in big endian format
84 </summary> 137 </summary>
85 <param name="queue">Circular queue to copy</param> 138 <param name="value">The integer to convert</param>
139 <returns>A four byte big endian array</returns>
86 </member> 140 </member>
87 <member name="T:OpenMetaverse.Color4"> 141 <member name="M:OpenMetaverse.Utils.Int64ToBytes(System.Int64)">
88 <summary> 142 <summary>
89 An 8-bit color structure including an alpha channel 143 Convert a 64-bit integer to a byte array in little endian format
90 </summary> 144 </summary>
145 <param name="value">The value to convert</param>
146 <returns>An 8 byte little endian array</returns>
91 </member> 147 </member>
92 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)"> 148 <member name="M:OpenMetaverse.Utils.UInt64ToBytes(System.UInt64)">
93 <summary> 149 <summary>
150 Convert a 64-bit unsigned integer to a byte array in little endian
151 format
94 </summary> 152 </summary>
95 <param name="r"> 153 <param name="value">The value to convert</param>
96 </param> 154 <returns>An 8 byte little endian array</returns>
97 <param name="g">
98 </param>
99 <param name="b">
100 </param>
101 <param name="a">
102 </param>
103 </member> 155 </member>
104 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte[],System.Int32,System.Boolean)"> 156 <member name="M:OpenMetaverse.Utils.FloatToBytes(System.Single)">
105 <summary> 157 <summary>
106 Builds a color from a byte array 158 Convert a floating point value to four bytes in little endian
159 ordering
107 </summary> 160 </summary>
108 <param name="byteArray">Byte array containing a 16 byte color</param> 161 <param name="value">A floating point value</param>
109 <param name="pos">Beginning position in the byte array</param> 162 <returns>A four byte array containing the value in little endian
110 <param name="inverted">True if the byte array stores inverted values, 163 ordering</returns>
111 otherwise false. For example the color black (fully opaque) inverted
112 would be 0xFF 0xFF 0xFF 0x00</param>
113 </member> 164 </member>
114 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte[],System.Int32,System.Boolean,System.Boolean)"> 165 <member name="M:OpenMetaverse.Utils.UIntToHexString(System.UInt32)">
115 <summary> 166 <summary>
116 Returns the raw bytes for this vector 167 Converts an unsigned integer to a hexadecimal string
117 </summary> 168 </summary>
118 <param name="byteArray">Byte array containing a 16 byte color</param> 169 <param name="i">An unsigned integer to convert to a string</param>
119 <param name="pos">Beginning position in the byte array</param> 170 <returns>A hexadecimal string 10 characters long</returns>
120 <param name="inverted">True if the byte array stores inverted values, 171 <example>0x7fffffff</example>
121 otherwise false. For example the color black (fully opaque) inverted
122 would be 0xFF 0xFF 0xFF 0x00</param>
123 <param name="alphaInverted">True if the alpha value is inverted in
124 addition to whatever the inverted parameter is. Setting inverted true
125 and alphaInverted true will flip the alpha value back to non-inverted,
126 but keep the other color bytes inverted</param>
127 <returns>A 16 byte array containing R, G, B, and A</returns>
128 </member> 172 </member>
129 <member name="M:OpenMetaverse.Color4.#ctor(OpenMetaverse.Color4)"> 173 <member name="M:OpenMetaverse.Utils.BytesToString(System.Byte[])">
130 <summary> 174 <summary>
131 Copy constructor 175 Convert a variable length UTF8 byte array to a string
132 </summary> 176 </summary>
133 <param name="color">Color to copy</param> 177 <param name="bytes">The UTF8 encoded byte array to convert</param>
178 <returns>The decoded string</returns>
134 </member> 179 </member>
135 <member name="F:OpenMetaverse.Color4.R"> 180 <member name="M:OpenMetaverse.Utils.BytesToHexString(System.Byte[],System.String)">
136 <summary>Red</summary> 181 <summary>
182 Converts a byte array to a string containing hexadecimal characters
183 </summary>
184 <param name="bytes">The byte array to convert to a string</param>
185 <param name="fieldName">The name of the field to prepend to each
186 line of the string</param>
187 <returns>A string containing hexadecimal characters on multiple
188 lines. Each line is prepended with the field name</returns>
137 </member> 189 </member>
138 <member name="F:OpenMetaverse.Color4.G"> 190 <member name="M:OpenMetaverse.Utils.BytesToHexString(System.Byte[],System.Int32,System.String)">
139 <summary>Green</summary> 191 <summary>
192 Converts a byte array to a string containing hexadecimal characters
193 </summary>
194 <param name="bytes">The byte array to convert to a string</param>
195 <param name="length">Number of bytes in the array to parse</param>
196 <param name="fieldName">A string to prepend to each line of the hex
197 dump</param>
198 <returns>A string containing hexadecimal characters on multiple
199 lines. Each line is prepended with the field name</returns>
140 </member> 200 </member>
141 <member name="F:OpenMetaverse.Color4.B"> 201 <member name="M:OpenMetaverse.Utils.StringToBytes(System.String)">
142 <summary>Blue</summary> 202 <summary>
203 Convert a string to a UTF8 encoded byte array
204 </summary>
205 <param name="str">The string to convert</param>
206 <returns>A null-terminated UTF8 byte array</returns>
143 </member> 207 </member>
144 <member name="F:OpenMetaverse.Color4.A"> 208 <member name="M:OpenMetaverse.Utils.HexStringToBytes(System.String,System.Boolean)">
145 <summary>Alpha</summary> 209 <summary>
210 Converts a string containing hexadecimal characters to a byte array
211 </summary>
212 <param name="hexString">String containing hexadecimal characters</param>
213 <param name="handleDirty">If true, gracefully handles null, empty and
214 uneven strings as well as stripping unconvertable characters</param>
215 <returns>The converted byte array</returns>
146 </member> 216 </member>
147 <member name="F:OpenMetaverse.Color4.Black"> 217 <member name="M:OpenMetaverse.Utils.IsHexDigit(System.Char)">
148 <summary>A Color4 with zero RGB values and fully opaque (alpha 1.0)</summary> 218 <summary>
219 Returns true is c is a hexadecimal digit (A-F, a-f, 0-9)
220 </summary>
221 <param name="c">Character to test</param>
222 <returns>true if hex digit, false if not</returns>
149 </member> 223 </member>
150 <member name="F:OpenMetaverse.Color4.White"> 224 <member name="M:OpenMetaverse.Utils.HexToByte(System.String)">
151 <summary>A Color4 with full RGB values (1.0) and fully opaque (alpha 1.0)</summary> 225 <summary>
226 Converts 1 or 2 character string into equivalant byte value
227 </summary>
228 <param name="hex">1 or 2 character string</param>
229 <returns>byte</returns>
152 </member> 230 </member>
153 <member name="M:OpenMetaverse.Color4.CompareTo(OpenMetaverse.Color4)"> 231 <member name="M:OpenMetaverse.Utils.FloatToByte(System.Single,System.Single,System.Single)">
154 <summary> 232 <summary>
155 IComparable.CompareTo implementation 233 Convert a float value to a byte given a minimum and maximum range
156 </summary> 234 </summary>
157 <remarks>Sorting ends up like this: |--Grayscale--||--Color--|. 235 <param name="val">Value to convert to a byte</param>
158 Alpha is only used when the colors are otherwise equivalent</remarks> 236 <param name="lower">Minimum value range</param>
237 <param name="upper">Maximum value range</param>
238 <returns>A single byte representing the original float value</returns>
159 </member> 239 </member>
160 <member name="M:OpenMetaverse.Color4.FromBytes(System.Byte[],System.Int32,System.Boolean,System.Boolean)"> 240 <member name="M:OpenMetaverse.Utils.ByteToFloat(System.Byte[],System.Int32,System.Single,System.Single)">
161 <summary> 241 <summary>
162 Builds a color from a byte array 242 Convert a byte to a float value given a minimum and maximum range
163 </summary> 243 </summary>
164 <param name="byteArray">Byte array containing a 16 byte color</param> 244 <param name="bytes">Byte array to get the byte from</param>
165 <param name="pos">Beginning position in the byte array</param> 245 <param name="pos">Position in the byte array the desired byte is at</param>
166 <param name="inverted">True if the byte array stores inverted values, 246 <param name="lower">Minimum value range</param>
167 otherwise false. For example the color black (fully opaque) inverted 247 <param name="upper">Maximum value range</param>
168 would be 0xFF 0xFF 0xFF 0x00</param> 248 <returns>A float value inclusively between lower and upper</returns>
169 <param name="alphaInverted">True if the alpha value is inverted in
170 addition to whatever the inverted parameter is. Setting inverted true
171 and alphaInverted true will flip the alpha value back to non-inverted,
172 but keep the other color bytes inverted</param>
173 </member> 249 </member>
174 <member name="M:OpenMetaverse.Color4.ToBytes(System.Byte[],System.Int32)"> 250 <member name="M:OpenMetaverse.Utils.ByteToFloat(System.Byte,System.Single,System.Single)">
175 <summary> 251 <summary>
176 Writes the raw bytes for this color to a byte array 252 Convert a byte to a float value given a minimum and maximum range
177 </summary> 253 </summary>
178 <param name="dest">Destination byte array</param> 254 <param name="val">Byte to convert to a float value</param>
179 <param name="pos">Position in the destination array to start 255 <param name="lower">Minimum value range</param>
180 writing. Must be at least 16 bytes before the end of the array</param> 256 <param name="upper">Maximum value range</param>
257 <returns>A float value inclusively between lower and upper</returns>
181 </member> 258 </member>
182 <member name="M:OpenMetaverse.Color4.ToBytes(System.Byte[],System.Int32,System.Boolean)"> 259 <member name="M:OpenMetaverse.Utils.TryParseSingle(System.String,System.Single@)">
183 <summary> 260 <summary>
184 Serializes this color into four bytes in a byte array 261 Attempts to parse a floating point value from a string, using an
262 EN-US number format
185 </summary> 263 </summary>
186 <param name="dest">Destination byte array</param> 264 <param name="s">String to parse</param>
187 <param name="pos">Position in the destination array to start 265 <param name="result">Resulting floating point number</param>
188 writing. Must be at least 4 bytes before the end of the array</param> 266 <returns>True if the parse was successful, otherwise false</returns>
189 <param name="inverted">True to invert the output (1.0 becomes 0
190 instead of 255)</param>
191 </member> 267 </member>
192 <member name="M:OpenMetaverse.Color4.ToFloatBytes(System.Byte[],System.Int32)"> 268 <member name="M:OpenMetaverse.Utils.TryParseDouble(System.String,System.Double@)">
193 <summary> 269 <summary>
194 Writes the raw bytes for this color to a byte array 270 Attempts to parse a floating point value from a string, using an
271 EN-US number format
195 </summary> 272 </summary>
196 <param name="dest">Destination byte array</param> 273 <param name="s">String to parse</param>
197 <param name="pos">Position in the destination array to start 274 <param name="result">Resulting floating point number</param>
198 writing. Must be at least 16 bytes before the end of the array</param> 275 <returns>True if the parse was successful, otherwise false</returns>
199 </member> 276 </member>
200 <member name="M:OpenMetaverse.Color4.ClampValues"> 277 <member name="M:OpenMetaverse.Utils.TryParseHex(System.String,System.UInt32@)">
201 <summary> 278 <summary>
202 Ensures that values are in range 0-1 279 Tries to parse an unsigned 32-bit integer from a hexadecimal string
203 </summary> 280 </summary>
281 <param name="s">String to parse</param>
282 <param name="result">Resulting integer</param>
283 <returns>True if the parse was successful, otherwise false</returns>
204 </member> 284 </member>
205 <member name="M:OpenMetaverse.Color4.FromHSV(System.Double,System.Double,System.Double)"> 285 <member name="M:OpenMetaverse.Utils.EnumToText(System.Enum)">
206 <summary> 286 <summary>
207 Create an RGB color from a hue, saturation, value combination 287 Returns text specified in EnumInfo attribute of the enumerator
288 To add the text use [EnumInfo(Text = "Some nice text here")] before declaration
289 of enum values
208 </summary> 290 </summary>
209 <param name="hue">Hue</param> 291 <param name="value">Enum value</param>
210 <param name="saturation">Saturation</param> 292 <returns>Text representation of the enum</returns>
211 <param name="value">Value</param>
212 <returns>An fully opaque RGB color (alpha is 1.0)</returns>
213 </member> 293 </member>
214 <member name="M:OpenMetaverse.Color4.Lerp(OpenMetaverse.Color4,OpenMetaverse.Color4,System.Single)"> 294 <member name="M:OpenMetaverse.Utils.AssetTypeToString(OpenMetaverse.AssetType)">
215 <summary> 295 <summary>
216 Performs linear interpolation between two colors 296 Takes an AssetType and returns the string representation
217 </summary> 297 </summary>
218 <param name="value1">Color to start at</param> 298 <param name="type">The source <seealso cref="T:OpenMetaverse.AssetType"/></param>
219 <param name="value2">Color to end at</param> 299 <returns>The string version of the AssetType</returns>
220 <param name="amount">Amount to interpolate</param>
221 <returns>The interpolated color</returns>
222 </member> 300 </member>
223 <member name="T:OpenMetaverse.EnumInfoAttribute"> 301 <member name="M:OpenMetaverse.Utils.StringToAssetType(System.String)">
224 <summary> 302 <summary>
225 Attribute class that allows extra attributes to be attached to ENUMs 303 Translate a string name of an AssetType into the proper Type
226 </summary> 304 </summary>
305 <param name="type">A string containing the AssetType name</param>
306 <returns>The AssetType which matches the string name, or AssetType.Unknown if no match was found</returns>
227 </member> 307 </member>
228 <member name="M:OpenMetaverse.EnumInfoAttribute.#ctor"> 308 <member name="M:OpenMetaverse.Utils.InventoryTypeToString(OpenMetaverse.InventoryType)">
229 <summary>Default initializer</summary> 309 <summary>
310 Convert an InventoryType to a string
311 </summary>
312 <param name="type">The <seealso cref="T:InventoryType"/> to convert</param>
313 <returns>A string representation of the source</returns>
230 </member> 314 </member>
231 <member name="M:OpenMetaverse.EnumInfoAttribute.#ctor(System.String)"> 315 <member name="M:OpenMetaverse.Utils.StringToInventoryType(System.String)">
232 <summary>Text used when presenting ENUM to user</summary> 316 <summary>
317 Convert a string into a valid InventoryType
318 </summary>
319 <param name="type">A string representation of the InventoryType to convert</param>
320 <returns>A InventoryType object which matched the type</returns>
233 </member> 321 </member>
234 <member name="F:OpenMetaverse.EnumInfoAttribute.Text"> 322 <member name="M:OpenMetaverse.Utils.SaleTypeToString(OpenMetaverse.SaleType)">
235 <summary>Text used when presenting ENUM to user</summary> 323 <summary>
324 Convert a SaleType to a string
325 </summary>
326 <param name="type">The <seealso cref="T:SaleType"/> to convert</param>
327 <returns>A string representation of the source</returns>
236 </member> 328 </member>
237 <member name="T:OpenMetaverse.AssetType"> 329 <member name="M:OpenMetaverse.Utils.StringToSaleType(System.String)">
238 <summary> 330 <summary>
239 The different types of grid assets 331 Convert a string into a valid SaleType
240 </summary> 332 </summary>
333 <param name="value">A string representation of the SaleType to convert</param>
334 <returns>A SaleType object which matched the type</returns>
241 </member> 335 </member>
242 <member name="F:OpenMetaverse.AssetType.Unknown"> 336 <member name="M:OpenMetaverse.Utils.StringToAttachmentPoint(System.String)">
243 <summary>Unknown asset type</summary> 337 <summary>
338 Converts a string used in LLSD to AttachmentPoint type
339 </summary>
340 <param name="value">String representation of AttachmentPoint to convert</param>
341 <returns>AttachmentPoint enum</returns>
244 </member> 342 </member>
245 <member name="F:OpenMetaverse.AssetType.Texture"> 343 <member name="M:OpenMetaverse.Utils.CopyBytes(System.Byte[])">
246 <summary>Texture asset, stores in JPEG2000 J2C stream format</summary> 344 <summary>
345 Copy a byte array
346 </summary>
347 <param name="bytes">Byte array to copy</param>
348 <returns>A copy of the given byte array</returns>
247 </member> 349 </member>
248 <member name="F:OpenMetaverse.AssetType.Sound"> 350 <member name="M:OpenMetaverse.Utils.UIntsToLong(System.UInt32,System.UInt32)">
249 <summary>Sound asset</summary> 351 <summary>
352 Packs to 32-bit unsigned integers in to a 64-bit unsigned integer
353 </summary>
354 <param name="a">The left-hand (or X) value</param>
355 <param name="b">The right-hand (or Y) value</param>
356 <returns>A 64-bit integer containing the two 32-bit input values</returns>
250 </member> 357 </member>
251 <member name="F:OpenMetaverse.AssetType.CallingCard"> 358 <member name="M:OpenMetaverse.Utils.LongToUInts(System.UInt64,System.UInt32@,System.UInt32@)">
252 <summary>Calling card for another avatar</summary> 359 <summary>
360 Unpacks two 32-bit unsigned integers from a 64-bit unsigned integer
361 </summary>
362 <param name="a">The 64-bit input integer</param>
363 <param name="b">The left-hand (or X) output value</param>
364 <param name="c">The right-hand (or Y) output value</param>
253 </member> 365 </member>
254 <member name="F:OpenMetaverse.AssetType.Landmark"> 366 <member name="M:OpenMetaverse.Utils.IPToUInt(System.Net.IPAddress)">
255 <summary>Link to a location in world</summary> 367 <summary>
368 Convert an IP address object to an unsigned 32-bit integer
369 </summary>
370 <param name="address">IP address to convert</param>
371 <returns>32-bit unsigned integer holding the IP address bits</returns>
256 </member> 372 </member>
257 <member name="F:OpenMetaverse.AssetType.Clothing"> 373 <member name="M:OpenMetaverse.Utils.GetUnixTime">
258 <summary>Collection of textures and parameters that can be 374 <summary>
259 worn by an avatar</summary> 375 Gets a unix timestamp for the current time
376 </summary>
377 <returns>An unsigned integer representing a unix timestamp for now</returns>
260 </member> 378 </member>
261 <member name="F:OpenMetaverse.AssetType.Object"> 379 <member name="M:OpenMetaverse.Utils.UnixTimeToDateTime(System.UInt32)">
262 <summary>Primitive that can contain textures, sounds, 380 <summary>
263 scripts and more</summary> 381 Convert a UNIX timestamp to a native DateTime object
382 </summary>
383 <param name="timestamp">An unsigned integer representing a UNIX
384 timestamp</param>
385 <returns>A DateTime object containing the same time specified in
386 the given timestamp</returns>
264 </member> 387 </member>
265 <member name="F:OpenMetaverse.AssetType.Notecard"> 388 <member name="M:OpenMetaverse.Utils.UnixTimeToDateTime(System.Int32)">
266 <summary>Notecard asset</summary> 389 <summary>
390 Convert a UNIX timestamp to a native DateTime object
391 </summary>
392 <param name="timestamp">A signed integer representing a UNIX
393 timestamp</param>
394 <returns>A DateTime object containing the same time specified in
395 the given timestamp</returns>
267 </member> 396 </member>
268 <member name="F:OpenMetaverse.AssetType.Folder"> 397 <member name="M:OpenMetaverse.Utils.DateTimeToUnixTime(System.DateTime)">
269 <summary>Holds a collection of inventory items</summary> 398 <summary>
399 Convert a native DateTime object to a UNIX timestamp
400 </summary>
401 <param name="time">A DateTime object you want to convert to a
402 timestamp</param>
403 <returns>An unsigned integer representing a UNIX timestamp</returns>
270 </member> 404 </member>
271 <member name="F:OpenMetaverse.AssetType.RootFolder"> 405 <member name="M:OpenMetaverse.Utils.Swap``1(``0@,``0@)">
272 <summary>Root inventory folder</summary> 406 <summary>
407 Swap two values
408 </summary>
409 <typeparam name="T">Type of the values to swap</typeparam>
410 <param name="lhs">First value</param>
411 <param name="rhs">Second value</param>
273 </member> 412 </member>
274 <member name="F:OpenMetaverse.AssetType.LSLText"> 413 <member name="M:OpenMetaverse.Utils.EnumTryParse``1(System.String,``0@)">
275 <summary>Linden scripting language script</summary> 414 <summary>
415 Try to parse an enumeration value from a string
416 </summary>
417 <typeparam name="T">Enumeration type</typeparam>
418 <param name="strType">String value to parse</param>
419 <param name="result">Enumeration value on success</param>
420 <returns>True if the parsing succeeded, otherwise false</returns>
276 </member> 421 </member>
277 <member name="F:OpenMetaverse.AssetType.LSLBytecode"> 422 <member name="M:OpenMetaverse.Utils.SwapWords(System.Byte)">
278 <summary>LSO bytecode for a script</summary> 423 <summary>
424 Swaps the high and low words in a byte. Converts aaaabbbb to bbbbaaaa
425 </summary>
426 <param name="value">Byte to swap the words in</param>
427 <returns>Byte value with the words swapped</returns>
279 </member> 428 </member>
280 <member name="F:OpenMetaverse.AssetType.TextureTGA"> 429 <member name="M:OpenMetaverse.Utils.HostnameToIPv4(System.String)">
281 <summary>Uncompressed TGA texture</summary> 430 <summary>
431 Attempts to convert a string representation of a hostname or IP
432 address to a <seealso cref="T:System.Net.IPAddress"/>
433 </summary>
434 <param name="hostname">Hostname to convert to an IPAddress</param>
435 <returns>Converted IP address object, or null if the conversion
436 failed</returns>
282 </member> 437 </member>
283 <member name="F:OpenMetaverse.AssetType.Bodypart"> 438 <member name="F:OpenMetaverse.Utils.EnUsCulture">
284 <summary>Collection of textures and shape parameters that can 439 <summary>Provide a single instance of the CultureInfo class to
285 be worn</summary> 440 help parsing in situations where the grid assumes an en-us
441 culture</summary>
286 </member> 442 </member>
287 <member name="F:OpenMetaverse.AssetType.TrashFolder"> 443 <member name="F:OpenMetaverse.Utils.Epoch">
288 <summary>Trash folder</summary> 444 <summary>UNIX epoch in DateTime format</summary>
289 </member> 445 </member>
290 <member name="F:OpenMetaverse.AssetType.SnapshotFolder"> 446 <member name="F:OpenMetaverse.Utils.MD5Builder">
291 <summary>Snapshot folder</summary> 447 <summary>Provide a single instance of the MD5 class to avoid making
448 duplicate copies and handle thread safety</summary>
292 </member> 449 </member>
293 <member name="F:OpenMetaverse.AssetType.LostAndFoundFolder"> 450 <member name="F:OpenMetaverse.Utils.SHA1Builder">
294 <summary>Lost and found folder</summary> 451 <summary>Provide a single instance of the SHA-1 class to avoid
452 making duplicate copies and handle thread safety</summary>
295 </member> 453 </member>
296 <member name="F:OpenMetaverse.AssetType.SoundWAV"> 454 <member name="F:OpenMetaverse.Utils.RNG">
297 <summary>Uncompressed sound</summary> 455 <summary>Provide a single instance of a random number generator
456 to avoid making duplicate copies and handle thread safety</summary>
298 </member> 457 </member>
299 <member name="F:OpenMetaverse.AssetType.ImageTGA"> 458 <member name="M:OpenMetaverse.Utils.Clamp(System.Single,System.Single,System.Single)">
300 <summary>Uncompressed TGA non-square image, not to be used as a 459 <summary>
301 texture</summary> 460 Clamp a given value between a range
461 </summary>
462 <param name="value">Value to clamp</param>
463 <param name="min">Minimum allowable value</param>
464 <param name="max">Maximum allowable value</param>
465 <returns>A value inclusively between lower and upper</returns>
302 </member> 466 </member>
303 <member name="F:OpenMetaverse.AssetType.ImageJPEG"> 467 <member name="M:OpenMetaverse.Utils.Clamp(System.Double,System.Double,System.Double)">
304 <summary>Compressed JPEG non-square image, not to be used as a 468 <summary>
305 texture</summary> 469 Clamp a given value between a range
470 </summary>
471 <param name="value">Value to clamp</param>
472 <param name="min">Minimum allowable value</param>
473 <param name="max">Maximum allowable value</param>
474 <returns>A value inclusively between lower and upper</returns>
306 </member> 475 </member>
307 <member name="F:OpenMetaverse.AssetType.Animation"> 476 <member name="M:OpenMetaverse.Utils.Clamp(System.Int32,System.Int32,System.Int32)">
308 <summary>Animation</summary> 477 <summary>
478 Clamp a given value between a range
479 </summary>
480 <param name="value">Value to clamp</param>
481 <param name="min">Minimum allowable value</param>
482 <param name="max">Maximum allowable value</param>
483 <returns>A value inclusively between lower and upper</returns>
309 </member> 484 </member>
310 <member name="F:OpenMetaverse.AssetType.Gesture"> 485 <member name="M:OpenMetaverse.Utils.Round(System.Single)">
311 <summary>Sequence of animations, sounds, chat, and pauses</summary> 486 <summary>
487 Round a floating-point value to the nearest integer
488 </summary>
489 <param name="val">Floating point number to round</param>
490 <returns>Integer</returns>
312 </member> 491 </member>
313 <member name="F:OpenMetaverse.AssetType.Simstate"> 492 <member name="M:OpenMetaverse.Utils.IsFinite(System.Single)">
314 <summary>Simstate file</summary> 493 <summary>
494 Test if a single precision float is a finite number
495 </summary>
315 </member> 496 </member>
316 <member name="F:OpenMetaverse.AssetType.FavoriteFolder"> 497 <member name="M:OpenMetaverse.Utils.IsFinite(System.Double)">
317 <summary>Contains landmarks for favorites</summary> 498 <summary>
499 Test if a double precision float is a finite number
500 </summary>
318 </member> 501 </member>
319 <member name="F:OpenMetaverse.AssetType.Link"> 502 <member name="M:OpenMetaverse.Utils.Distance(System.Single,System.Single)">
320 <summary>Asset is a link to another inventory item</summary> 503 <summary>
504 Get the distance between two floating-point values
505 </summary>
506 <param name="value1">First value</param>
507 <param name="value2">Second value</param>
508 <returns>The distance between the two values</returns>
321 </member> 509 </member>
322 <member name="F:OpenMetaverse.AssetType.LinkFolder"> 510 <member name="M:OpenMetaverse.Utils.MD5(System.Byte[])">
323 <summary>Asset is a link to another inventory folder</summary> 511 <summary>
512 Compute the MD5 hash for a byte array
513 </summary>
514 <param name="data">Byte array to compute the hash for</param>
515 <returns>MD5 hash of the input data</returns>
324 </member> 516 </member>
325 <member name="F:OpenMetaverse.AssetType.EnsembleStart"> 517 <member name="M:OpenMetaverse.Utils.SHA1(System.Byte[])">
326 <summary>Beginning of the range reserved for ensembles</summary> 518 <summary>
519 Compute the SHA1 hash for a byte array
520 </summary>
521 <param name="data">Byte array to compute the hash for</param>
522 <returns>SHA1 hash of the input data</returns>
327 </member> 523 </member>
328 <member name="F:OpenMetaverse.AssetType.EnsembleEnd"> 524 <member name="M:OpenMetaverse.Utils.SHA1String(System.String)">
329 <summary>End of the range reserved for ensembles</summary> 525 <summary>
526 Calculate the SHA1 hash of a given string
527 </summary>
528 <param name="value">The string to hash</param>
529 <returns>The SHA1 hash as a string</returns>
330 </member> 530 </member>
331 <member name="F:OpenMetaverse.AssetType.CurrentOutfitFolder"> 531 <member name="M:OpenMetaverse.Utils.SHA256(System.Byte[])">
332 <summary>Folder containing inventory links to wearables and attachments 532 <summary>
333 that are part of the current outfit</summary> 533 Compute the SHA256 hash for a byte array
534 </summary>
535 <param name="data">Byte array to compute the hash for</param>
536 <returns>SHA256 hash of the input data</returns>
334 </member> 537 </member>
335 <member name="F:OpenMetaverse.AssetType.OutfitFolder"> 538 <member name="M:OpenMetaverse.Utils.SHA256String(System.String)">
336 <summary>Folder containing inventory items or links to 539 <summary>
337 inventory items of wearables and attachments 540 Calculate the SHA256 hash of a given string
338 together make a full outfit</summary> 541 </summary>
542 <param name="value">The string to hash</param>
543 <returns>The SHA256 hash as a string</returns>
339 </member> 544 </member>
340 <member name="F:OpenMetaverse.AssetType.MyOutfitsFolder"> 545 <member name="M:OpenMetaverse.Utils.MD5(System.String)">
341 <summary>Root folder for the folders of type OutfitFolder</summary> 546 <summary>
547 Calculate the MD5 hash of a given string
548 </summary>
549 <param name="password">The password to hash</param>
550 <returns>An MD5 hash in string format, with $1$ prepended</returns>
342 </member> 551 </member>
343 <member name="F:OpenMetaverse.AssetType.Mesh"> 552 <member name="M:OpenMetaverse.Utils.MD5String(System.String)">
344 <summary>Linden mesh format</summary> 553 <summary>
554 Calculate the MD5 hash of a given string
555 </summary>
556 <param name="value">The string to hash</param>
557 <returns>The MD5 hash as a string</returns>
345 </member> 558 </member>
346 <member name="T:OpenMetaverse.InventoryType"> 559 <member name="M:OpenMetaverse.Utils.RandomDouble">
347 <summary> 560 <summary>
348 Inventory Item Types, eg Script, Notecard, Folder, etc 561 Generate a random double precision floating point value
349 </summary> 562 </summary>
563 <returns>Random value of type double</returns>
350 </member> 564 </member>
351 <member name="F:OpenMetaverse.InventoryType.Unknown"> 565 <member name="M:OpenMetaverse.Utils.GetRunningPlatform">
566 <summary>
567 Get the current running platform
568 </summary>
569 <returns>Enumeration of the current platform we are running on</returns>
570 </member>
571 <member name="M:OpenMetaverse.Utils.GetRunningRuntime">
572 <summary>
573 Get the current running runtime
574 </summary>
575 <returns>Enumeration of the current runtime we are running on</returns>
576 </member>
577 <member name="T:OpenMetaverse.Utils.Platform">
578 <summary>
579 Operating system
580 </summary>
581 </member>
582 <member name="F:OpenMetaverse.Utils.Platform.Unknown">
352 <summary>Unknown</summary> 583 <summary>Unknown</summary>
353 </member> 584 </member>
354 <member name="F:OpenMetaverse.InventoryType.Texture"> 585 <member name="F:OpenMetaverse.Utils.Platform.Windows">
355 <summary>Texture</summary> 586 <summary>Microsoft Windows</summary>
356 </member> 587 </member>
357 <member name="F:OpenMetaverse.InventoryType.Sound"> 588 <member name="F:OpenMetaverse.Utils.Platform.WindowsCE">
358 <summary>Sound</summary> 589 <summary>Microsoft Windows CE</summary>
359 </member> 590 </member>
360 <member name="F:OpenMetaverse.InventoryType.CallingCard"> 591 <member name="F:OpenMetaverse.Utils.Platform.Linux">
361 <summary>Calling Card</summary> 592 <summary>Linux</summary>
362 </member> 593 </member>
363 <member name="F:OpenMetaverse.InventoryType.Landmark"> 594 <member name="F:OpenMetaverse.Utils.Platform.OSX">
364 <summary>Landmark</summary> 595 <summary>Apple OSX</summary>
365 </member> 596 </member>
366 <member name="F:OpenMetaverse.InventoryType.Notecard"> 597 <member name="T:OpenMetaverse.Utils.Runtime">
367 <summary>Notecard</summary> 598 <summary>
599 Runtime platform
600 </summary>
368 </member> 601 </member>
369 <member name="F:OpenMetaverse.InventoryType.Category"> 602 <member name="F:OpenMetaverse.Utils.Runtime.Windows">
603 <summary>.NET runtime</summary>
604 </member>
605 <member name="F:OpenMetaverse.Utils.Runtime.Mono">
606 <summary>Mono runtime: http://www.mono-project.com/</summary>
607 </member>
608 <member name="M:OpenMetaverse.Matrix4.GetEulerAngles(System.Single@,System.Single@,System.Single@)">
370 <summary> 609 <summary>
610 Convert this matrix to euler rotations
371 </summary> 611 </summary>
612 <param name="roll">X euler angle</param>
613 <param name="pitch">Y euler angle</param>
614 <param name="yaw">Z euler angle</param>
372 </member> 615 </member>
373 <member name="F:OpenMetaverse.InventoryType.Folder"> 616 <member name="M:OpenMetaverse.Matrix4.GetQuaternion">
374 <summary>Folder</summary> 617 <summary>
618 Convert this matrix to a quaternion rotation
619 </summary>
620 <returns>A quaternion representation of this rotation matrix</returns>
375 </member> 621 </member>
376 <member name="F:OpenMetaverse.InventoryType.RootCategory"> 622 <member name="M:OpenMetaverse.Matrix4.CreateFromEulers(System.Single,System.Single,System.Single)">
377 <summary> 623 <summary>
624 Construct a matrix from euler rotation values in radians
378 </summary> 625 </summary>
626 <param name="roll">X euler angle in radians</param>
627 <param name="pitch">Y euler angle in radians</param>
628 <param name="yaw">Z euler angle in radians</param>
379 </member> 629 </member>
380 <member name="F:OpenMetaverse.InventoryType.LSL"> 630 <member name="M:OpenMetaverse.Matrix4.ToString">
381 <summary>an LSL Script</summary> 631 <summary>
632 Get a formatted string representation of the vector
633 </summary>
634 <returns>A string representation of the vector</returns>
382 </member> 635 </member>
383 <member name="F:OpenMetaverse.InventoryType.Snapshot"> 636 <member name="F:OpenMetaverse.Matrix4.Zero">
637 <summary>A 4x4 matrix containing all zeroes</summary>
638 </member>
639 <member name="F:OpenMetaverse.Matrix4.Identity">
640 <summary>A 4x4 identity matrix</summary>
641 </member>
642 <member name="T:OpenMetaverse.BlockingQueue`1">
384 <summary> 643 <summary>
644 Same as Queue except Dequeue function blocks until there is an object to return.
645 Note: This class does not need to be synchronized
385 </summary> 646 </summary>
386 </member> 647 </member>
387 <member name="F:OpenMetaverse.InventoryType.Attachment"> 648 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
388 <summary> 649 <summary>
650 Create new BlockingQueue.
389 </summary> 651 </summary>
652 <param name="col">The System.Collections.ICollection to copy elements from</param>
390 </member> 653 </member>
391 <member name="F:OpenMetaverse.InventoryType.Wearable"> 654 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor(System.Int32)">
392 <summary> 655 <summary>
656 Create new BlockingQueue.
393 </summary> 657 </summary>
658 <param name="capacity">The initial number of elements that the queue can contain</param>
394 </member> 659 </member>
395 <member name="F:OpenMetaverse.InventoryType.Animation"> 660 <member name="M:OpenMetaverse.BlockingQueue`1.#ctor">
396 <summary> 661 <summary>
662 Create new BlockingQueue.
397 </summary> 663 </summary>
398 </member> 664 </member>
399 <member name="F:OpenMetaverse.InventoryType.Gesture"> 665 <member name="M:OpenMetaverse.BlockingQueue`1.Finalize">
400 <summary> 666 <summary>
667 BlockingQueue Destructor (Close queue, resume any waiting thread).
401 </summary> 668 </summary>
402 </member> 669 </member>
403 <member name="F:OpenMetaverse.InventoryType.Mesh"> 670 <member name="M:OpenMetaverse.BlockingQueue`1.Clear">
404 <summary> 671 <summary>
672 Remove all objects from the Queue.
405 </summary> 673 </summary>
406 </member> 674 </member>
407 <member name="T:OpenMetaverse.SaleType"> 675 <member name="M:OpenMetaverse.BlockingQueue`1.Close">
408 <summary> 676 <summary>
409 Item Sale Status 677 Remove all objects from the Queue, resume all dequeue threads.
410 </summary> 678 </summary>
411 </member> 679 </member>
412 <member name="F:OpenMetaverse.SaleType.Not"> 680 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue">
413 <summary>Not for sale</summary> 681 <summary>
682 Removes and returns the object at the beginning of the Queue.
683 </summary>
684 <returns>Object in queue.</returns>
414 </member> 685 </member>
415 <member name="F:OpenMetaverse.SaleType.Original"> 686 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue(System.TimeSpan)">
416 <summary>The original is for sale</summary> 687 <summary>
688 Removes and returns the object at the beginning of the Queue.
689 </summary>
690 <param name="timeout">time to wait before returning</param>
691 <returns>Object in queue.</returns>
417 </member> 692 </member>
418 <member name="F:OpenMetaverse.SaleType.Copy"> 693 <member name="M:OpenMetaverse.BlockingQueue`1.Dequeue(System.Int32)">
419 <summary>Copies are for sale</summary> 694 <summary>
695 Removes and returns the object at the beginning of the Queue.
696 </summary>
697 <param name="timeout">time to wait before returning (in milliseconds)</param>
698 <returns>Object in queue.</returns>
420 </member> 699 </member>
421 <member name="F:OpenMetaverse.SaleType.Contents"> 700 <member name="M:OpenMetaverse.BlockingQueue`1.Enqueue(`0)">
422 <summary>The contents of the object are for sale</summary> 701 <summary>
702 Adds an object to the end of the Queue
703 </summary>
704 <param name="obj">Object to put in queue</param>
423 </member> 705 </member>
424 <member name="T:OpenMetaverse.WearableType"> 706 <member name="M:OpenMetaverse.BlockingQueue`1.Open">
425 <summary> 707 <summary>
426 Types of wearable assets 708 Open Queue.
427 </summary> 709 </summary>
428 </member> 710 </member>
429 <member name="F:OpenMetaverse.WearableType.Shape"> 711 <member name="P:OpenMetaverse.BlockingQueue`1.Closed">
430 <summary>Body shape</summary> 712 <summary>
713 Gets flag indicating if queue has been closed.
714 </summary>
431 </member> 715 </member>
432 <member name="F:OpenMetaverse.WearableType.Skin"> 716 <member name="F:OpenMetaverse.Vector4.X">
433 <summary>Skin textures and attributes</summary> 717 <summary>X value</summary>
434 </member> 718 </member>
435 <member name="F:OpenMetaverse.WearableType.Hair"> 719 <member name="F:OpenMetaverse.Vector4.Y">
436 <summary>Hair</summary> 720 <summary>Y value</summary>
437 </member> 721 </member>
438 <member name="F:OpenMetaverse.WearableType.Eyes"> 722 <member name="F:OpenMetaverse.Vector4.Z">
439 <summary>Eyes</summary> 723 <summary>Z value</summary>
440 </member> 724 </member>
441 <member name="F:OpenMetaverse.WearableType.Shirt"> 725 <member name="F:OpenMetaverse.Vector4.W">
442 <summary>Shirt</summary> 726 <summary>W value</summary>
443 </member> 727 </member>
444 <member name="F:OpenMetaverse.WearableType.Pants"> 728 <member name="M:OpenMetaverse.Vector4.#ctor(System.Byte[],System.Int32)">
445 <summary>Pants</summary> 729 <summary>
730 Constructor, builds a vector from a byte array
731 </summary>
732 <param name="byteArray">Byte array containing four four-byte floats</param>
733 <param name="pos">Beginning position in the byte array</param>
446 </member> 734 </member>
447 <member name="F:OpenMetaverse.WearableType.Shoes"> 735 <member name="M:OpenMetaverse.Vector4.ApproxEquals(OpenMetaverse.Vector4,System.Single)">
448 <summary>Shoes</summary> 736 <summary>
737 Test if this vector is equal to another vector, within a given
738 tolerance range
739 </summary>
740 <param name="vec">Vector to test against</param>
741 <param name="tolerance">The acceptable magnitude of difference
742 between the two vectors</param>
743 <returns>True if the magnitude of difference between the two vectors
744 is less than the given tolerance, otherwise false</returns>
449 </member> 745 </member>
450 <member name="F:OpenMetaverse.WearableType.Socks"> 746 <member name="M:OpenMetaverse.Vector4.CompareTo(OpenMetaverse.Vector4)">
451 <summary>Socks</summary> 747 <summary>
748 IComparable.CompareTo implementation
749 </summary>
452 </member> 750 </member>
453 <member name="F:OpenMetaverse.WearableType.Jacket"> 751 <member name="M:OpenMetaverse.Vector4.IsFinite">
454 <summary>Jacket</summary> 752 <summary>
753 Test if this vector is composed of all finite numbers
754 </summary>
455 </member> 755 </member>
456 <member name="F:OpenMetaverse.WearableType.Gloves"> 756 <member name="M:OpenMetaverse.Vector4.FromBytes(System.Byte[],System.Int32)">
457 <summary>Gloves</summary> 757 <summary>
758 Builds a vector from a byte array
759 </summary>
760 <param name="byteArray">Byte array containing a 16 byte vector</param>
761 <param name="pos">Beginning position in the byte array</param>
458 </member> 762 </member>
459 <member name="F:OpenMetaverse.WearableType.Undershirt"> 763 <member name="M:OpenMetaverse.Vector4.GetBytes">
460 <summary>Undershirt</summary> 764 <summary>
765 Returns the raw bytes for this vector
766 </summary>
767 <returns>A 16 byte array containing X, Y, Z, and W</returns>
461 </member> 768 </member>
462 <member name="F:OpenMetaverse.WearableType.Underpants"> 769 <member name="M:OpenMetaverse.Vector4.ToBytes(System.Byte[],System.Int32)">
463 <summary>Underpants</summary> 770 <summary>
771 Writes the raw bytes for this vector to a byte array
772 </summary>
773 <param name="dest">Destination byte array</param>
774 <param name="pos">Position in the destination array to start
775 writing. Must be at least 16 bytes before the end of the array</param>
464 </member> 776 </member>
465 <member name="F:OpenMetaverse.WearableType.Skirt"> 777 <member name="M:OpenMetaverse.Vector4.ToRawString">
466 <summary>Skirt</summary> 778 <summary>
779 Get a string representation of the vector elements with up to three
780 decimal digits and separated by spaces only
781 </summary>
782 <returns>Raw string representation of the vector</returns>
467 </member> 783 </member>
468 <member name="F:OpenMetaverse.WearableType.Alpha"> 784 <member name="F:OpenMetaverse.Vector4.Zero">
469 <summary>Alpha mask to hide parts of the avatar</summary> 785 <summary>A vector with a value of 0,0,0,0</summary>
470 </member> 786 </member>
471 <member name="F:OpenMetaverse.WearableType.Tattoo"> 787 <member name="F:OpenMetaverse.Vector4.One">
472 <summary>Tattoo</summary> 788 <summary>A vector with a value of 1,1,1,1</summary>
473 </member> 789 </member>
474 <member name="F:OpenMetaverse.WearableType.Physics"> 790 <member name="F:OpenMetaverse.Vector4.UnitX">
475 <summary>Physics</summary> 791 <summary>A vector with a value of 1,0,0,0</summary>
476 </member> 792 </member>
477 <member name="F:OpenMetaverse.WearableType.Invalid"> 793 <member name="F:OpenMetaverse.Vector4.UnitY">
478 <summary>Invalid wearable asset</summary> 794 <summary>A vector with a value of 0,1,0,0</summary>
795 </member>
796 <member name="F:OpenMetaverse.Vector4.UnitZ">
797 <summary>A vector with a value of 0,0,1,0</summary>
798 </member>
799 <member name="F:OpenMetaverse.Vector4.UnitW">
800 <summary>A vector with a value of 0,0,0,1</summary>
801 </member>
802 <member name="T:OpenMetaverse.Vector3d">
803 <summary>
804 A three-dimensional vector with doubleing-point values
805 </summary>
806 </member>
807 <member name="F:OpenMetaverse.Vector3d.X">
808 <summary>X value</summary>
809 </member>
810 <member name="F:OpenMetaverse.Vector3d.Y">
811 <summary>Y value</summary>
812 </member>
813 <member name="F:OpenMetaverse.Vector3d.Z">
814 <summary>Z value</summary>
815 </member>
816 <member name="M:OpenMetaverse.Vector3d.#ctor(System.Byte[],System.Int32)">
817 <summary>
818 Constructor, builds a vector from a byte array
819 </summary>
820 <param name="byteArray">Byte array containing three eight-byte doubles</param>
821 <param name="pos">Beginning position in the byte array</param>
822 </member>
823 <member name="M:OpenMetaverse.Vector3d.ApproxEquals(OpenMetaverse.Vector3d,System.Double)">
824 <summary>
825 Test if this vector is equal to another vector, within a given
826 tolerance range
827 </summary>
828 <param name="vec">Vector to test against</param>
829 <param name="tolerance">The acceptable magnitude of difference
830 between the two vectors</param>
831 <returns>True if the magnitude of difference between the two vectors
832 is less than the given tolerance, otherwise false</returns>
833 </member>
834 <member name="M:OpenMetaverse.Vector3d.CompareTo(OpenMetaverse.Vector3d)">
835 <summary>
836 IComparable.CompareTo implementation
837 </summary>
838 </member>
839 <member name="M:OpenMetaverse.Vector3d.IsFinite">
840 <summary>
841 Test if this vector is composed of all finite numbers
842 </summary>
843 </member>
844 <member name="M:OpenMetaverse.Vector3d.FromBytes(System.Byte[],System.Int32)">
845 <summary>
846 Builds a vector from a byte array
847 </summary>
848 <param name="byteArray">Byte array containing a 24 byte vector</param>
849 <param name="pos">Beginning position in the byte array</param>
850 </member>
851 <member name="M:OpenMetaverse.Vector3d.GetBytes">
852 <summary>
853 Returns the raw bytes for this vector
854 </summary>
855 <returns>A 24 byte array containing X, Y, and Z</returns>
856 </member>
857 <member name="M:OpenMetaverse.Vector3d.ToBytes(System.Byte[],System.Int32)">
858 <summary>
859 Writes the raw bytes for this vector to a byte array
860 </summary>
861 <param name="dest">Destination byte array</param>
862 <param name="pos">Position in the destination array to start
863 writing. Must be at least 24 bytes before the end of the array</param>
864 </member>
865 <member name="M:OpenMetaverse.Vector3d.Parse(System.String)">
866 <summary>
867 Parse a vector from a string
868 </summary>
869 <param name="val">A string representation of a 3D vector, enclosed
870 in arrow brackets and separated by commas</param>
871 </member>
872 <member name="M:OpenMetaverse.Vector3d.SmoothStep(OpenMetaverse.Vector3d,OpenMetaverse.Vector3d,System.Double)">
873 <summary>
874 Interpolates between two vectors using a cubic equation
875 </summary>
876 </member>
877 <member name="M:OpenMetaverse.Vector3d.ToString">
878 <summary>
879 Get a formatted string representation of the vector
880 </summary>
881 <returns>A string representation of the vector</returns>
882 </member>
883 <member name="M:OpenMetaverse.Vector3d.ToRawString">
884 <summary>
885 Get a string representation of the vector elements with up to three
886 decimal digits and separated by spaces only
887 </summary>
888 <returns>Raw string representation of the vector</returns>
889 </member>
890 <member name="M:OpenMetaverse.Vector3d.op_Modulus(OpenMetaverse.Vector3d,OpenMetaverse.Vector3d)">
891 <summary>
892 Cross product between two vectors
893 </summary>
894 </member>
895 <member name="M:OpenMetaverse.Vector3d.op_Implicit(OpenMetaverse.Vector3)~OpenMetaverse.Vector3d">
896 <summary>
897 Implicit casting for Vector3 > Vector3d
898 </summary>
899 <param name="value"></param>
900 <returns></returns>
901 </member>
902 <member name="F:OpenMetaverse.Vector3d.Zero">
903 <summary>A vector with a value of 0,0,0</summary>
904 </member>
905 <member name="F:OpenMetaverse.Vector3d.One">
906 <summary>A vector with a value of 1,1,1</summary>
907 </member>
908 <member name="F:OpenMetaverse.Vector3d.UnitX">
909 <summary>A unit vector facing forward (X axis), value of 1,0,0</summary>
910 </member>
911 <member name="F:OpenMetaverse.Vector3d.UnitY">
912 <summary>A unit vector facing left (Y axis), value of 0,1,0</summary>
913 </member>
914 <member name="F:OpenMetaverse.Vector3d.UnitZ">
915 <summary>A unit vector facing up (Z axis), value of 0,0,1</summary>
916 </member>
917 <member name="T:OpenMetaverse.Vector3">
918 <summary>
919 A three-dimensional vector with floating-point values
920 </summary>
921 </member>
922 <member name="F:OpenMetaverse.Vector3.X">
923 <summary>X value</summary>
924 </member>
925 <member name="F:OpenMetaverse.Vector3.Y">
926 <summary>Y value</summary>
927 </member>
928 <member name="F:OpenMetaverse.Vector3.Z">
929 <summary>Z value</summary>
930 </member>
931 <member name="M:OpenMetaverse.Vector3.#ctor(System.Byte[],System.Int32)">
932 <summary>
933 Constructor, builds a vector from a byte array
934 </summary>
935 <param name="byteArray">Byte array containing three four-byte floats</param>
936 <param name="pos">Beginning position in the byte array</param>
937 </member>
938 <member name="M:OpenMetaverse.Vector3.ApproxEquals(OpenMetaverse.Vector3,System.Single)">
939 <summary>
940 Test if this vector is equal to another vector, within a given
941 tolerance range
942 </summary>
943 <param name="vec">Vector to test against</param>
944 <param name="tolerance">The acceptable magnitude of difference
945 between the two vectors</param>
946 <returns>True if the magnitude of difference between the two vectors
947 is less than the given tolerance, otherwise false</returns>
948 </member>
949 <member name="M:OpenMetaverse.Vector3.CompareTo(OpenMetaverse.Vector3)">
950 <summary>
951 IComparable.CompareTo implementation
952 </summary>
953 </member>
954 <member name="M:OpenMetaverse.Vector3.IsFinite">
955 <summary>
956 Test if this vector is composed of all finite numbers
957 </summary>
958 </member>
959 <member name="M:OpenMetaverse.Vector3.FromBytes(System.Byte[],System.Int32)">
960 <summary>
961 Builds a vector from a byte array
962 </summary>
963 <param name="byteArray">Byte array containing a 12 byte vector</param>
964 <param name="pos">Beginning position in the byte array</param>
965 </member>
966 <member name="M:OpenMetaverse.Vector3.GetBytes">
967 <summary>
968 Returns the raw bytes for this vector
969 </summary>
970 <returns>A 12 byte array containing X, Y, and Z</returns>
971 </member>
972 <member name="M:OpenMetaverse.Vector3.ToBytes(System.Byte[],System.Int32)">
973 <summary>
974 Writes the raw bytes for this vector to a byte array
975 </summary>
976 <param name="dest">Destination byte array</param>
977 <param name="pos">Position in the destination array to start
978 writing. Must be at least 12 bytes before the end of the array</param>
979 </member>
980 <member name="M:OpenMetaverse.Vector3.Parse(System.String)">
981 <summary>
982 Parse a vector from a string
983 </summary>
984 <param name="val">A string representation of a 3D vector, enclosed
985 in arrow brackets and separated by commas</param>
986 </member>
987 <member name="M:OpenMetaverse.Vector3.RotationBetween(OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
988 <summary>
989 Calculate the rotation between two vectors
990 </summary>
991 <param name="a">Normalized directional vector (such as 1,0,0 for forward facing)</param>
992 <param name="b">Normalized target vector</param>
993 </member>
994 <member name="M:OpenMetaverse.Vector3.SmoothStep(OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Single)">
995 <summary>
996 Interpolates between two vectors using a cubic equation
997 </summary>
998 </member>
999 <member name="M:OpenMetaverse.Vector3.ToString">
1000 <summary>
1001 Get a formatted string representation of the vector
1002 </summary>
1003 <returns>A string representation of the vector</returns>
1004 </member>
1005 <member name="M:OpenMetaverse.Vector3.ToRawString">
1006 <summary>
1007 Get a string representation of the vector elements with up to three
1008 decimal digits and separated by spaces only
1009 </summary>
1010 <returns>Raw string representation of the vector</returns>
1011 </member>
1012 <member name="M:OpenMetaverse.Vector3.op_Modulus(OpenMetaverse.Vector3,OpenMetaverse.Vector3)">
1013 <summary>
1014 Cross product between two vectors
1015 </summary>
1016 </member>
1017 <member name="M:OpenMetaverse.Vector3.op_Explicit(OpenMetaverse.Vector3d)~OpenMetaverse.Vector3">
1018 <summary>
1019 Explicit casting for Vector3d > Vector3
1020 </summary>
1021 <param name="value"></param>
1022 <returns></returns>
1023 </member>
1024 <member name="F:OpenMetaverse.Vector3.Zero">
1025 <summary>A vector with a value of 0,0,0</summary>
1026 </member>
1027 <member name="F:OpenMetaverse.Vector3.One">
1028 <summary>A vector with a value of 1,1,1</summary>
1029 </member>
1030 <member name="F:OpenMetaverse.Vector3.UnitX">
1031 <summary>A unit vector facing forward (X axis), value 1,0,0</summary>
1032 </member>
1033 <member name="F:OpenMetaverse.Vector3.UnitY">
1034 <summary>A unit vector facing left (Y axis), value 0,1,0</summary>
1035 </member>
1036 <member name="F:OpenMetaverse.Vector3.UnitZ">
1037 <summary>A unit vector facing up (Z axis), value 0,0,1</summary>
479 </member> 1038 </member>
480 <member name="T:OpenMetaverse.PCode"> 1039 <member name="T:OpenMetaverse.PCode">
481 <summary> 1040 <summary>
@@ -515,35 +1074,28 @@
515 <summary>Whether physics are enabled for this object</summary> 1074 <summary>Whether physics are enabled for this object</summary>
516 </member> 1075 </member>
517 <member name="F:OpenMetaverse.PrimFlags.CreateSelected"> 1076 <member name="F:OpenMetaverse.PrimFlags.CreateSelected">
518 <summary> 1077 <summary></summary>
519 </summary>
520 </member> 1078 </member>
521 <member name="F:OpenMetaverse.PrimFlags.ObjectModify"> 1079 <member name="F:OpenMetaverse.PrimFlags.ObjectModify">
522 <summary> 1080 <summary></summary>
523 </summary>
524 </member> 1081 </member>
525 <member name="F:OpenMetaverse.PrimFlags.ObjectCopy"> 1082 <member name="F:OpenMetaverse.PrimFlags.ObjectCopy">
526 <summary> 1083 <summary></summary>
527 </summary>
528 </member> 1084 </member>
529 <member name="F:OpenMetaverse.PrimFlags.ObjectAnyOwner"> 1085 <member name="F:OpenMetaverse.PrimFlags.ObjectAnyOwner">
530 <summary> 1086 <summary></summary>
531 </summary>
532 </member> 1087 </member>
533 <member name="F:OpenMetaverse.PrimFlags.ObjectYouOwner"> 1088 <member name="F:OpenMetaverse.PrimFlags.ObjectYouOwner">
534 <summary> 1089 <summary></summary>
535 </summary>
536 </member> 1090 </member>
537 <member name="F:OpenMetaverse.PrimFlags.Scripted"> 1091 <member name="F:OpenMetaverse.PrimFlags.Scripted">
538 <summary> 1092 <summary></summary>
539 </summary>
540 </member> 1093 </member>
541 <member name="F:OpenMetaverse.PrimFlags.Touch"> 1094 <member name="F:OpenMetaverse.PrimFlags.Touch">
542 <summary>Whether this object contains an active touch script</summary> 1095 <summary>Whether this object contains an active touch script</summary>
543 </member> 1096 </member>
544 <member name="F:OpenMetaverse.PrimFlags.ObjectMove"> 1097 <member name="F:OpenMetaverse.PrimFlags.ObjectMove">
545 <summary> 1098 <summary></summary>
546 </summary>
547 </member> 1099 </member>
548 <member name="F:OpenMetaverse.PrimFlags.Money"> 1100 <member name="F:OpenMetaverse.PrimFlags.Money">
549 <summary>Whether this object can receive payments</summary> 1101 <summary>Whether this object can receive payments</summary>
@@ -552,54 +1104,43 @@
552 <summary>Whether this object is phantom (no collisions)</summary> 1104 <summary>Whether this object is phantom (no collisions)</summary>
553 </member> 1105 </member>
554 <member name="F:OpenMetaverse.PrimFlags.InventoryEmpty"> 1106 <member name="F:OpenMetaverse.PrimFlags.InventoryEmpty">
555 <summary> 1107 <summary></summary>
556 </summary>
557 </member> 1108 </member>
558 <member name="F:OpenMetaverse.PrimFlags.JointHinge"> 1109 <member name="F:OpenMetaverse.PrimFlags.JointHinge">
559 <summary> 1110 <summary></summary>
560 </summary>
561 </member> 1111 </member>
562 <member name="F:OpenMetaverse.PrimFlags.JointP2P"> 1112 <member name="F:OpenMetaverse.PrimFlags.JointP2P">
563 <summary> 1113 <summary></summary>
564 </summary>
565 </member> 1114 </member>
566 <member name="F:OpenMetaverse.PrimFlags.JointLP2P"> 1115 <member name="F:OpenMetaverse.PrimFlags.JointLP2P">
567 <summary> 1116 <summary></summary>
568 </summary>
569 </member> 1117 </member>
570 <member name="F:OpenMetaverse.PrimFlags.JointWheel"> 1118 <member name="F:OpenMetaverse.PrimFlags.JointWheel">
571 <summary>Deprecated</summary> 1119 <summary>Deprecated</summary>
572 </member> 1120 </member>
573 <member name="F:OpenMetaverse.PrimFlags.AllowInventoryDrop"> 1121 <member name="F:OpenMetaverse.PrimFlags.AllowInventoryDrop">
574 <summary> 1122 <summary></summary>
575 </summary>
576 </member> 1123 </member>
577 <member name="F:OpenMetaverse.PrimFlags.ObjectTransfer"> 1124 <member name="F:OpenMetaverse.PrimFlags.ObjectTransfer">
578 <summary> 1125 <summary></summary>
579 </summary>
580 </member> 1126 </member>
581 <member name="F:OpenMetaverse.PrimFlags.ObjectGroupOwned"> 1127 <member name="F:OpenMetaverse.PrimFlags.ObjectGroupOwned">
582 <summary> 1128 <summary></summary>
583 </summary>
584 </member> 1129 </member>
585 <member name="F:OpenMetaverse.PrimFlags.ObjectYouOfficer"> 1130 <member name="F:OpenMetaverse.PrimFlags.ObjectYouOfficer">
586 <summary>Deprecated</summary> 1131 <summary>Deprecated</summary>
587 </member> 1132 </member>
588 <member name="F:OpenMetaverse.PrimFlags.CameraDecoupled"> 1133 <member name="F:OpenMetaverse.PrimFlags.CameraDecoupled">
589 <summary> 1134 <summary></summary>
590 </summary>
591 </member> 1135 </member>
592 <member name="F:OpenMetaverse.PrimFlags.AnimSource"> 1136 <member name="F:OpenMetaverse.PrimFlags.AnimSource">
593 <summary> 1137 <summary></summary>
594 </summary>
595 </member> 1138 </member>
596 <member name="F:OpenMetaverse.PrimFlags.CameraSource"> 1139 <member name="F:OpenMetaverse.PrimFlags.CameraSource">
597 <summary> 1140 <summary></summary>
598 </summary>
599 </member> 1141 </member>
600 <member name="F:OpenMetaverse.PrimFlags.CastShadows"> 1142 <member name="F:OpenMetaverse.PrimFlags.CastShadows">
601 <summary> 1143 <summary></summary>
602 </summary>
603 </member> 1144 </member>
604 <member name="F:OpenMetaverse.PrimFlags.DieAtEdge"> 1145 <member name="F:OpenMetaverse.PrimFlags.DieAtEdge">
605 <summary>Server flag, will not be sent to clients. Specifies that 1146 <summary>Server flag, will not be sent to clients. Specifies that
@@ -618,20 +1159,16 @@
618 the object is hovering/flying</summary> 1159 the object is hovering/flying</summary>
619 </member> 1160 </member>
620 <member name="F:OpenMetaverse.PrimFlags.ObjectOwnerModify"> 1161 <member name="F:OpenMetaverse.PrimFlags.ObjectOwnerModify">
621 <summary> 1162 <summary></summary>
622 </summary>
623 </member> 1163 </member>
624 <member name="F:OpenMetaverse.PrimFlags.TemporaryOnRez"> 1164 <member name="F:OpenMetaverse.PrimFlags.TemporaryOnRez">
625 <summary> 1165 <summary></summary>
626 </summary>
627 </member> 1166 </member>
628 <member name="F:OpenMetaverse.PrimFlags.Temporary"> 1167 <member name="F:OpenMetaverse.PrimFlags.Temporary">
629 <summary> 1168 <summary></summary>
630 </summary>
631 </member> 1169 </member>
632 <member name="F:OpenMetaverse.PrimFlags.ZlibCompressed"> 1170 <member name="F:OpenMetaverse.PrimFlags.ZlibCompressed">
633 <summary> 1171 <summary></summary>
634 </summary>
635 </member> 1172 </member>
636 <member name="T:OpenMetaverse.SoundFlags"> 1173 <member name="T:OpenMetaverse.SoundFlags">
637 <summary> 1174 <summary>
@@ -639,32 +1176,25 @@
639 </summary> 1176 </summary>
640 </member> 1177 </member>
641 <member name="F:OpenMetaverse.SoundFlags.None"> 1178 <member name="F:OpenMetaverse.SoundFlags.None">
642 <summary> 1179 <summary></summary>
643 </summary>
644 </member> 1180 </member>
645 <member name="F:OpenMetaverse.SoundFlags.Loop"> 1181 <member name="F:OpenMetaverse.SoundFlags.Loop">
646 <summary> 1182 <summary></summary>
647 </summary>
648 </member> 1183 </member>
649 <member name="F:OpenMetaverse.SoundFlags.SyncMaster"> 1184 <member name="F:OpenMetaverse.SoundFlags.SyncMaster">
650 <summary> 1185 <summary></summary>
651 </summary>
652 </member> 1186 </member>
653 <member name="F:OpenMetaverse.SoundFlags.SyncSlave"> 1187 <member name="F:OpenMetaverse.SoundFlags.SyncSlave">
654 <summary> 1188 <summary></summary>
655 </summary>
656 </member> 1189 </member>
657 <member name="F:OpenMetaverse.SoundFlags.SyncPending"> 1190 <member name="F:OpenMetaverse.SoundFlags.SyncPending">
658 <summary> 1191 <summary></summary>
659 </summary>
660 </member> 1192 </member>
661 <member name="F:OpenMetaverse.SoundFlags.Queue"> 1193 <member name="F:OpenMetaverse.SoundFlags.Queue">
662 <summary> 1194 <summary></summary>
663 </summary>
664 </member> 1195 </member>
665 <member name="F:OpenMetaverse.SoundFlags.Stop"> 1196 <member name="F:OpenMetaverse.SoundFlags.Stop">
666 <summary> 1197 <summary></summary>
667 </summary>
668 </member> 1198 </member>
669 <member name="T:OpenMetaverse.Material"> 1199 <member name="T:OpenMetaverse.Material">
670 <summary> 1200 <summary>
@@ -672,36 +1202,28 @@
672 </summary> 1202 </summary>
673 </member> 1203 </member>
674 <member name="F:OpenMetaverse.Material.Stone"> 1204 <member name="F:OpenMetaverse.Material.Stone">
675 <summary> 1205 <summary></summary>
676 </summary>
677 </member> 1206 </member>
678 <member name="F:OpenMetaverse.Material.Metal"> 1207 <member name="F:OpenMetaverse.Material.Metal">
679 <summary> 1208 <summary></summary>
680 </summary>
681 </member> 1209 </member>
682 <member name="F:OpenMetaverse.Material.Glass"> 1210 <member name="F:OpenMetaverse.Material.Glass">
683 <summary> 1211 <summary></summary>
684 </summary>
685 </member> 1212 </member>
686 <member name="F:OpenMetaverse.Material.Wood"> 1213 <member name="F:OpenMetaverse.Material.Wood">
687 <summary> 1214 <summary></summary>
688 </summary>
689 </member> 1215 </member>
690 <member name="F:OpenMetaverse.Material.Flesh"> 1216 <member name="F:OpenMetaverse.Material.Flesh">
691 <summary> 1217 <summary></summary>
692 </summary>
693 </member> 1218 </member>
694 <member name="F:OpenMetaverse.Material.Plastic"> 1219 <member name="F:OpenMetaverse.Material.Plastic">
695 <summary> 1220 <summary></summary>
696 </summary>
697 </member> 1221 </member>
698 <member name="F:OpenMetaverse.Material.Rubber"> 1222 <member name="F:OpenMetaverse.Material.Rubber">
699 <summary> 1223 <summary></summary>
700 </summary>
701 </member> 1224 </member>
702 <member name="F:OpenMetaverse.Material.Light"> 1225 <member name="F:OpenMetaverse.Material.Light">
703 <summary> 1226 <summary></summary>
704 </summary>
705 </member> 1227 </member>
706 <member name="T:OpenMetaverse.PrimType"> 1228 <member name="T:OpenMetaverse.PrimType">
707 <summary> 1229 <summary>
@@ -711,7 +1233,7 @@
711 <member name="T:OpenMetaverse.ExtraParamType"> 1233 <member name="T:OpenMetaverse.ExtraParamType">
712 <summary> 1234 <summary>
713 Extra parameters for primitives, these flags are for features that have 1235 Extra parameters for primitives, these flags are for features that have
714 been added after the original ObjectFlags that has all eight bits 1236 been added after the original ObjectFlags that has all eight bits
715 reserved already 1237 reserved already
716 </summary> 1238 </summary>
717 </member> 1239 </member>
@@ -724,139 +1246,119 @@
724 <member name="F:OpenMetaverse.ExtraParamType.Sculpt"> 1246 <member name="F:OpenMetaverse.ExtraParamType.Sculpt">
725 <summary>Whether this object is a sculpted prim</summary> 1247 <summary>Whether this object is a sculpted prim</summary>
726 </member> 1248 </member>
1249 <member name="F:OpenMetaverse.ExtraParamType.LightImage">
1250 <summary>Whether this object is a light image map</summary>
1251 </member>
727 <member name="F:OpenMetaverse.ExtraParamType.Mesh"> 1252 <member name="F:OpenMetaverse.ExtraParamType.Mesh">
728 <summary>Whether this object is a mesh</summary> 1253 <summary>Whether this object is a mesh</summary>
729 </member> 1254 </member>
730 <member name="T:OpenMetaverse.JointType"> 1255 <member name="T:OpenMetaverse.JointType">
731 <summary> 1256 <summary>
1257
732 </summary> 1258 </summary>
733 </member> 1259 </member>
734 <member name="F:OpenMetaverse.JointType.Invalid"> 1260 <member name="F:OpenMetaverse.JointType.Invalid">
735 <summary> 1261 <summary></summary>
736 </summary>
737 </member> 1262 </member>
738 <member name="F:OpenMetaverse.JointType.Hinge"> 1263 <member name="F:OpenMetaverse.JointType.Hinge">
739 <summary> 1264 <summary></summary>
740 </summary>
741 </member> 1265 </member>
742 <member name="F:OpenMetaverse.JointType.Point"> 1266 <member name="F:OpenMetaverse.JointType.Point">
743 <summary> 1267 <summary></summary>
744 </summary>
745 </member> 1268 </member>
746 <member name="T:OpenMetaverse.SculptType"> 1269 <member name="T:OpenMetaverse.SculptType">
747 <summary> 1270 <summary>
1271
748 </summary> 1272 </summary>
749 </member> 1273 </member>
750 <member name="F:OpenMetaverse.SculptType.None"> 1274 <member name="F:OpenMetaverse.SculptType.None">
751 <summary> 1275 <summary></summary>
752 </summary>
753 </member> 1276 </member>
754 <member name="F:OpenMetaverse.SculptType.Sphere"> 1277 <member name="F:OpenMetaverse.SculptType.Sphere">
755 <summary> 1278 <summary></summary>
756 </summary>
757 </member> 1279 </member>
758 <member name="F:OpenMetaverse.SculptType.Torus"> 1280 <member name="F:OpenMetaverse.SculptType.Torus">
759 <summary> 1281 <summary></summary>
760 </summary>
761 </member> 1282 </member>
762 <member name="F:OpenMetaverse.SculptType.Plane"> 1283 <member name="F:OpenMetaverse.SculptType.Plane">
763 <summary> 1284 <summary></summary>
764 </summary>
765 </member> 1285 </member>
766 <member name="F:OpenMetaverse.SculptType.Cylinder"> 1286 <member name="F:OpenMetaverse.SculptType.Cylinder">
767 <summary> 1287 <summary></summary>
768 </summary>
769 </member> 1288 </member>
770 <member name="F:OpenMetaverse.SculptType.Mesh"> 1289 <member name="F:OpenMetaverse.SculptType.Mesh">
771 <summary> 1290 <summary></summary>
772 </summary>
773 </member> 1291 </member>
774 <member name="F:OpenMetaverse.SculptType.Invert"> 1292 <member name="F:OpenMetaverse.SculptType.Invert">
775 <summary> 1293 <summary></summary>
776 </summary>
777 </member> 1294 </member>
778 <member name="F:OpenMetaverse.SculptType.Mirror"> 1295 <member name="F:OpenMetaverse.SculptType.Mirror">
779 <summary> 1296 <summary></summary>
780 </summary>
781 </member> 1297 </member>
782 <member name="T:OpenMetaverse.FaceType"> 1298 <member name="T:OpenMetaverse.FaceType">
783 <summary> 1299 <summary>
1300
784 </summary> 1301 </summary>
785 </member> 1302 </member>
786 <member name="F:OpenMetaverse.FaceType.PathBegin"> 1303 <member name="F:OpenMetaverse.FaceType.PathBegin">
787 <summary> 1304 <summary></summary>
788 </summary>
789 </member> 1305 </member>
790 <member name="F:OpenMetaverse.FaceType.PathEnd"> 1306 <member name="F:OpenMetaverse.FaceType.PathEnd">
791 <summary> 1307 <summary></summary>
792 </summary>
793 </member> 1308 </member>
794 <member name="F:OpenMetaverse.FaceType.InnerSide"> 1309 <member name="F:OpenMetaverse.FaceType.InnerSide">
795 <summary> 1310 <summary></summary>
796 </summary>
797 </member> 1311 </member>
798 <member name="F:OpenMetaverse.FaceType.ProfileBegin"> 1312 <member name="F:OpenMetaverse.FaceType.ProfileBegin">
799 <summary> 1313 <summary></summary>
800 </summary>
801 </member> 1314 </member>
802 <member name="F:OpenMetaverse.FaceType.ProfileEnd"> 1315 <member name="F:OpenMetaverse.FaceType.ProfileEnd">
803 <summary> 1316 <summary></summary>
804 </summary>
805 </member> 1317 </member>
806 <member name="F:OpenMetaverse.FaceType.OuterSide0"> 1318 <member name="F:OpenMetaverse.FaceType.OuterSide0">
807 <summary> 1319 <summary></summary>
808 </summary>
809 </member> 1320 </member>
810 <member name="F:OpenMetaverse.FaceType.OuterSide1"> 1321 <member name="F:OpenMetaverse.FaceType.OuterSide1">
811 <summary> 1322 <summary></summary>
812 </summary>
813 </member> 1323 </member>
814 <member name="F:OpenMetaverse.FaceType.OuterSide2"> 1324 <member name="F:OpenMetaverse.FaceType.OuterSide2">
815 <summary> 1325 <summary></summary>
816 </summary>
817 </member> 1326 </member>
818 <member name="F:OpenMetaverse.FaceType.OuterSide3"> 1327 <member name="F:OpenMetaverse.FaceType.OuterSide3">
819 <summary> 1328 <summary></summary>
820 </summary>
821 </member> 1329 </member>
822 <member name="T:OpenMetaverse.ObjectCategory"> 1330 <member name="T:OpenMetaverse.ObjectCategory">
823 <summary> 1331 <summary>
1332
824 </summary> 1333 </summary>
825 </member> 1334 </member>
826 <member name="F:OpenMetaverse.ObjectCategory.Invalid"> 1335 <member name="F:OpenMetaverse.ObjectCategory.Invalid">
827 <summary> 1336 <summary></summary>
828 </summary>
829 </member> 1337 </member>
830 <member name="F:OpenMetaverse.ObjectCategory.None"> 1338 <member name="F:OpenMetaverse.ObjectCategory.None">
831 <summary> 1339 <summary></summary>
832 </summary>
833 </member> 1340 </member>
834 <member name="F:OpenMetaverse.ObjectCategory.Owner"> 1341 <member name="F:OpenMetaverse.ObjectCategory.Owner">
835 <summary> 1342 <summary></summary>
836 </summary>
837 </member> 1343 </member>
838 <member name="F:OpenMetaverse.ObjectCategory.Group"> 1344 <member name="F:OpenMetaverse.ObjectCategory.Group">
839 <summary> 1345 <summary></summary>
840 </summary>
841 </member> 1346 </member>
842 <member name="F:OpenMetaverse.ObjectCategory.Other"> 1347 <member name="F:OpenMetaverse.ObjectCategory.Other">
843 <summary> 1348 <summary></summary>
844 </summary>
845 </member> 1349 </member>
846 <member name="F:OpenMetaverse.ObjectCategory.Selected"> 1350 <member name="F:OpenMetaverse.ObjectCategory.Selected">
847 <summary> 1351 <summary></summary>
848 </summary>
849 </member> 1352 </member>
850 <member name="F:OpenMetaverse.ObjectCategory.Temporary"> 1353 <member name="F:OpenMetaverse.ObjectCategory.Temporary">
851 <summary> 1354 <summary></summary>
852 </summary>
853 </member> 1355 </member>
854 <member name="T:OpenMetaverse.AttachmentPoint"> 1356 <member name="T:OpenMetaverse.AttachmentPoint">
855 <summary> 1357 <summary>
856 Attachment points for objects on avatar bodies 1358 Attachment points for objects on avatar bodies
857 </summary> 1359 </summary>
858 <remarks> 1360 <remarks>
859 Both InventoryObject and InventoryAttachment types can be attached 1361 Both InventoryObject and InventoryAttachment types can be attached
860 </remarks> 1362 </remarks>
861 </member> 1363 </member>
862 <member name="F:OpenMetaverse.AttachmentPoint.Default"> 1364 <member name="F:OpenMetaverse.AttachmentPoint.Default">
@@ -976,6 +1478,12 @@
976 <member name="F:OpenMetaverse.AttachmentPoint.HUDBottomRight"> 1478 <member name="F:OpenMetaverse.AttachmentPoint.HUDBottomRight">
977 <summary>HUD Bottom-right</summary> 1479 <summary>HUD Bottom-right</summary>
978 </member> 1480 </member>
1481 <member name="F:OpenMetaverse.AttachmentPoint.Neck">
1482 <summary>Neck</summary>
1483 </member>
1484 <member name="F:OpenMetaverse.AttachmentPoint.Root">
1485 <summary>Avatar Center</summary>
1486 </member>
979 <member name="T:OpenMetaverse.Tree"> 1487 <member name="T:OpenMetaverse.Tree">
980 <summary> 1488 <summary>
981 Tree foliage types 1489 Tree foliage types
@@ -1050,28 +1558,22 @@
1050 </summary> 1558 </summary>
1051 </member> 1559 </member>
1052 <member name="F:OpenMetaverse.Grass.Grass0"> 1560 <member name="F:OpenMetaverse.Grass.Grass0">
1053 <summary> 1561 <summary></summary>
1054 </summary>
1055 </member> 1562 </member>
1056 <member name="F:OpenMetaverse.Grass.Grass1"> 1563 <member name="F:OpenMetaverse.Grass.Grass1">
1057 <summary> 1564 <summary></summary>
1058 </summary>
1059 </member> 1565 </member>
1060 <member name="F:OpenMetaverse.Grass.Grass2"> 1566 <member name="F:OpenMetaverse.Grass.Grass2">
1061 <summary> 1567 <summary></summary>
1062 </summary>
1063 </member> 1568 </member>
1064 <member name="F:OpenMetaverse.Grass.Grass3"> 1569 <member name="F:OpenMetaverse.Grass.Grass3">
1065 <summary> 1570 <summary></summary>
1066 </summary>
1067 </member> 1571 </member>
1068 <member name="F:OpenMetaverse.Grass.Grass4"> 1572 <member name="F:OpenMetaverse.Grass.Grass4">
1069 <summary> 1573 <summary></summary>
1070 </summary>
1071 </member> 1574 </member>
1072 <member name="F:OpenMetaverse.Grass.Undergrowth1"> 1575 <member name="F:OpenMetaverse.Grass.Undergrowth1">
1073 <summary> 1576 <summary></summary>
1074 </summary>
1075 </member> 1577 </member>
1076 <member name="T:OpenMetaverse.ClickAction"> 1578 <member name="T:OpenMetaverse.ClickAction">
1077 <summary> 1579 <summary>
@@ -1113,313 +1615,228 @@
1113 <member name="F:OpenMetaverse.PhysicsShapeType.ConvexHull"> 1615 <member name="F:OpenMetaverse.PhysicsShapeType.ConvexHull">
1114 <summary>Use convex hull represantion of this prim</summary> 1616 <summary>Use convex hull represantion of this prim</summary>
1115 </member> 1617 </member>
1116 <member name="F:OpenMetaverse.ExpiringCache`2.syncRoot"> 1618 <member name="T:OpenMetaverse.Color4">
1117 <summary>For thread safety</summary>
1118 </member>
1119 <member name="F:OpenMetaverse.ExpiringCache`2.isPurging">
1120 <summary>For thread safety</summary>
1121 </member>
1122 <member name="M:OpenMetaverse.ExpiringCache`2.PurgeCache(System.Object,System.Timers.ElapsedEventArgs)">
1123 <summary>
1124 Purges expired objects from the cache. Called automatically by the purge timer.
1125 </summary>
1126 </member>
1127 <member name="T:OpenMetaverse.LocklessQueue`1">
1128 <summary>
1129 A thread-safe lockless queue that supports multiple readers and
1130 multiple writers
1131 </summary>
1132 </member>
1133 <member name="M:OpenMetaverse.LocklessQueue`1.#ctor">
1134 <summary>
1135 Constructor
1136 </summary>
1137 </member>
1138 <member name="T:OpenMetaverse.LocklessQueue`1.SingleLinkNode">
1139 <summary>
1140 Provides a node container for data in a singly linked list
1141 </summary>
1142 </member>
1143 <member name="M:OpenMetaverse.LocklessQueue`1.SingleLinkNode.#ctor">
1144 <summary>
1145 Constructor
1146 </summary>
1147 </member>
1148 <member name="M:OpenMetaverse.LocklessQueue`1.SingleLinkNode.#ctor(`0)">
1149 <summary> 1619 <summary>
1150 Constructor 1620 An 8-bit color structure including an alpha channel
1151 </summary> 1621 </summary>
1152 </member> 1622 </member>
1153 <member name="F:OpenMetaverse.LocklessQueue`1.SingleLinkNode.Next"> 1623 <member name="F:OpenMetaverse.Color4.R">
1154 <summary>Pointer to the next node in list</summary> 1624 <summary>Red</summary>
1155 </member>
1156 <member name="F:OpenMetaverse.LocklessQueue`1.SingleLinkNode.Item">
1157 <summary>The data contained by the node</summary>
1158 </member>
1159 <member name="F:OpenMetaverse.LocklessQueue`1.head">
1160 <summary>Queue head</summary>
1161 </member> 1625 </member>
1162 <member name="F:OpenMetaverse.LocklessQueue`1.tail"> 1626 <member name="F:OpenMetaverse.Color4.G">
1163 <summary>Queue tail</summary> 1627 <summary>Green</summary>
1164 </member> 1628 </member>
1165 <member name="F:OpenMetaverse.LocklessQueue`1.count"> 1629 <member name="F:OpenMetaverse.Color4.B">
1166 <summary>Queue item count</summary> 1630 <summary>Blue</summary>
1167 </member> 1631 </member>
1168 <member name="P:OpenMetaverse.LocklessQueue`1.Count"> 1632 <member name="F:OpenMetaverse.Color4.A">
1169 <summary>Gets the current number of items in the queue. Since this 1633 <summary>Alpha</summary>
1170 is a lockless collection this value should be treated as a close
1171 estimate</summary>
1172 </member> 1634 </member>
1173 <member name="M:OpenMetaverse.LocklessQueue`1.Enqueue(`0)"> 1635 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)">
1174 <summary> 1636 <summary>
1175 Enqueue an item 1637
1176 </summary> 1638 </summary>
1177 <param name="item">Item to enqeue</param> 1639 <param name="r"></param>
1640 <param name="g"></param>
1641 <param name="b"></param>
1642 <param name="a"></param>
1178 </member> 1643 </member>
1179 <member name="M:OpenMetaverse.LocklessQueue`1.TryDequeue(`0@)"> 1644 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte[],System.Int32,System.Boolean)">
1180 <summary> 1645 <summary>
1181 Try to dequeue an item 1646 Builds a color from a byte array
1182 </summary> 1647 </summary>
1183 <param name="item">Dequeued item if the dequeue was successful</param> 1648 <param name="byteArray">Byte array containing a 16 byte color</param>
1184 <returns>True if an item was successfully deqeued, otherwise false</returns> 1649 <param name="pos">Beginning position in the byte array</param>
1185 </member> 1650 <param name="inverted">True if the byte array stores inverted values,
1186 <member name="F:OpenMetaverse.Matrix4.Zero"> 1651 otherwise false. For example the color black (fully opaque) inverted
1187 <summary>A 4x4 matrix containing all zeroes</summary> 1652 would be 0xFF 0xFF 0xFF 0x00</param>
1188 </member>
1189 <member name="F:OpenMetaverse.Matrix4.Identity">
1190 <summary>A 4x4 identity matrix</summary>
1191 </member> 1653 </member>
1192 <member name="M:OpenMetaverse.Matrix4.GetEulerAngles(System.Single@,System.Single@,System.Single@)"> 1654 <member name="M:OpenMetaverse.Color4.#ctor(System.Byte[],System.Int32,System.Boolean,System.Boolean)">
1193 <summary> 1655 <summary>
1194 Convert this matrix to euler rotations 1656 Returns the raw bytes for this vector
1195 </summary> 1657 </summary>
1196 <param name="roll">X euler angle</param> 1658 <param name="byteArray">Byte array containing a 16 byte color</param>
1197 <param name="pitch">Y euler angle</param> 1659 <param name="pos">Beginning position in the byte array</param>
1198 <param name="yaw">Z euler angle</param> 1660 <param name="inverted">True if the byte array stores inverted values,
1661 otherwise false. For example the color black (fully opaque) inverted
1662 would be 0xFF 0xFF 0xFF 0x00</param>
1663 <param name="alphaInverted">True if the alpha value is inverted in
1664 addition to whatever the inverted parameter is. Setting inverted true
1665 and alphaInverted true will flip the alpha value back to non-inverted,
1666 but keep the other color bytes inverted</param>
1667 <returns>A 16 byte array containing R, G, B, and A</returns>
1199 </member> 1668 </member>
1200 <member name="M:OpenMetaverse.Matrix4.GetQuaternion"> 1669 <member name="M:OpenMetaverse.Color4.#ctor(OpenMetaverse.Color4)">
1201 <summary> 1670 <summary>
1202 Convert this matrix to a quaternion rotation 1671 Copy constructor
1203 </summary> 1672 </summary>
1204 <returns>A quaternion representation of this rotation matrix</returns> 1673 <param name="color">Color to copy</param>
1205 </member> 1674 </member>
1206 <member name="M:OpenMetaverse.Matrix4.CreateFromEulers(System.Single,System.Single,System.Single)"> 1675 <member name="M:OpenMetaverse.Color4.CompareTo(OpenMetaverse.Color4)">
1207 <summary> 1676 <summary>
1208 Construct a matrix from euler rotation values in radians 1677 IComparable.CompareTo implementation
1209 </summary> 1678 </summary>
1210 <param name="roll">X euler angle in radians</param> 1679 <remarks>Sorting ends up like this: |--Grayscale--||--Color--|.
1211 <param name="pitch">Y euler angle in radians</param> 1680 Alpha is only used when the colors are otherwise equivalent</remarks>
1212 <param name="yaw">Z euler angle in radians</param>
1213 </member> 1681 </member>
1214 <member name="M:OpenMetaverse.Matrix4.ToString"> 1682 <member name="M:OpenMetaverse.Color4.FromBytes(System.Byte[],System.Int32,System.Boolean,System.Boolean)">
1215 <summary> 1683 <summary>
1216 Get a formatted string representation of the vector 1684 Builds a color from a byte array
1217 </summary> 1685 </summary>
1218 <returns>A string representation of the vector</returns> 1686 <param name="byteArray">Byte array containing a 16 byte color</param>
1687 <param name="pos">Beginning position in the byte array</param>
1688 <param name="inverted">True if the byte array stores inverted values,
1689 otherwise false. For example the color black (fully opaque) inverted
1690 would be 0xFF 0xFF 0xFF 0x00</param>
1691 <param name="alphaInverted">True if the alpha value is inverted in
1692 addition to whatever the inverted parameter is. Setting inverted true
1693 and alphaInverted true will flip the alpha value back to non-inverted,
1694 but keep the other color bytes inverted</param>
1219 </member> 1695 </member>
1220 <member name="T:OpenMetaverse.Parallel"> 1696 <member name="M:OpenMetaverse.Color4.ToBytes(System.Byte[],System.Int32)">
1221 <summary> 1697 <summary>
1222 Provides helper methods for parallelizing loops 1698 Writes the raw bytes for this color to a byte array
1223 </summary> 1699 </summary>
1700 <param name="dest">Destination byte array</param>
1701 <param name="pos">Position in the destination array to start
1702 writing. Must be at least 16 bytes before the end of the array</param>
1224 </member> 1703 </member>
1225 <member name="M:OpenMetaverse.Parallel.For(System.Int32,System.Int32,System.Action{System.Int32})"> 1704 <member name="M:OpenMetaverse.Color4.ToBytes(System.Byte[],System.Int32,System.Boolean)">
1226 <summary> 1705 <summary>
1227 Executes a for loop in which iterations may run in parallel 1706 Serializes this color into four bytes in a byte array
1228 </summary> 1707 </summary>
1229 <param name="fromInclusive">The loop will be started at this index</param> 1708 <param name="dest">Destination byte array</param>
1230 <param name="toExclusive">The loop will be terminated before this index is reached</param> 1709 <param name="pos">Position in the destination array to start
1231 <param name="body">Method body to run for each iteration of the loop</param> 1710 writing. Must be at least 4 bytes before the end of the array</param>
1711 <param name="inverted">True to invert the output (1.0 becomes 0
1712 instead of 255)</param>
1232 </member> 1713 </member>
1233 <member name="M:OpenMetaverse.Parallel.For(System.Int32,System.Int32,System.Int32,System.Action{System.Int32})"> 1714 <member name="M:OpenMetaverse.Color4.ToFloatBytes(System.Byte[],System.Int32)">
1234 <summary> 1715 <summary>
1235 Executes a for loop in which iterations may run in parallel 1716 Writes the raw bytes for this color to a byte array
1236 </summary> 1717 </summary>
1237 <param name="threadCount">The number of concurrent execution threads to run</param> 1718 <param name="dest">Destination byte array</param>
1238 <param name="fromInclusive">The loop will be started at this index</param> 1719 <param name="pos">Position in the destination array to start
1239 <param name="toExclusive">The loop will be terminated before this index is reached</param> 1720 writing. Must be at least 16 bytes before the end of the array</param>
1240 <param name="body">Method body to run for each iteration of the loop</param>
1241 </member> 1721 </member>
1242 <member name="M:OpenMetaverse.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})"> 1722 <member name="M:OpenMetaverse.Color4.ClampValues">
1243 <summary> 1723 <summary>
1244 Executes a foreach loop in which iterations may run in parallel 1724 Ensures that values are in range 0-1
1245 </summary> 1725 </summary>
1246 <typeparam name="T">Object type that the collection wraps</typeparam>
1247 <param name="enumerable">An enumerable collection to iterate over</param>
1248 <param name="body">Method body to run for each object in the collection</param>
1249 </member> 1726 </member>
1250 <member name="M:OpenMetaverse.Parallel.ForEach``1(System.Int32,System.Collections.Generic.IEnumerable{``0},System.Action{``0})"> 1727 <member name="M:OpenMetaverse.Color4.FromHSV(System.Double,System.Double,System.Double)">
1251 <summary> 1728 <summary>
1252 Executes a foreach loop in which iterations may run in parallel 1729 Create an RGB color from a hue, saturation, value combination
1253 </summary> 1730 </summary>
1254 <typeparam name="T">Object type that the collection wraps</typeparam> 1731 <param name="hue">Hue</param>
1255 <param name="threadCount">The number of concurrent execution threads to run</param> 1732 <param name="saturation">Saturation</param>
1256 <param name="enumerable">An enumerable collection to iterate over</param> 1733 <param name="value">Value</param>
1257 <param name="body">Method body to run for each object in the collection</param> 1734 <returns>An fully opaque RGB color (alpha is 1.0)</returns>
1258 </member> 1735 </member>
1259 <member name="M:OpenMetaverse.Parallel.Invoke(System.Action[])"> 1736 <member name="M:OpenMetaverse.Color4.Lerp(OpenMetaverse.Color4,OpenMetaverse.Color4,System.Single)">
1260 <summary> 1737 <summary>
1261 Executes a series of tasks in parallel 1738 Performs linear interpolation between two colors
1262 </summary> 1739 </summary>
1263 <param name="actions">A series of method bodies to execute</param> 1740 <param name="value1">Color to start at</param>
1741 <param name="value2">Color to end at</param>
1742 <param name="amount">Amount to interpolate</param>
1743 <returns>The interpolated color</returns>
1264 </member> 1744 </member>
1265 <member name="M:OpenMetaverse.Parallel.Invoke(System.Int32,System.Action[])"> 1745 <member name="F:OpenMetaverse.Color4.Black">
1266 <summary> 1746 <summary>A Color4 with zero RGB values and fully opaque (alpha 1.0)</summary>
1267 Executes a series of tasks in parallel
1268 </summary>
1269 <param name="threadCount">The number of concurrent execution threads to run</param>
1270 <param name="actions">A series of method bodies to execute</param>
1271 </member> 1747 </member>
1272 <member name="M:OpenMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single)"> 1748 <member name="F:OpenMetaverse.Color4.White">
1273 <summary> 1749 <summary>A Color4 with full RGB values (1.0) and fully opaque (alpha 1.0)</summary>
1274 Build a quaternion from normalized float values
1275 </summary>
1276 <param name="x">X value from -1.0 to 1.0</param>
1277 <param name="y">Y value from -1.0 to 1.0</param>
1278 <param name="z">Z value from -1.0 to 1.0</param>
1279 </member> 1750 </member>
1280 <member name="M:OpenMetaverse.Quaternion.#ctor(System.Byte[],System.Int32,System.Boolean)"> 1751 <member name="T:OpenMetaverse.Vector2">
1281 <summary> 1752 <summary>
1282 Constructor, builds a quaternion object from a byte array 1753 A two-dimensional vector with floating-point values
1283 </summary> 1754 </summary>
1284 <param name="byteArray">Byte array containing four four-byte floats</param>
1285 <param name="pos">Offset in the byte array to start reading at</param>
1286 <param name="normalized">Whether the source data is normalized or
1287 not. If this is true 12 bytes will be read, otherwise 16 bytes will
1288 be read.</param>
1289 </member> 1755 </member>
1290 <member name="F:OpenMetaverse.Quaternion.X"> 1756 <member name="F:OpenMetaverse.Vector2.X">
1291 <summary>X value</summary> 1757 <summary>X value</summary>
1292 </member> 1758 </member>
1293 <member name="F:OpenMetaverse.Quaternion.Y"> 1759 <member name="F:OpenMetaverse.Vector2.Y">
1294 <summary>Y value</summary> 1760 <summary>Y value</summary>
1295 </member> 1761 </member>
1296 <member name="F:OpenMetaverse.Quaternion.Z"> 1762 <member name="M:OpenMetaverse.Vector2.ApproxEquals(OpenMetaverse.Vector2,System.Single)">
1297 <summary>Z value</summary>
1298 </member>
1299 <member name="F:OpenMetaverse.Quaternion.W">
1300 <summary>W value</summary>
1301 </member>
1302 <member name="F:OpenMetaverse.Quaternion.Identity">
1303 <summary>A quaternion with a value of 0,0,0,1</summary>
1304 </member>
1305 <member name="M:OpenMetaverse.Quaternion.Normalize">
1306 <summary>
1307 Normalizes the quaternion
1308 </summary>
1309 </member>
1310 <member name="M:OpenMetaverse.Quaternion.FromBytes(System.Byte[],System.Int32,System.Boolean)">
1311 <summary>
1312 Builds a quaternion object from a byte array
1313 </summary>
1314 <param name="byteArray">The source byte array</param>
1315 <param name="pos">Offset in the byte array to start reading at</param>
1316 <param name="normalized">Whether the source data is normalized or
1317 not. If this is true 12 bytes will be read, otherwise 16 bytes will
1318 be read.</param>
1319 </member>
1320 <member name="M:OpenMetaverse.Quaternion.GetBytes">
1321 <summary>
1322 Normalize this quaternion and serialize it to a byte array
1323 </summary>
1324 <returns>A 12 byte array containing normalized X, Y, and Z floating
1325 point values in order using little endian byte ordering</returns>
1326 </member>
1327 <member name="M:OpenMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)">
1328 <summary>
1329 Writes the raw bytes for this quaternion to a byte array
1330 </summary>
1331 <param name="dest">Destination byte array</param>
1332 <param name="pos">Position in the destination array to start
1333 writing. Must be at least 12 bytes before the end of the array</param>
1334 </member>
1335 <member name="M:OpenMetaverse.Quaternion.GetEulerAngles(System.Single@,System.Single@,System.Single@)">
1336 <summary> 1763 <summary>
1337 Convert this quaternion to euler angles 1764 Test if this vector is equal to another vector, within a given
1765 tolerance range
1338 </summary> 1766 </summary>
1339 <param name="roll">X euler angle</param> 1767 <param name="vec">Vector to test against</param>
1340 <param name="pitch">Y euler angle</param> 1768 <param name="tolerance">The acceptable magnitude of difference
1341 <param name="yaw">Z euler angle</param> 1769 between the two vectors</param>
1770 <returns>True if the magnitude of difference between the two vectors
1771 is less than the given tolerance, otherwise false</returns>
1342 </member> 1772 </member>
1343 <member name="M:OpenMetaverse.Quaternion.GetAxisAngle(OpenMetaverse.Vector3@,System.Single@)"> 1773 <member name="M:OpenMetaverse.Vector2.IsFinite">
1344 <summary> 1774 <summary>
1345 Convert this quaternion to an angle around an axis 1775 Test if this vector is composed of all finite numbers
1346 </summary> 1776 </summary>
1347 <param name="axis">Unit vector describing the axis</param>
1348 <param name="angle">Angle around the axis, in radians</param>
1349 </member> 1777 </member>
1350 <member name="M:OpenMetaverse.Quaternion.Conjugate(OpenMetaverse.Quaternion)"> 1778 <member name="M:OpenMetaverse.Vector2.CompareTo(OpenMetaverse.Vector2)">
1351 <summary> 1779 <summary>
1352 Returns the conjugate (spatial inverse) of a quaternion 1780 IComparable.CompareTo implementation
1353 </summary> 1781 </summary>
1354 </member> 1782 </member>
1355 <member name="M:OpenMetaverse.Quaternion.CreateFromAxisAngle(System.Single,System.Single,System.Single,System.Single)"> 1783 <member name="M:OpenMetaverse.Vector2.FromBytes(System.Byte[],System.Int32)">
1356 <summary> 1784 <summary>
1357 Build a quaternion from an axis and an angle of rotation around 1785 Builds a vector from a byte array
1358 that axis
1359 </summary> 1786 </summary>
1787 <param name="byteArray">Byte array containing two four-byte floats</param>
1788 <param name="pos">Beginning position in the byte array</param>
1360 </member> 1789 </member>
1361 <member name="M:OpenMetaverse.Quaternion.CreateFromAxisAngle(OpenMetaverse.Vector3,System.Single)"> 1790 <member name="M:OpenMetaverse.Vector2.GetBytes">
1362 <summary> 1791 <summary>
1363 Build a quaternion from an axis and an angle of rotation around 1792 Returns the raw bytes for this vector
1364 that axis
1365 </summary> 1793 </summary>
1366 <param name="axis">Axis of rotation</param> 1794 <returns>An eight-byte array containing X and Y</returns>
1367 <param name="angle">Angle of rotation</param>
1368 </member> 1795 </member>
1369 <member name="M:OpenMetaverse.Quaternion.CreateFromEulers(OpenMetaverse.Vector3)"> 1796 <member name="M:OpenMetaverse.Vector2.ToBytes(System.Byte[],System.Int32)">
1370 <summary> 1797 <summary>
1371 Creates a quaternion from a vector containing roll, pitch, and yaw 1798 Writes the raw bytes for this vector to a byte array
1372 in radians
1373 </summary> 1799 </summary>
1374 <param name="eulers">Vector representation of the euler angles in 1800 <param name="dest">Destination byte array</param>
1375 radians</param> 1801 <param name="pos">Position in the destination array to start
1376 <returns>Quaternion representation of the euler angles</returns> 1802 writing. Must be at least 8 bytes before the end of the array</param>
1377 </member> 1803 </member>
1378 <member name="M:OpenMetaverse.Quaternion.CreateFromEulers(System.Single,System.Single,System.Single)"> 1804 <member name="M:OpenMetaverse.Vector2.Parse(System.String)">
1379 <summary> 1805 <summary>
1380 Creates a quaternion from roll, pitch, and yaw euler angles in 1806 Parse a vector from a string
1381 radians
1382 </summary> 1807 </summary>
1383 <param name="roll">X angle in radians</param> 1808 <param name="val">A string representation of a 2D vector, enclosed
1384 <param name="pitch">Y angle in radians</param> 1809 in arrow brackets and separated by commas</param>
1385 <param name="yaw">Z angle in radians</param>
1386 <returns>Quaternion representation of the euler angles</returns>
1387 </member> 1810 </member>
1388 <member name="M:OpenMetaverse.Quaternion.Inverse(OpenMetaverse.Quaternion)"> 1811 <member name="M:OpenMetaverse.Vector2.SmoothStep(OpenMetaverse.Vector2,OpenMetaverse.Vector2,System.Single)">
1389 <summary> 1812 <summary>
1390 Conjugates and renormalizes a vector 1813 Interpolates between two vectors using a cubic equation
1391 </summary> 1814 </summary>
1392 </member> 1815 </member>
1393 <member name="M:OpenMetaverse.Quaternion.Slerp(OpenMetaverse.Quaternion,OpenMetaverse.Quaternion,System.Single)"> 1816 <member name="M:OpenMetaverse.Vector2.ToString">
1394 <summary> 1817 <summary>
1395 Spherical linear interpolation between two quaternions 1818 Get a formatted string representation of the vector
1396 </summary> 1819 </summary>
1820 <returns>A string representation of the vector</returns>
1397 </member> 1821 </member>
1398 <member name="M:OpenMetaverse.Quaternion.ToRawString"> 1822 <member name="M:OpenMetaverse.Vector2.ToRawString">
1399 <summary> 1823 <summary>
1400 Get a string representation of the quaternion elements with up to three 1824 Get a string representation of the vector elements with up to three
1401 decimal digits and separated by spaces only 1825 decimal digits and separated by spaces only
1402 </summary> 1826 </summary>
1403 <returns>Raw string representation of the quaternion</returns> 1827 <returns>Raw string representation of the vector</returns>
1404 </member> 1828 </member>
1405 <member name="M:OpenMetaverse.ReaderWriterLockSlim.ExitAndWakeUpAppropriateWaiters"> 1829 <member name="F:OpenMetaverse.Vector2.Zero">
1406 <summary> 1830 <summary>A vector with a value of 0,0</summary>
1407 Determines the appropriate events to set, leaves the locks, and sets the events.
1408 </summary>
1409 </member> 1831 </member>
1410 <member name="M:OpenMetaverse.ReaderWriterLockSlim.LazyCreateEvent(System.Threading.EventWaitHandle@,System.Boolean)"> 1832 <member name="F:OpenMetaverse.Vector2.One">
1411 <summary> 1833 <summary>A vector with a value of 1,1</summary>
1412 A routine for lazily creating a event outside the lock (so if errors
1413 happen they are outside the lock and that we don't do much work
1414 while holding a spin lock). If all goes well, reenter the lock and
1415 set 'waitEvent'
1416 </summary>
1417 </member> 1834 </member>
1418 <member name="M:OpenMetaverse.ReaderWriterLockSlim.WaitOnEvent(System.Threading.EventWaitHandle,System.UInt32@,System.Int32)"> 1835 <member name="F:OpenMetaverse.Vector2.UnitX">
1419 <summary> 1836 <summary>A vector with a value of 1,0</summary>
1420 Waits on 'waitEvent' with a timeout of 'millisceondsTimeout. 1837 </member>
1421 Before the wait 'numWaiters' is incremented and is restored before leaving this routine. 1838 <member name="F:OpenMetaverse.Vector2.UnitY">
1422 </summary> 1839 <summary>A vector with a value of 0,1</summary>
1423 </member> 1840 </member>
1424 <member name="T:OpenMetaverse.TokenBucket"> 1841 <member name="T:OpenMetaverse.TokenBucket">
1425 <summary> 1842 <summary>
@@ -1427,23 +1844,12 @@
1427 http://en.wikipedia.org/wiki/Token_bucket for more information 1844 http://en.wikipedia.org/wiki/Token_bucket for more information
1428 </summary> 1845 </summary>
1429 </member> 1846 </member>
1430 <member name="M:OpenMetaverse.TokenBucket.#ctor(OpenMetaverse.TokenBucket,System.Int32,System.Int32)">
1431 <summary>
1432 Default constructor
1433 </summary>
1434 <param name="parent">Parent bucket if this is a child bucket, or
1435 null if this is a root bucket</param>
1436 <param name="maxBurst">Maximum size of the bucket in bytes, or
1437 zero if this bucket has no maximum capacity</param>
1438 <param name="dripRate">Rate that the bucket fills, in bytes per
1439 second. If zero, the bucket always remains full</param>
1440 </member>
1441 <member name="F:OpenMetaverse.TokenBucket.parent"> 1847 <member name="F:OpenMetaverse.TokenBucket.parent">
1442 <summary>Parent bucket to this bucket, or null if this is a root 1848 <summary>Parent bucket to this bucket, or null if this is a root
1443 bucket</summary> 1849 bucket</summary>
1444 </member> 1850 </member>
1445 <member name="F:OpenMetaverse.TokenBucket.maxBurst"> 1851 <member name="F:OpenMetaverse.TokenBucket.maxBurst">
1446 <summary>Size of the bucket in bytes. If zero, the bucket has 1852 <summary>Size of the bucket in bytes. If zero, the bucket has
1447 infinite capacity</summary> 1853 infinite capacity</summary>
1448 </member> 1854 </member>
1449 <member name="F:OpenMetaverse.TokenBucket.tokensPerMS"> 1855 <member name="F:OpenMetaverse.TokenBucket.tokensPerMS">
@@ -1456,35 +1862,16 @@
1456 <member name="F:OpenMetaverse.TokenBucket.lastDrip"> 1862 <member name="F:OpenMetaverse.TokenBucket.lastDrip">
1457 <summary>Time of the last drip, in system ticks</summary> 1863 <summary>Time of the last drip, in system ticks</summary>
1458 </member> 1864 </member>
1459 <member name="P:OpenMetaverse.TokenBucket.Parent"> 1865 <member name="M:OpenMetaverse.TokenBucket.#ctor(OpenMetaverse.TokenBucket,System.Int32,System.Int32)">
1460 <summary>
1461 The parent bucket of this bucket, or null if this bucket has no
1462 parent. The parent bucket will limit the aggregate bandwidth of all
1463 of its children buckets
1464 </summary>
1465 </member>
1466 <member name="P:OpenMetaverse.TokenBucket.MaxBurst">
1467 <summary>
1468 Maximum burst rate in bytes per second. This is the maximum number
1469 of tokens that can accumulate in the bucket at any one time
1470 </summary>
1471 </member>
1472 <member name="P:OpenMetaverse.TokenBucket.DripRate">
1473 <summary> 1866 <summary>
1474 The speed limit of this bucket in bytes per second. This is the 1867 Default constructor
1475 number of tokens that are added to the bucket per second
1476 </summary> 1868 </summary>
1477 <remarks>Tokens are added to the bucket any time 1869 <param name="parent">Parent bucket if this is a child bucket, or
1478 <seealso cref="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32,System.Boolean)" /> is called, at the granularity of 1870 null if this is a root bucket</param>
1479 the system tick interval (typically around 15-22ms)</remarks> 1871 <param name="maxBurst">Maximum size of the bucket in bytes, or
1480 </member> 1872 zero if this bucket has no maximum capacity</param>
1481 <member name="P:OpenMetaverse.TokenBucket.Content"> 1873 <param name="dripRate">Rate that the bucket fills, in bytes per
1482 <summary> 1874 second. If zero, the bucket always remains full</param>
1483 The number of bytes that can be sent at this moment. This is the
1484 current number of tokens in the bucket
1485 <remarks>If this bucket has a parent bucket that does not have
1486 enough tokens for a request, <seealso cref="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32,System.Boolean)" /> will
1487 return false regardless of the content of this bucket</remarks></summary>
1488 </member> 1875 </member>
1489 <member name="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32)"> 1876 <member name="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32)">
1490 <summary> 1877 <summary>
@@ -1507,1191 +1894,761 @@
1507 <member name="M:OpenMetaverse.TokenBucket.Drip"> 1894 <member name="M:OpenMetaverse.TokenBucket.Drip">
1508 <summary> 1895 <summary>
1509 Add tokens to the bucket over time. The number of tokens added each 1896 Add tokens to the bucket over time. The number of tokens added each
1510 call depends on the length of time that has passed since the last 1897 call depends on the length of time that has passed since the last
1511 call to Drip 1898 call to Drip
1512 </summary> 1899 </summary>
1513 <returns>True if tokens were added to the bucket, otherwise false</returns> 1900 <returns>True if tokens were added to the bucket, otherwise false</returns>
1514 </member> 1901 </member>
1515 <member name="T:OpenMetaverse.UUID"> 1902 <member name="P:OpenMetaverse.TokenBucket.Parent">
1516 <summary>
1517 A 128-bit Universally Unique Identifier, used throughout the Second
1518 Life networking protocol
1519 </summary>
1520 </member>
1521 <member name="M:OpenMetaverse.UUID.#ctor(System.String)">
1522 <summary> 1903 <summary>
1523 Constructor that takes a string UUID representation 1904 The parent bucket of this bucket, or null if this bucket has no
1905 parent. The parent bucket will limit the aggregate bandwidth of all
1906 of its children buckets
1524 </summary> 1907 </summary>
1525 <param name="val">A string representation of a UUID, case
1526 insensitive and can either be hyphenated or non-hyphenated</param>
1527 <example>UUID("11f8aa9c-b071-4242-836b-13b7abe0d489")</example>
1528 </member> 1908 </member>
1529 <member name="M:OpenMetaverse.UUID.#ctor(System.Guid)"> 1909 <member name="P:OpenMetaverse.TokenBucket.MaxBurst">
1530 <summary> 1910 <summary>
1531 Constructor that takes a System.Guid object 1911 Maximum burst rate in bytes per second. This is the maximum number
1912 of tokens that can accumulate in the bucket at any one time
1532 </summary> 1913 </summary>
1533 <param name="val">A Guid object that contains the unique identifier
1534 to be represented by this UUID</param>
1535 </member> 1914 </member>
1536 <member name="M:OpenMetaverse.UUID.#ctor(System.Byte[],System.Int32)"> 1915 <member name="P:OpenMetaverse.TokenBucket.DripRate">
1537 <summary> 1916 <summary>
1538 Constructor that takes a byte array containing a UUID 1917 The speed limit of this bucket in bytes per second. This is the
1918 number of tokens that are added to the bucket per second
1539 </summary> 1919 </summary>
1540 <param name="source">Byte array containing a 16 byte UUID</param> 1920 <remarks>Tokens are added to the bucket any time
1541 <param name="pos">Beginning offset in the array</param> 1921 <seealso cref="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32)"/> is called, at the granularity of
1922 the system tick interval (typically around 15-22ms)</remarks>
1542 </member> 1923 </member>
1543 <member name="M:OpenMetaverse.UUID.#ctor(System.UInt64)"> 1924 <member name="P:OpenMetaverse.TokenBucket.Content">
1544 <summary> 1925 <summary>
1545 Constructor that takes an unsigned 64-bit unsigned integer to 1926 The number of bytes that can be sent at this moment. This is the
1546 convert to a UUID 1927 current number of tokens in the bucket
1928 <remarks>If this bucket has a parent bucket that does not have
1929 enough tokens for a request, <seealso cref="M:OpenMetaverse.TokenBucket.RemoveTokens(System.Int32)"/> will
1930 return false regardless of the content of this bucket</remarks>
1547 </summary> 1931 </summary>
1548 <param name="val">64-bit unsigned integer to convert to a UUID</param>
1549 </member> 1932 </member>
1550 <member name="M:OpenMetaverse.UUID.#ctor(OpenMetaverse.UUID)"> 1933 <member name="F:OpenMetaverse.Quaternion.X">
1551 <summary> 1934 <summary>X value</summary>
1552 Copy constructor
1553 </summary>
1554 <param name="val">UUID to copy</param>
1555 </member> 1935 </member>
1556 <member name="F:OpenMetaverse.UUID.Guid"> 1936 <member name="F:OpenMetaverse.Quaternion.Y">
1557 <summary>The System.Guid object this struct wraps around</summary> 1937 <summary>Y value</summary>
1558 </member> 1938 </member>
1559 <member name="F:OpenMetaverse.UUID.Zero"> 1939 <member name="F:OpenMetaverse.Quaternion.Z">
1560 <summary>An UUID with a value of all zeroes</summary> 1940 <summary>Z value</summary>
1561 </member> 1941 </member>
1562 <member name="F:OpenMetaverse.UUID.ZeroString"> 1942 <member name="F:OpenMetaverse.Quaternion.W">
1563 <summary>A cache of UUID.Zero as a string to optimize a common path</summary> 1943 <summary>W value</summary>
1564 </member> 1944 </member>
1565 <member name="M:OpenMetaverse.UUID.CompareTo(OpenMetaverse.UUID)"> 1945 <member name="M:OpenMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single)">
1566 <summary> 1946 <summary>
1567 IComparable.CompareTo implementation 1947 Build a quaternion from normalized float values
1568 </summary> 1948 </summary>
1949 <param name="x">X value from -1.0 to 1.0</param>
1950 <param name="y">Y value from -1.0 to 1.0</param>
1951 <param name="z">Z value from -1.0 to 1.0</param>
1569 </member> 1952 </member>
1570 <member name="M:OpenMetaverse.UUID.FromBytes(System.Byte[],System.Int32)"> 1953 <member name="M:OpenMetaverse.Quaternion.#ctor(System.Byte[],System.Int32,System.Boolean)">
1571 <summary> 1954 <summary>
1572 Assigns this UUID from 16 bytes out of a byte array 1955 Constructor, builds a quaternion object from a byte array
1573 </summary> 1956 </summary>
1574 <param name="source">Byte array containing the UUID to assign this UUID to</param> 1957 <param name="byteArray">Byte array containing four four-byte floats</param>
1575 <param name="pos">Starting position of the UUID in the byte array</param> 1958 <param name="pos">Offset in the byte array to start reading at</param>
1959 <param name="normalized">Whether the source data is normalized or
1960 not. If this is true 12 bytes will be read, otherwise 16 bytes will
1961 be read.</param>
1576 </member> 1962 </member>
1577 <member name="M:OpenMetaverse.UUID.GetBytes"> 1963 <member name="M:OpenMetaverse.Quaternion.Normalize">
1578 <summary> 1964 <summary>
1579 Returns a copy of the raw bytes for this UUID 1965 Normalizes the quaternion
1580 </summary> 1966 </summary>
1581 <returns>A 16 byte array containing this UUID</returns>
1582 </member> 1967 </member>
1583 <member name="M:OpenMetaverse.UUID.ToBytes(System.Byte[],System.Int32)"> 1968 <member name="M:OpenMetaverse.Quaternion.FromBytes(System.Byte[],System.Int32,System.Boolean)">
1584 <summary> 1969 <summary>
1585 Writes the raw bytes for this UUID to a byte array 1970 Builds a quaternion object from a byte array
1586 </summary> 1971 </summary>
1587 <param name="dest">Destination byte array</param> 1972 <param name="byteArray">The source byte array</param>
1588 <param name="pos">Position in the destination array to start 1973 <param name="pos">Offset in the byte array to start reading at</param>
1589 writing. Must be at least 16 bytes before the end of the array</param> 1974 <param name="normalized">Whether the source data is normalized or
1975 not. If this is true 12 bytes will be read, otherwise 16 bytes will
1976 be read.</param>
1590 </member> 1977 </member>
1591 <member name="M:OpenMetaverse.UUID.CRC"> 1978 <member name="M:OpenMetaverse.Quaternion.GetBytes">
1592 <summary> 1979 <summary>
1593 Calculate an LLCRC (cyclic redundancy check) for this UUID 1980 Normalize this quaternion and serialize it to a byte array
1594 </summary> 1981 </summary>
1595 <returns>The CRC checksum for this UUID</returns> 1982 <returns>A 12 byte array containing normalized X, Y, and Z floating
1983 point values in order using little endian byte ordering</returns>
1596 </member> 1984 </member>
1597 <member name="M:OpenMetaverse.UUID.GetULong"> 1985 <member name="M:OpenMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)">
1598 <summary> 1986 <summary>
1599 Create a 64-bit integer representation from the second half of this UUID 1987 Writes the raw bytes for this quaternion to a byte array
1600 </summary> 1988 </summary>
1601 <returns>An integer created from the last eight bytes of this UUID</returns> 1989 <param name="dest">Destination byte array</param>
1990 <param name="pos">Position in the destination array to start
1991 writing. Must be at least 12 bytes before the end of the array</param>
1602 </member> 1992 </member>
1603 <member name="M:OpenMetaverse.UUID.Parse(System.String)"> 1993 <member name="M:OpenMetaverse.Quaternion.GetEulerAngles(System.Single@,System.Single@,System.Single@)">
1604 <summary> 1994 <summary>
1605 Generate a UUID from a string 1995 Convert this quaternion to euler angles
1606 </summary> 1996 </summary>
1607 <param name="val">A string representation of a UUID, case 1997 <param name="roll">X euler angle</param>
1608 insensitive and can either be hyphenated or non-hyphenated</param> 1998 <param name="pitch">Y euler angle</param>
1609 <example>UUID.Parse("11f8aa9c-b071-4242-836b-13b7abe0d489")</example> 1999 <param name="yaw">Z euler angle</param>
1610 </member> 2000 </member>
1611 <member name="M:OpenMetaverse.UUID.TryParse(System.String,OpenMetaverse.UUID@)"> 2001 <member name="M:OpenMetaverse.Quaternion.GetAxisAngle(OpenMetaverse.Vector3@,System.Single@)">
1612 <summary> 2002 <summary>
1613 Generate a UUID from a string 2003 Convert this quaternion to an angle around an axis
1614 </summary> 2004 </summary>
1615 <param name="val">A string representation of a UUID, case 2005 <param name="axis">Unit vector describing the axis</param>
1616 insensitive and can either be hyphenated or non-hyphenated</param> 2006 <param name="angle">Angle around the axis, in radians</param>
1617 <param name="result">Will contain the parsed UUID if successful,
1618 otherwise null</param>
1619 <returns>True if the string was successfully parse, otherwise false</returns>
1620 <example>UUID.TryParse("11f8aa9c-b071-4242-836b-13b7abe0d489", result)</example>
1621 </member> 2007 </member>
1622 <member name="M:OpenMetaverse.UUID.Combine(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 2008 <member name="M:OpenMetaverse.Quaternion.Conjugate(OpenMetaverse.Quaternion)">
1623 <summary> 2009 <summary>
1624 Combine two UUIDs together by taking the MD5 hash of a byte array 2010 Returns the conjugate (spatial inverse) of a quaternion
1625 containing both UUIDs
1626 </summary> 2011 </summary>
1627 <param name="first">First UUID to combine</param>
1628 <param name="second">Second UUID to combine</param>
1629 <returns>The UUID product of the combination</returns>
1630 </member> 2012 </member>
1631 <member name="M:OpenMetaverse.UUID.Random"> 2013 <member name="M:OpenMetaverse.Quaternion.CreateFromAxisAngle(System.Single,System.Single,System.Single,System.Single)">
1632 <summary> 2014 <summary>
2015 Build a quaternion from an axis and an angle of rotation around
2016 that axis
1633 </summary> 2017 </summary>
1634 <returns>
1635 </returns>
1636 </member> 2018 </member>
1637 <member name="M:OpenMetaverse.UUID.GetHashCode"> 2019 <member name="M:OpenMetaverse.Quaternion.CreateFromAxisAngle(OpenMetaverse.Vector3,System.Single)">
1638 <summary> 2020 <summary>
1639 Return a hash code for this UUID, used by .NET for hash tables 2021 Build a quaternion from an axis and an angle of rotation around
2022 that axis
1640 </summary> 2023 </summary>
1641 <returns>An integer composed of all the UUID bytes XORed together</returns> 2024 <param name="axis">Axis of rotation</param>
2025 <param name="angle">Angle of rotation</param>
1642 </member> 2026 </member>
1643 <member name="M:OpenMetaverse.UUID.Equals(System.Object)"> 2027 <member name="M:OpenMetaverse.Quaternion.CreateFromEulers(OpenMetaverse.Vector3)">
1644 <summary> 2028 <summary>
1645 Comparison function 2029 Creates a quaternion from a vector containing roll, pitch, and yaw
2030 in radians
1646 </summary> 2031 </summary>
1647 <param name="o">An object to compare to this UUID</param> 2032 <param name="eulers">Vector representation of the euler angles in
1648 <returns>True if the object is a UUID and both UUIDs are equal</returns> 2033 radians</param>
2034 <returns>Quaternion representation of the euler angles</returns>
1649 </member> 2035 </member>
1650 <member name="M:OpenMetaverse.UUID.Equals(OpenMetaverse.UUID)"> 2036 <member name="M:OpenMetaverse.Quaternion.CreateFromEulers(System.Single,System.Single,System.Single)">
1651 <summary> 2037 <summary>
1652 Comparison function 2038 Creates a quaternion from roll, pitch, and yaw euler angles in
2039 radians
1653 </summary> 2040 </summary>
1654 <param name="uuid">UUID to compare to</param> 2041 <param name="roll">X angle in radians</param>
1655 <returns>True if the UUIDs are equal, otherwise false</returns> 2042 <param name="pitch">Y angle in radians</param>
2043 <param name="yaw">Z angle in radians</param>
2044 <returns>Quaternion representation of the euler angles</returns>
1656 </member> 2045 </member>
1657 <member name="M:OpenMetaverse.UUID.ToString"> 2046 <member name="M:OpenMetaverse.Quaternion.Inverse(OpenMetaverse.Quaternion)">
1658 <summary> 2047 <summary>
1659 Get a hyphenated string representation of this UUID 2048 Conjugates and renormalizes a vector
1660 </summary> 2049 </summary>
1661 <returns>A string representation of this UUID, lowercase and
1662 with hyphens</returns>
1663 <example>11f8aa9c-b071-4242-836b-13b7abe0d489</example>
1664 </member> 2050 </member>
1665 <member name="M:OpenMetaverse.UUID.op_Equality(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 2051 <member name="M:OpenMetaverse.Quaternion.Slerp(OpenMetaverse.Quaternion,OpenMetaverse.Quaternion,System.Single)">
1666 <summary> 2052 <summary>
1667 Equals operator 2053 Spherical linear interpolation between two quaternions
1668 </summary> 2054 </summary>
1669 <param name="lhs">First UUID for comparison</param>
1670 <param name="rhs">Second UUID for comparison</param>
1671 <returns>True if the UUIDs are byte for byte equal, otherwise false</returns>
1672 </member> 2055 </member>
1673 <member name="M:OpenMetaverse.UUID.op_Inequality(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 2056 <member name="M:OpenMetaverse.Quaternion.ToRawString">
1674 <summary> 2057 <summary>
1675 Not equals operator 2058 Get a string representation of the quaternion elements with up to three
2059 decimal digits and separated by spaces only
1676 </summary> 2060 </summary>
1677 <param name="lhs">First UUID for comparison</param> 2061 <returns>Raw string representation of the quaternion</returns>
1678 <param name="rhs">Second UUID for comparison</param>
1679 <returns>True if the UUIDs are not equal, otherwise true</returns>
1680 </member> 2062 </member>
1681 <member name="M:OpenMetaverse.UUID.op_ExclusiveOr(OpenMetaverse.UUID,OpenMetaverse.UUID)"> 2063 <member name="F:OpenMetaverse.Quaternion.Identity">
1682 <summary> 2064 <summary>A quaternion with a value of 0,0,0,1</summary>
1683 XOR operator
1684 </summary>
1685 <param name="lhs">First UUID</param>
1686 <param name="rhs">Second UUID</param>
1687 <returns>A UUID that is a XOR combination of the two input UUIDs</returns>
1688 </member> 2065 </member>
1689 <member name="M:OpenMetaverse.UUID.op_Explicit(System.String)~OpenMetaverse.UUID"> 2066 <member name="F:OpenMetaverse.ExpiringCache`2.syncRoot">
2067 <summary>For thread safety</summary>
2068 </member>
2069 <member name="F:OpenMetaverse.ExpiringCache`2.isPurging">
2070 <summary>For thread safety</summary>
2071 </member>
2072 <member name="M:OpenMetaverse.ExpiringCache`2.PurgeCache(System.Object,System.Timers.ElapsedEventArgs)">
1690 <summary> 2073 <summary>
1691 String typecasting operator 2074 Purges expired objects from the cache. Called automatically by the purge timer.
1692 </summary> 2075 </summary>
1693 <param name="val">A UUID in string form. Case insensitive,
1694 hyphenated or non-hyphenated</param>
1695 <returns>A UUID built from the string representation</returns>
1696 </member> 2076 </member>
1697 <member name="T:OpenMetaverse.Utils.Platform"> 2077 <member name="T:OpenMetaverse.EnumInfoAttribute">
1698 <summary> 2078 <summary>
1699 Operating system 2079 Attribute class that allows extra attributes to be attached to ENUMs
1700 </summary> 2080 </summary>
1701 </member> 2081 </member>
1702 <member name="F:OpenMetaverse.Utils.Platform.Unknown"> 2082 <member name="F:OpenMetaverse.EnumInfoAttribute.Text">
1703 <summary>Unknown</summary> 2083 <summary>Text used when presenting ENUM to user</summary>
1704 </member>
1705 <member name="F:OpenMetaverse.Utils.Platform.Windows">
1706 <summary>Microsoft Windows</summary>
1707 </member>
1708 <member name="F:OpenMetaverse.Utils.Platform.WindowsCE">
1709 <summary>Microsoft Windows CE</summary>
1710 </member> 2084 </member>
1711 <member name="F:OpenMetaverse.Utils.Platform.Linux"> 2085 <member name="M:OpenMetaverse.EnumInfoAttribute.#ctor">
1712 <summary>Linux</summary> 2086 <summary>Default initializer</summary>
1713 </member> 2087 </member>
1714 <member name="F:OpenMetaverse.Utils.Platform.OSX"> 2088 <member name="M:OpenMetaverse.EnumInfoAttribute.#ctor(System.String)">
1715 <summary>Apple OSX</summary> 2089 <summary>Text used when presenting ENUM to user</summary>
1716 </member> 2090 </member>
1717 <member name="T:OpenMetaverse.Utils.Runtime"> 2091 <member name="T:OpenMetaverse.AssetType">
1718 <summary> 2092 <summary>
1719 Runtime platform 2093 The different types of grid assets
1720 </summary> 2094 </summary>
1721 </member> 2095 </member>
1722 <member name="F:OpenMetaverse.Utils.Runtime.Windows"> 2096 <member name="F:OpenMetaverse.AssetType.Unknown">
1723 <summary>.NET runtime</summary> 2097 <summary>Unknown asset type</summary>
1724 </member>
1725 <member name="F:OpenMetaverse.Utils.Runtime.Mono">
1726 <summary>Mono runtime: http://www.mono-project.com/</summary>
1727 </member>
1728 <member name="F:OpenMetaverse.Utils.DEG_TO_RAD">
1729 <summary>Used for converting degrees to radians</summary>
1730 </member> 2098 </member>
1731 <member name="F:OpenMetaverse.Utils.RAD_TO_DEG"> 2099 <member name="F:OpenMetaverse.AssetType.Texture">
1732 <summary>Used for converting radians to degrees</summary> 2100 <summary>Texture asset, stores in JPEG2000 J2C stream format</summary>
1733 </member> 2101 </member>
1734 <member name="F:OpenMetaverse.Utils.EnUsCulture"> 2102 <member name="F:OpenMetaverse.AssetType.Sound">
1735 <summary>Provide a single instance of the CultureInfo class to 2103 <summary>Sound asset</summary>
1736 help parsing in situations where the grid assumes an en-us
1737 culture</summary>
1738 </member> 2104 </member>
1739 <member name="F:OpenMetaverse.Utils.Epoch"> 2105 <member name="F:OpenMetaverse.AssetType.CallingCard">
1740 <summary>UNIX epoch in DateTime format</summary> 2106 <summary>Calling card for another avatar</summary>
1741 </member> 2107 </member>
1742 <member name="F:OpenMetaverse.Utils.MD5Builder"> 2108 <member name="F:OpenMetaverse.AssetType.Landmark">
1743 <summary>Provide a single instance of the MD5 class to avoid making 2109 <summary>Link to a location in world</summary>
1744 duplicate copies and handle thread safety</summary>
1745 </member> 2110 </member>
1746 <member name="F:OpenMetaverse.Utils.SHA1Builder"> 2111 <member name="F:OpenMetaverse.AssetType.Clothing">
1747 <summary>Provide a single instance of the SHA-1 class to avoid 2112 <summary>Collection of textures and parameters that can be
1748 making duplicate copies and handle thread safety</summary> 2113 worn by an avatar</summary>
1749 </member> 2114 </member>
1750 <member name="F:OpenMetaverse.Utils.RNG"> 2115 <member name="F:OpenMetaverse.AssetType.Object">
1751 <summary>Provide a single instance of a random number generator 2116 <summary>Primitive that can contain textures, sounds,
1752 to avoid making duplicate copies and handle thread safety</summary> 2117 scripts and more</summary>
1753 </member> 2118 </member>
1754 <member name="M:OpenMetaverse.Utils.Clamp(System.Single,System.Single,System.Single)"> 2119 <member name="F:OpenMetaverse.AssetType.Notecard">
1755 <summary> 2120 <summary>Notecard asset</summary>
1756 Clamp a given value between a range
1757 </summary>
1758 <param name="value">Value to clamp</param>
1759 <param name="min">Minimum allowable value</param>
1760 <param name="max">Maximum allowable value</param>
1761 <returns>A value inclusively between lower and upper</returns>
1762 </member> 2121 </member>
1763 <member name="M:OpenMetaverse.Utils.Clamp(System.Double,System.Double,System.Double)"> 2122 <member name="F:OpenMetaverse.AssetType.Folder">
1764 <summary> 2123 <summary>Holds a collection of inventory items</summary>
1765 Clamp a given value between a range
1766 </summary>
1767 <param name="value">Value to clamp</param>
1768 <param name="min">Minimum allowable value</param>
1769 <param name="max">Maximum allowable value</param>
1770 <returns>A value inclusively between lower and upper</returns>
1771 </member> 2124 </member>
1772 <member name="M:OpenMetaverse.Utils.Clamp(System.Int32,System.Int32,System.Int32)"> 2125 <member name="F:OpenMetaverse.AssetType.RootFolder">
1773 <summary> 2126 <summary>Root inventory folder</summary>
1774 Clamp a given value between a range
1775 </summary>
1776 <param name="value">Value to clamp</param>
1777 <param name="min">Minimum allowable value</param>
1778 <param name="max">Maximum allowable value</param>
1779 <returns>A value inclusively between lower and upper</returns>
1780 </member> 2127 </member>
1781 <member name="M:OpenMetaverse.Utils.Round(System.Single)"> 2128 <member name="F:OpenMetaverse.AssetType.LSLText">
1782 <summary> 2129 <summary>Linden scripting language script</summary>
1783 Round a floating-point value to the nearest integer
1784 </summary>
1785 <param name="val">Floating point number to round</param>
1786 <returns>Integer</returns>
1787 </member> 2130 </member>
1788 <member name="M:OpenMetaverse.Utils.IsFinite(System.Single)"> 2131 <member name="F:OpenMetaverse.AssetType.LSLBytecode">
1789 <summary> 2132 <summary>LSO bytecode for a script</summary>
1790 Test if a single precision float is a finite number
1791 </summary>
1792 </member> 2133 </member>
1793 <member name="M:OpenMetaverse.Utils.IsFinite(System.Double)"> 2134 <member name="F:OpenMetaverse.AssetType.TextureTGA">
1794 <summary> 2135 <summary>Uncompressed TGA texture</summary>
1795 Test if a double precision float is a finite number
1796 </summary>
1797 </member> 2136 </member>
1798 <member name="M:OpenMetaverse.Utils.Distance(System.Single,System.Single)"> 2137 <member name="F:OpenMetaverse.AssetType.Bodypart">
1799 <summary> 2138 <summary>Collection of textures and shape parameters that can
1800 Get the distance between two floating-point values 2139 be worn</summary>
1801 </summary>
1802 <param name="value1">First value</param>
1803 <param name="value2">Second value</param>
1804 <returns>The distance between the two values</returns>
1805 </member> 2140 </member>
1806 <member name="M:OpenMetaverse.Utils.MD5(System.Byte[])"> 2141 <member name="F:OpenMetaverse.AssetType.TrashFolder">
1807 <summary> 2142 <summary>Trash folder</summary>
1808 Compute the MD5 hash for a byte array
1809 </summary>
1810 <param name="data">Byte array to compute the hash for</param>
1811 <returns>MD5 hash of the input data</returns>
1812 </member> 2143 </member>
1813 <member name="M:OpenMetaverse.Utils.SHA1(System.Byte[])"> 2144 <member name="F:OpenMetaverse.AssetType.SnapshotFolder">
1814 <summary> 2145 <summary>Snapshot folder</summary>
1815 Compute the SHA1 hash for a byte array
1816 </summary>
1817 <param name="data">Byte array to compute the hash for</param>
1818 <returns>SHA1 hash of the input data</returns>
1819 </member> 2146 </member>
1820 <member name="M:OpenMetaverse.Utils.SHA1String(System.String)"> 2147 <member name="F:OpenMetaverse.AssetType.LostAndFoundFolder">
1821 <summary> 2148 <summary>Lost and found folder</summary>
1822 Calculate the SHA1 hash of a given string
1823 </summary>
1824 <param name="value">The string to hash</param>
1825 <returns>The SHA1 hash as a string</returns>
1826 </member> 2149 </member>
1827 <member name="M:OpenMetaverse.Utils.SHA256(System.Byte[])"> 2150 <member name="F:OpenMetaverse.AssetType.SoundWAV">
1828 <summary> 2151 <summary>Uncompressed sound</summary>
1829 Compute the SHA256 hash for a byte array
1830 </summary>
1831 <param name="data">Byte array to compute the hash for</param>
1832 <returns>SHA256 hash of the input data</returns>
1833 </member> 2152 </member>
1834 <member name="M:OpenMetaverse.Utils.SHA256String(System.String)"> 2153 <member name="F:OpenMetaverse.AssetType.ImageTGA">
1835 <summary> 2154 <summary>Uncompressed TGA non-square image, not to be used as a
1836 Calculate the SHA256 hash of a given string 2155 texture</summary>
1837 </summary>
1838 <param name="value">The string to hash</param>
1839 <returns>The SHA256 hash as a string</returns>
1840 </member> 2156 </member>
1841 <member name="M:OpenMetaverse.Utils.MD5(System.String)"> 2157 <member name="F:OpenMetaverse.AssetType.ImageJPEG">
1842 <summary> 2158 <summary>Compressed JPEG non-square image, not to be used as a
1843 Calculate the MD5 hash of a given string 2159 texture</summary>
1844 </summary>
1845 <param name="password">The password to hash</param>
1846 <returns>An MD5 hash in string format, with $1$ prepended</returns>
1847 </member> 2160 </member>
1848 <member name="M:OpenMetaverse.Utils.MD5String(System.String)"> 2161 <member name="F:OpenMetaverse.AssetType.Animation">
1849 <summary> 2162 <summary>Animation</summary>
1850 Calculate the MD5 hash of a given string
1851 </summary>
1852 <param name="value">The string to hash</param>
1853 <returns>The MD5 hash as a string</returns>
1854 </member> 2163 </member>
1855 <member name="M:OpenMetaverse.Utils.RandomDouble"> 2164 <member name="F:OpenMetaverse.AssetType.Gesture">
1856 <summary> 2165 <summary>Sequence of animations, sounds, chat, and pauses</summary>
1857 Generate a random double precision floating point value
1858 </summary>
1859 <returns>Random value of type double</returns>
1860 </member> 2166 </member>
1861 <member name="M:OpenMetaverse.Utils.GetRunningPlatform"> 2167 <member name="F:OpenMetaverse.AssetType.Simstate">
1862 <summary> 2168 <summary>Simstate file</summary>
1863 Get the current running platform
1864 </summary>
1865 <returns>Enumeration of the current platform we are running on</returns>
1866 </member> 2169 </member>
1867 <member name="M:OpenMetaverse.Utils.GetRunningRuntime"> 2170 <member name="F:OpenMetaverse.AssetType.FavoriteFolder">
1868 <summary> 2171 <summary>Contains landmarks for favorites</summary>
1869 Get the current running runtime
1870 </summary>
1871 <returns>Enumeration of the current runtime we are running on</returns>
1872 </member> 2172 </member>
1873 <member name="M:OpenMetaverse.Utils.BytesToInt16(System.Byte[])"> 2173 <member name="F:OpenMetaverse.AssetType.Link">
1874 <summary> 2174 <summary>Asset is a link to another inventory item</summary>
1875 Convert the first two bytes starting in the byte array in
1876 little endian ordering to a signed short integer
1877 </summary>
1878 <param name="bytes">An array two bytes or longer</param>
1879 <returns>A signed short integer, will be zero if a short can't be
1880 read at the given position</returns>
1881 </member> 2175 </member>
1882 <member name="M:OpenMetaverse.Utils.BytesToInt16(System.Byte[],System.Int32)"> 2176 <member name="F:OpenMetaverse.AssetType.LinkFolder">
1883 <summary> 2177 <summary>Asset is a link to another inventory folder</summary>
1884 Convert the first two bytes starting at the given position in
1885 little endian ordering to a signed short integer
1886 </summary>
1887 <param name="bytes">An array two bytes or longer</param>
1888 <param name="pos">Position in the array to start reading</param>
1889 <returns>A signed short integer, will be zero if a short can't be
1890 read at the given position</returns>
1891 </member> 2178 </member>
1892 <member name="M:OpenMetaverse.Utils.BytesToInt(System.Byte[],System.Int32)"> 2179 <member name="F:OpenMetaverse.AssetType.EnsembleStart">
1893 <summary> 2180 <summary>Beginning of the range reserved for ensembles</summary>
1894 Convert the first four bytes starting at the given position in
1895 little endian ordering to a signed integer
1896 </summary>
1897 <param name="bytes">An array four bytes or longer</param>
1898 <param name="pos">Position to start reading the int from</param>
1899 <returns>A signed integer, will be zero if an int can't be read
1900 at the given position</returns>
1901 </member> 2181 </member>
1902 <member name="M:OpenMetaverse.Utils.BytesToInt(System.Byte[])"> 2182 <member name="F:OpenMetaverse.AssetType.EnsembleEnd">
1903 <summary> 2183 <summary>End of the range reserved for ensembles</summary>
1904 Convert the first four bytes of the given array in little endian
1905 ordering to a signed integer
1906 </summary>
1907 <param name="bytes">An array four bytes or longer</param>
1908 <returns>A signed integer, will be zero if the array contains
1909 less than four bytes</returns>
1910 </member> 2184 </member>
1911 <member name="M:OpenMetaverse.Utils.BytesToInt64(System.Byte[])"> 2185 <member name="F:OpenMetaverse.AssetType.CurrentOutfitFolder">
1912 <summary> 2186 <summary>Folder containing inventory links to wearables and attachments
1913 Convert the first eight bytes of the given array in little endian 2187 that are part of the current outfit</summary>
1914 ordering to a signed long integer
1915 </summary>
1916 <param name="bytes">An array eight bytes or longer</param>
1917 <returns>A signed long integer, will be zero if the array contains
1918 less than eight bytes</returns>
1919 </member> 2188 </member>
1920 <member name="M:OpenMetaverse.Utils.BytesToInt64(System.Byte[],System.Int32)"> 2189 <member name="F:OpenMetaverse.AssetType.OutfitFolder">
1921 <summary> 2190 <summary>Folder containing inventory items or links to
1922 Convert the first eight bytes starting at the given position in 2191 inventory items of wearables and attachments
1923 little endian ordering to a signed long integer 2192 together make a full outfit</summary>
1924 </summary>
1925 <param name="bytes">An array eight bytes or longer</param>
1926 <param name="pos">Position to start reading the long from</param>
1927 <returns>A signed long integer, will be zero if a long can't be read
1928 at the given position</returns>
1929 </member> 2193 </member>
1930 <member name="M:OpenMetaverse.Utils.BytesToUInt16(System.Byte[],System.Int32)"> 2194 <member name="F:OpenMetaverse.AssetType.MyOutfitsFolder">
1931 <summary> 2195 <summary>Root folder for the folders of type OutfitFolder</summary>
1932 Convert the first two bytes starting at the given position in
1933 little endian ordering to an unsigned short
1934 </summary>
1935 <param name="bytes">Byte array containing the ushort</param>
1936 <param name="pos">Position to start reading the ushort from</param>
1937 <returns>An unsigned short, will be zero if a ushort can't be read
1938 at the given position</returns>
1939 </member> 2196 </member>
1940 <member name="M:OpenMetaverse.Utils.BytesToUInt16(System.Byte[])"> 2197 <member name="F:OpenMetaverse.AssetType.Mesh">
1941 <summary> 2198 <summary>Linden mesh format</summary>
1942 Convert two bytes in little endian ordering to an unsigned short
1943 </summary>
1944 <param name="bytes">Byte array containing the ushort</param>
1945 <returns>An unsigned short, will be zero if a ushort can't be
1946 read</returns>
1947 </member> 2199 </member>
1948 <member name="M:OpenMetaverse.Utils.BytesToUInt(System.Byte[],System.Int32)"> 2200 <member name="F:OpenMetaverse.AssetType.Inbox">
1949 <summary> 2201 <summary>Marketplace direct delivery inbox ("Received Items")</summary>
1950 Convert the first four bytes starting at the given position in
1951 little endian ordering to an unsigned integer
1952 </summary>
1953 <param name="bytes">Byte array containing the uint</param>
1954 <param name="pos">Position to start reading the uint from</param>
1955 <returns>An unsigned integer, will be zero if a uint can't be read
1956 at the given position</returns>
1957 </member> 2202 </member>
1958 <member name="M:OpenMetaverse.Utils.BytesToUInt(System.Byte[])"> 2203 <member name="F:OpenMetaverse.AssetType.Outbox">
1959 <summary> 2204 <summary>Marketplace direct delivery outbox</summary>
1960 Convert the first four bytes of the given array in little endian
1961 ordering to an unsigned integer
1962 </summary>
1963 <param name="bytes">An array four bytes or longer</param>
1964 <returns>An unsigned integer, will be zero if the array contains
1965 less than four bytes</returns>
1966 </member> 2205 </member>
1967 <member name="M:OpenMetaverse.Utils.BytesToUInt64(System.Byte[])"> 2206 <member name="F:OpenMetaverse.AssetType.BasicRoot">
1968 <summary> 2207 <summary></summary>
1969 Convert the first eight bytes of the given array in little endian
1970 ordering to an unsigned 64-bit integer
1971 </summary>
1972 <param name="bytes">An array eight bytes or longer</param>
1973 <returns>An unsigned 64-bit integer, will be zero if the array
1974 contains less than eight bytes</returns>
1975 </member> 2208 </member>
1976 <member name="M:OpenMetaverse.Utils.BytesToFloat(System.Byte[],System.Int32)"> 2209 <member name="T:OpenMetaverse.InventoryType">
1977 <summary> 2210 <summary>
1978 Convert four bytes in little endian ordering to a floating point 2211 Inventory Item Types, eg Script, Notecard, Folder, etc
1979 value
1980 </summary> 2212 </summary>
1981 <param name="bytes">Byte array containing a little ending floating
1982 point value</param>
1983 <param name="pos">Starting position of the floating point value in
1984 the byte array</param>
1985 <returns>Single precision value</returns>
1986 </member> 2213 </member>
1987 <member name="M:OpenMetaverse.Utils.IntToBytes(System.Int32)"> 2214 <member name="F:OpenMetaverse.InventoryType.Unknown">
1988 <summary> 2215 <summary>Unknown</summary>
1989 Convert an integer to a byte array in little endian format
1990 </summary>
1991 <param name="value">The integer to convert</param>
1992 <returns>A four byte little endian array</returns>
1993 </member> 2216 </member>
1994 <member name="M:OpenMetaverse.Utils.IntToBytesBig(System.Int32)"> 2217 <member name="F:OpenMetaverse.InventoryType.Texture">
1995 <summary> 2218 <summary>Texture</summary>
1996 Convert an integer to a byte array in big endian format
1997 </summary>
1998 <param name="value">The integer to convert</param>
1999 <returns>A four byte big endian array</returns>
2000 </member> 2219 </member>
2001 <member name="M:OpenMetaverse.Utils.Int64ToBytes(System.Int64)"> 2220 <member name="F:OpenMetaverse.InventoryType.Sound">
2002 <summary> 2221 <summary>Sound</summary>
2003 Convert a 64-bit integer to a byte array in little endian format
2004 </summary>
2005 <param name="value">The value to convert</param>
2006 <returns>An 8 byte little endian array</returns>
2007 </member> 2222 </member>
2008 <member name="M:OpenMetaverse.Utils.UInt64ToBytes(System.UInt64)"> 2223 <member name="F:OpenMetaverse.InventoryType.CallingCard">
2009 <summary> 2224 <summary>Calling Card</summary>
2010 Convert a 64-bit unsigned integer to a byte array in little endian
2011 format
2012 </summary>
2013 <param name="value">The value to convert</param>
2014 <returns>An 8 byte little endian array</returns>
2015 </member> 2225 </member>
2016 <member name="M:OpenMetaverse.Utils.FloatToBytes(System.Single)"> 2226 <member name="F:OpenMetaverse.InventoryType.Landmark">
2017 <summary> 2227 <summary>Landmark</summary>
2018 Convert a floating point value to four bytes in little endian
2019 ordering
2020 </summary>
2021 <param name="value">A floating point value</param>
2022 <returns>A four byte array containing the value in little endian
2023 ordering</returns>
2024 </member> 2228 </member>
2025 <member name="M:OpenMetaverse.Utils.UIntToHexString(System.UInt32)"> 2229 <member name="F:OpenMetaverse.InventoryType.Notecard">
2026 <summary> 2230 <summary>Notecard</summary>
2027 Converts an unsigned integer to a hexadecimal string
2028 </summary>
2029 <param name="i">An unsigned integer to convert to a string</param>
2030 <returns>A hexadecimal string 10 characters long</returns>
2031 <example>0x7fffffff</example>
2032 </member> 2231 </member>
2033 <member name="M:OpenMetaverse.Utils.BytesToString(System.Byte[])"> 2232 <member name="F:OpenMetaverse.InventoryType.Category">
2034 <summary> 2233 <summary></summary>
2035 Convert a variable length UTF8 byte array to a string
2036 </summary>
2037 <param name="bytes">The UTF8 encoded byte array to convert</param>
2038 <returns>The decoded string</returns>
2039 </member> 2234 </member>
2040 <member name="M:OpenMetaverse.Utils.BytesToHexString(System.Byte[],System.String)"> 2235 <member name="F:OpenMetaverse.InventoryType.Folder">
2041 <summary> 2236 <summary>Folder</summary>
2042 Converts a byte array to a string containing hexadecimal characters
2043 </summary>
2044 <param name="bytes">The byte array to convert to a string</param>
2045 <param name="fieldName">The name of the field to prepend to each
2046 line of the string</param>
2047 <returns>A string containing hexadecimal characters on multiple
2048 lines. Each line is prepended with the field name</returns>
2049 </member> 2237 </member>
2050 <member name="M:OpenMetaverse.Utils.BytesToHexString(System.Byte[],System.Int32,System.String)"> 2238 <member name="F:OpenMetaverse.InventoryType.RootCategory">
2051 <summary> 2239 <summary></summary>
2052 Converts a byte array to a string containing hexadecimal characters
2053 </summary>
2054 <param name="bytes">The byte array to convert to a string</param>
2055 <param name="length">Number of bytes in the array to parse</param>
2056 <param name="fieldName">A string to prepend to each line of the hex
2057 dump</param>
2058 <returns>A string containing hexadecimal characters on multiple
2059 lines. Each line is prepended with the field name</returns>
2060 </member> 2240 </member>
2061 <member name="M:OpenMetaverse.Utils.StringToBytes(System.String)"> 2241 <member name="F:OpenMetaverse.InventoryType.LSL">
2062 <summary> 2242 <summary>an LSL Script</summary>
2063 Convert a string to a UTF8 encoded byte array
2064 </summary>
2065 <param name="str">The string to convert</param>
2066 <returns>A null-terminated UTF8 byte array</returns>
2067 </member> 2243 </member>
2068 <member name="M:OpenMetaverse.Utils.HexStringToBytes(System.String,System.Boolean)"> 2244 <member name="F:OpenMetaverse.InventoryType.Snapshot">
2069 <summary> 2245 <summary></summary>
2070 Converts a string containing hexadecimal characters to a byte array
2071 </summary>
2072 <param name="hexString">String containing hexadecimal characters</param>
2073 <param name="handleDirty">If true, gracefully handles null, empty and
2074 uneven strings as well as stripping unconvertable characters</param>
2075 <returns>The converted byte array</returns>
2076 </member> 2246 </member>
2077 <member name="M:OpenMetaverse.Utils.IsHexDigit(System.Char)"> 2247 <member name="F:OpenMetaverse.InventoryType.Attachment">
2078 <summary> 2248 <summary></summary>
2079 Returns true is c is a hexadecimal digit (A-F, a-f, 0-9)
2080 </summary>
2081 <param name="c">Character to test</param>
2082 <returns>true if hex digit, false if not</returns>
2083 </member> 2249 </member>
2084 <member name="M:OpenMetaverse.Utils.HexToByte(System.String)"> 2250 <member name="F:OpenMetaverse.InventoryType.Wearable">
2085 <summary> 2251 <summary></summary>
2086 Converts 1 or 2 character string into equivalant byte value
2087 </summary>
2088 <param name="hex">1 or 2 character string</param>
2089 <returns>byte</returns>
2090 </member> 2252 </member>
2091 <member name="M:OpenMetaverse.Utils.FloatToByte(System.Single,System.Single,System.Single)"> 2253 <member name="F:OpenMetaverse.InventoryType.Animation">
2092 <summary> 2254 <summary></summary>
2093 Convert a float value to a byte given a minimum and maximum range
2094 </summary>
2095 <param name="val">Value to convert to a byte</param>
2096 <param name="lower">Minimum value range</param>
2097 <param name="upper">Maximum value range</param>
2098 <returns>A single byte representing the original float value</returns>
2099 </member> 2255 </member>
2100 <member name="M:OpenMetaverse.Utils.ByteToFloat(System.Byte[],System.Int32,System.Single,System.Single)"> 2256 <member name="F:OpenMetaverse.InventoryType.Gesture">
2101 <summary> 2257 <summary></summary>
2102 Convert a byte to a float value given a minimum and maximum range
2103 </summary>
2104 <param name="bytes">Byte array to get the byte from</param>
2105 <param name="pos">Position in the byte array the desired byte is at</param>
2106 <param name="lower">Minimum value range</param>
2107 <param name="upper">Maximum value range</param>
2108 <returns>A float value inclusively between lower and upper</returns>
2109 </member> 2258 </member>
2110 <member name="M:OpenMetaverse.Utils.ByteToFloat(System.Byte,System.Single,System.Single)"> 2259 <member name="F:OpenMetaverse.InventoryType.Mesh">
2111 <summary> 2260 <summary></summary>
2112 Convert a byte to a float value given a minimum and maximum range
2113 </summary>
2114 <param name="val">Byte to convert to a float value</param>
2115 <param name="lower">Minimum value range</param>
2116 <param name="upper">Maximum value range</param>
2117 <returns>A float value inclusively between lower and upper</returns>
2118 </member> 2261 </member>
2119 <member name="M:OpenMetaverse.Utils.TryParseSingle(System.String,System.Single@)"> 2262 <member name="T:OpenMetaverse.SaleType">
2120 <summary> 2263 <summary>
2121 Attempts to parse a floating point value from a string, using an 2264 Item Sale Status
2122 EN-US number format
2123 </summary> 2265 </summary>
2124 <param name="s">String to parse</param>
2125 <param name="result">Resulting floating point number</param>
2126 <returns>True if the parse was successful, otherwise false</returns>
2127 </member> 2266 </member>
2128 <member name="M:OpenMetaverse.Utils.TryParseDouble(System.String,System.Double@)"> 2267 <member name="F:OpenMetaverse.SaleType.Not">
2129 <summary> 2268 <summary>Not for sale</summary>
2130 Attempts to parse a floating point value from a string, using an
2131 EN-US number format
2132 </summary>
2133 <param name="s">String to parse</param>
2134 <param name="result">Resulting floating point number</param>
2135 <returns>True if the parse was successful, otherwise false</returns>
2136 </member> 2269 </member>
2137 <member name="M:OpenMetaverse.Utils.TryParseHex(System.String,System.UInt32@)"> 2270 <member name="F:OpenMetaverse.SaleType.Original">
2138 <summary> 2271 <summary>The original is for sale</summary>
2139 Tries to parse an unsigned 32-bit integer from a hexadecimal string
2140 </summary>
2141 <param name="s">String to parse</param>
2142 <param name="result">Resulting integer</param>
2143 <returns>True if the parse was successful, otherwise false</returns>
2144 </member> 2272 </member>
2145 <member name="M:OpenMetaverse.Utils.EnumToText(System.Enum)"> 2273 <member name="F:OpenMetaverse.SaleType.Copy">
2146 <summary> 2274 <summary>Copies are for sale</summary>
2147 Returns text specified in EnumInfo attribute of the enumerator
2148 To add the text use [EnumInfo(Text = "Some nice text here")] before declaration
2149 of enum values
2150 </summary>
2151 <param name="value">Enum value</param>
2152 <returns>Text representation of the enum</returns>
2153 </member> 2275 </member>
2154 <member name="M:OpenMetaverse.Utils.AssetTypeToString(OpenMetaverse.AssetType)"> 2276 <member name="F:OpenMetaverse.SaleType.Contents">
2155 <summary> 2277 <summary>The contents of the object are for sale</summary>
2156 Takes an AssetType and returns the string representation
2157 </summary>
2158 <param name="type">The source <seealso cref="T:OpenMetaverse.AssetType" /></param>
2159 <returns>The string version of the AssetType</returns>
2160 </member> 2278 </member>
2161 <member name="M:OpenMetaverse.Utils.StringToAssetType(System.String)"> 2279 <member name="T:OpenMetaverse.WearableType">
2162 <summary> 2280 <summary>
2163 Translate a string name of an AssetType into the proper Type 2281 Types of wearable assets
2164 </summary> 2282 </summary>
2165 <param name="type">A string containing the AssetType name</param>
2166 <returns>The AssetType which matches the string name, or AssetType.Unknown if no match was found</returns>
2167 </member> 2283 </member>
2168 <member name="M:OpenMetaverse.Utils.InventoryTypeToString(OpenMetaverse.InventoryType)"> 2284 <member name="F:OpenMetaverse.WearableType.Shape">
2169 <summary> 2285 <summary>Body shape</summary>
2170 Convert an InventoryType to a string
2171 </summary>
2172 <param name="type">The <seealso cref="T:InventoryType" /> to convert</param>
2173 <returns>A string representation of the source</returns>
2174 </member> 2286 </member>
2175 <member name="M:OpenMetaverse.Utils.StringToInventoryType(System.String)"> 2287 <member name="F:OpenMetaverse.WearableType.Skin">
2176 <summary> 2288 <summary>Skin textures and attributes</summary>
2177 Convert a string into a valid InventoryType
2178 </summary>
2179 <param name="type">A string representation of the InventoryType to convert</param>
2180 <returns>A InventoryType object which matched the type</returns>
2181 </member> 2289 </member>
2182 <member name="M:OpenMetaverse.Utils.SaleTypeToString(OpenMetaverse.SaleType)"> 2290 <member name="F:OpenMetaverse.WearableType.Hair">
2183 <summary> 2291 <summary>Hair</summary>
2184 Convert a SaleType to a string
2185 </summary>
2186 <param name="type">The <seealso cref="T:SaleType" /> to convert</param>
2187 <returns>A string representation of the source</returns>
2188 </member> 2292 </member>
2189 <member name="M:OpenMetaverse.Utils.StringToSaleType(System.String)"> 2293 <member name="F:OpenMetaverse.WearableType.Eyes">
2190 <summary> 2294 <summary>Eyes</summary>
2191 Convert a string into a valid SaleType
2192 </summary>
2193 <param name="value">A string representation of the SaleType to convert</param>
2194 <returns>A SaleType object which matched the type</returns>
2195 </member> 2295 </member>
2196 <member name="M:OpenMetaverse.Utils.StringToAttachmentPoint(System.String)"> 2296 <member name="F:OpenMetaverse.WearableType.Shirt">
2197 <summary> 2297 <summary>Shirt</summary>
2198 Converts a string used in LLSD to AttachmentPoint type
2199 </summary>
2200 <param name="value">String representation of AttachmentPoint to convert</param>
2201 <returns>AttachmentPoint enum</returns>
2202 </member> 2298 </member>
2203 <member name="M:OpenMetaverse.Utils.CopyBytes(System.Byte[])"> 2299 <member name="F:OpenMetaverse.WearableType.Pants">
2204 <summary> 2300 <summary>Pants</summary>
2205 Copy a byte array
2206 </summary>
2207 <param name="bytes">Byte array to copy</param>
2208 <returns>A copy of the given byte array</returns>
2209 </member> 2301 </member>
2210 <member name="M:OpenMetaverse.Utils.UIntsToLong(System.UInt32,System.UInt32)"> 2302 <member name="F:OpenMetaverse.WearableType.Shoes">
2211 <summary> 2303 <summary>Shoes</summary>
2212 Packs to 32-bit unsigned integers in to a 64-bit unsigned integer
2213 </summary>
2214 <param name="a">The left-hand (or X) value</param>
2215 <param name="b">The right-hand (or Y) value</param>
2216 <returns>A 64-bit integer containing the two 32-bit input values</returns>
2217 </member> 2304 </member>
2218 <member name="M:OpenMetaverse.Utils.LongToUInts(System.UInt64,System.UInt32@,System.UInt32@)"> 2305 <member name="F:OpenMetaverse.WearableType.Socks">
2219 <summary> 2306 <summary>Socks</summary>
2220 Unpacks two 32-bit unsigned integers from a 64-bit unsigned integer
2221 </summary>
2222 <param name="a">The 64-bit input integer</param>
2223 <param name="b">The left-hand (or X) output value</param>
2224 <param name="c">The right-hand (or Y) output value</param>
2225 </member> 2307 </member>
2226 <member name="M:OpenMetaverse.Utils.IPToUInt(System.Net.IPAddress)"> 2308 <member name="F:OpenMetaverse.WearableType.Jacket">
2227 <summary> 2309 <summary>Jacket</summary>
2228 Convert an IP address object to an unsigned 32-bit integer
2229 </summary>
2230 <param name="address">IP address to convert</param>
2231 <returns>32-bit unsigned integer holding the IP address bits</returns>
2232 </member> 2310 </member>
2233 <member name="M:OpenMetaverse.Utils.GetUnixTime"> 2311 <member name="F:OpenMetaverse.WearableType.Gloves">
2234 <summary> 2312 <summary>Gloves</summary>
2235 Gets a unix timestamp for the current time
2236 </summary>
2237 <returns>An unsigned integer representing a unix timestamp for now</returns>
2238 </member> 2313 </member>
2239 <member name="M:OpenMetaverse.Utils.UnixTimeToDateTime(System.UInt32)"> 2314 <member name="F:OpenMetaverse.WearableType.Undershirt">
2240 <summary> 2315 <summary>Undershirt</summary>
2241 Convert a UNIX timestamp to a native DateTime object
2242 </summary>
2243 <param name="timestamp">An unsigned integer representing a UNIX
2244 timestamp</param>
2245 <returns>A DateTime object containing the same time specified in
2246 the given timestamp</returns>
2247 </member> 2316 </member>
2248 <member name="M:OpenMetaverse.Utils.UnixTimeToDateTime(System.Int32)"> 2317 <member name="F:OpenMetaverse.WearableType.Underpants">
2249 <summary> 2318 <summary>Underpants</summary>
2250 Convert a UNIX timestamp to a native DateTime object
2251 </summary>
2252 <param name="timestamp">A signed integer representing a UNIX
2253 timestamp</param>
2254 <returns>A DateTime object containing the same time specified in
2255 the given timestamp</returns>
2256 </member> 2319 </member>
2257 <member name="M:OpenMetaverse.Utils.DateTimeToUnixTime(System.DateTime)"> 2320 <member name="F:OpenMetaverse.WearableType.Skirt">
2258 <summary> 2321 <summary>Skirt</summary>
2259 Convert a native DateTime object to a UNIX timestamp
2260 </summary>
2261 <param name="time">A DateTime object you want to convert to a
2262 timestamp</param>
2263 <returns>An unsigned integer representing a UNIX timestamp</returns>
2264 </member> 2322 </member>
2265 <member name="M:OpenMetaverse.Utils.Swap``1(``0@,``0@)"> 2323 <member name="F:OpenMetaverse.WearableType.Alpha">
2266 <summary> 2324 <summary>Alpha mask to hide parts of the avatar</summary>
2267 Swap two values
2268 </summary>
2269 <typeparam name="T">Type of the values to swap</typeparam>
2270 <param name="lhs">First value</param>
2271 <param name="rhs">Second value</param>
2272 </member> 2325 </member>
2273 <member name="M:OpenMetaverse.Utils.EnumTryParse``1(System.String,``0@)"> 2326 <member name="F:OpenMetaverse.WearableType.Tattoo">
2274 <summary> 2327 <summary>Tattoo</summary>
2275 Try to parse an enumeration value from a string
2276 </summary>
2277 <typeparam name="T">Enumeration type</typeparam>
2278 <param name="strType">String value to parse</param>
2279 <param name="result">Enumeration value on success</param>
2280 <returns>True if the parsing succeeded, otherwise false</returns>
2281 </member> 2328 </member>
2282 <member name="M:OpenMetaverse.Utils.SwapWords(System.Byte)"> 2329 <member name="F:OpenMetaverse.WearableType.Physics">
2283 <summary> 2330 <summary>Physics</summary>
2284 Swaps the high and low words in a byte. Converts aaaabbbb to bbbbaaaa
2285 </summary>
2286 <param name="value">Byte to swap the words in</param>
2287 <returns>Byte value with the words swapped</returns>
2288 </member> 2331 </member>
2289 <member name="M:OpenMetaverse.Utils.HostnameToIPv4(System.String)"> 2332 <member name="F:OpenMetaverse.WearableType.Invalid">
2290 <summary> 2333 <summary>Invalid wearable asset</summary>
2291 Attempts to convert a string representation of a hostname or IP
2292 address to a <seealso cref="T:System.Net.IPAddress" /></summary>
2293 <param name="hostname">Hostname to convert to an IPAddress</param>
2294 <returns>Converted IP address object, or null if the conversion
2295 failed</returns>
2296 </member> 2334 </member>
2297 <member name="T:OpenMetaverse.Vector2"> 2335 <member name="T:OpenMetaverse.LocklessQueue`1">
2298 <summary> 2336 <summary>
2299 A two-dimensional vector with floating-point values 2337 A thread-safe lockless queue that supports multiple readers and
2338 multiple writers
2300 </summary> 2339 </summary>
2301 </member> 2340 </member>
2302 <member name="F:OpenMetaverse.Vector2.X"> 2341 <member name="F:OpenMetaverse.LocklessQueue`1.head">
2303 <summary>X value</summary> 2342 <summary>Queue head</summary>
2304 </member>
2305 <member name="F:OpenMetaverse.Vector2.Y">
2306 <summary>Y value</summary>
2307 </member>
2308 <member name="F:OpenMetaverse.Vector2.Zero">
2309 <summary>A vector with a value of 0,0</summary>
2310 </member>
2311 <member name="F:OpenMetaverse.Vector2.One">
2312 <summary>A vector with a value of 1,1</summary>
2313 </member> 2343 </member>
2314 <member name="F:OpenMetaverse.Vector2.UnitX"> 2344 <member name="F:OpenMetaverse.LocklessQueue`1.tail">
2315 <summary>A vector with a value of 1,0</summary> 2345 <summary>Queue tail</summary>
2316 </member> 2346 </member>
2317 <member name="F:OpenMetaverse.Vector2.UnitY"> 2347 <member name="F:OpenMetaverse.LocklessQueue`1.count">
2318 <summary>A vector with a value of 0,1</summary> 2348 <summary>Queue item count</summary>
2319 </member> 2349 </member>
2320 <member name="M:OpenMetaverse.Vector2.ApproxEquals(OpenMetaverse.Vector2,System.Single)"> 2350 <member name="M:OpenMetaverse.LocklessQueue`1.#ctor">
2321 <summary> 2351 <summary>
2322 Test if this vector is equal to another vector, within a given 2352 Constructor
2323 tolerance range
2324 </summary> 2353 </summary>
2325 <param name="vec">Vector to test against</param>
2326 <param name="tolerance">The acceptable magnitude of difference
2327 between the two vectors</param>
2328 <returns>True if the magnitude of difference between the two vectors
2329 is less than the given tolerance, otherwise false</returns>
2330 </member> 2354 </member>
2331 <member name="M:OpenMetaverse.Vector2.IsFinite"> 2355 <member name="M:OpenMetaverse.LocklessQueue`1.Enqueue(`0)">
2332 <summary> 2356 <summary>
2333 Test if this vector is composed of all finite numbers 2357 Enqueue an item
2334 </summary> 2358 </summary>
2359 <param name="item">Item to enqeue</param>
2335 </member> 2360 </member>
2336 <member name="M:OpenMetaverse.Vector2.CompareTo(OpenMetaverse.Vector2)"> 2361 <member name="M:OpenMetaverse.LocklessQueue`1.TryDequeue(`0@)">
2337 <summary> 2362 <summary>
2338 IComparable.CompareTo implementation 2363 Try to dequeue an item
2339 </summary> 2364 </summary>
2365 <param name="item">Dequeued item if the dequeue was successful</param>
2366 <returns>True if an item was successfully deqeued, otherwise false</returns>
2340 </member> 2367 </member>
2341 <member name="M:OpenMetaverse.Vector2.FromBytes(System.Byte[],System.Int32)"> 2368 <member name="P:OpenMetaverse.LocklessQueue`1.Count">
2342 <summary> 2369 <summary>Gets the current number of items in the queue. Since this
2343 Builds a vector from a byte array 2370 is a lockless collection this value should be treated as a close
2344 </summary> 2371 estimate</summary>
2345 <param name="byteArray">Byte array containing two four-byte floats</param>
2346 <param name="pos">Beginning position in the byte array</param>
2347 </member> 2372 </member>
2348 <member name="M:OpenMetaverse.Vector2.GetBytes"> 2373 <member name="T:OpenMetaverse.LocklessQueue`1.SingleLinkNode">
2349 <summary> 2374 <summary>
2350 Returns the raw bytes for this vector 2375 Provides a node container for data in a singly linked list
2351 </summary> 2376 </summary>
2352 <returns>An eight-byte array containing X and Y</returns>
2353 </member> 2377 </member>
2354 <member name="M:OpenMetaverse.Vector2.ToBytes(System.Byte[],System.Int32)"> 2378 <member name="F:OpenMetaverse.LocklessQueue`1.SingleLinkNode.Next">
2355 <summary> 2379 <summary>Pointer to the next node in list</summary>
2356 Writes the raw bytes for this vector to a byte array
2357 </summary>
2358 <param name="dest">Destination byte array</param>
2359 <param name="pos">Position in the destination array to start
2360 writing. Must be at least 8 bytes before the end of the array</param>
2361 </member> 2380 </member>
2362 <member name="M:OpenMetaverse.Vector2.Parse(System.String)"> 2381 <member name="F:OpenMetaverse.LocklessQueue`1.SingleLinkNode.Item">
2382 <summary>The data contained by the node</summary>
2383 </member>
2384 <member name="M:OpenMetaverse.LocklessQueue`1.SingleLinkNode.#ctor">
2363 <summary> 2385 <summary>
2364 Parse a vector from a string 2386 Constructor
2365 </summary> 2387 </summary>
2366 <param name="val">A string representation of a 2D vector, enclosed
2367 in arrow brackets and separated by commas</param>
2368 </member> 2388 </member>
2369 <member name="M:OpenMetaverse.Vector2.SmoothStep(OpenMetaverse.Vector2,OpenMetaverse.Vector2,System.Single)"> 2389 <member name="M:OpenMetaverse.LocklessQueue`1.SingleLinkNode.#ctor(`0)">
2370 <summary> 2390 <summary>
2371 Interpolates between two vectors using a cubic equation 2391 Constructor
2372 </summary> 2392 </summary>
2373 </member> 2393 </member>
2374 <member name="M:OpenMetaverse.Vector2.ToString"> 2394 <member name="T:OpenMetaverse.UUID">
2375 <summary> 2395 <summary>
2376 Get a formatted string representation of the vector 2396 A 128-bit Universally Unique Identifier, used throughout the Second
2397 Life networking protocol
2377 </summary> 2398 </summary>
2378 <returns>A string representation of the vector</returns>
2379 </member> 2399 </member>
2380 <member name="M:OpenMetaverse.Vector2.ToRawString"> 2400 <member name="F:OpenMetaverse.UUID.Guid">
2401 <summary>The System.Guid object this struct wraps around</summary>
2402 </member>
2403 <member name="M:OpenMetaverse.UUID.#ctor(System.String)">
2381 <summary> 2404 <summary>
2382 Get a string representation of the vector elements with up to three 2405 Constructor that takes a string UUID representation
2383 decimal digits and separated by spaces only
2384 </summary> 2406 </summary>
2385 <returns>Raw string representation of the vector</returns> 2407 <param name="val">A string representation of a UUID, case
2408 insensitive and can either be hyphenated or non-hyphenated</param>
2409 <example>UUID("11f8aa9c-b071-4242-836b-13b7abe0d489")</example>
2386 </member> 2410 </member>
2387 <member name="T:OpenMetaverse.Vector3"> 2411 <member name="M:OpenMetaverse.UUID.#ctor(System.Guid)">
2388 <summary> 2412 <summary>
2389 A three-dimensional vector with floating-point values 2413 Constructor that takes a System.Guid object
2390 </summary> 2414 </summary>
2415 <param name="val">A Guid object that contains the unique identifier
2416 to be represented by this UUID</param>
2391 </member> 2417 </member>
2392 <member name="M:OpenMetaverse.Vector3.#ctor(System.Byte[],System.Int32)"> 2418 <member name="M:OpenMetaverse.UUID.#ctor(System.Byte[],System.Int32)">
2393 <summary> 2419 <summary>
2394 Constructor, builds a vector from a byte array 2420 Constructor that takes a byte array containing a UUID
2395 </summary> 2421 </summary>
2396 <param name="byteArray">Byte array containing three four-byte floats</param> 2422 <param name="source">Byte array containing a 16 byte UUID</param>
2397 <param name="pos">Beginning position in the byte array</param> 2423 <param name="pos">Beginning offset in the array</param>
2398 </member>
2399 <member name="F:OpenMetaverse.Vector3.X">
2400 <summary>X value</summary>
2401 </member>
2402 <member name="F:OpenMetaverse.Vector3.Y">
2403 <summary>Y value</summary>
2404 </member>
2405 <member name="F:OpenMetaverse.Vector3.Z">
2406 <summary>Z value</summary>
2407 </member>
2408 <member name="F:OpenMetaverse.Vector3.Zero">
2409 <summary>A vector with a value of 0,0,0</summary>
2410 </member>
2411 <member name="F:OpenMetaverse.Vector3.One">
2412 <summary>A vector with a value of 1,1,1</summary>
2413 </member>
2414 <member name="F:OpenMetaverse.Vector3.UnitX">
2415 <summary>A unit vector facing forward (X axis), value 1,0,0</summary>
2416 </member>
2417 <member name="F:OpenMetaverse.Vector3.UnitY">
2418 <summary>A unit vector facing left (Y axis), value 0,1,0</summary>
2419 </member>
2420 <member name="F:OpenMetaverse.Vector3.UnitZ">
2421 <summary>A unit vector facing up (Z axis), value 0,0,1</summary>
2422 </member> 2424 </member>
2423 <member name="M:OpenMetaverse.Vector3.ApproxEquals(OpenMetaverse.Vector3,System.Single)"> 2425 <member name="M:OpenMetaverse.UUID.#ctor(System.UInt64)">
2424 <summary> 2426 <summary>
2425 Test if this vector is equal to another vector, within a given 2427 Constructor that takes an unsigned 64-bit unsigned integer to
2426 tolerance range 2428 convert to a UUID
2427 </summary> 2429 </summary>
2428 <param name="vec">Vector to test against</param> 2430 <param name="val">64-bit unsigned integer to convert to a UUID</param>
2429 <param name="tolerance">The acceptable magnitude of difference
2430 between the two vectors</param>
2431 <returns>True if the magnitude of difference between the two vectors
2432 is less than the given tolerance, otherwise false</returns>
2433 </member> 2431 </member>
2434 <member name="M:OpenMetaverse.Vector3.CompareTo(OpenMetaverse.Vector3)"> 2432 <member name="M:OpenMetaverse.UUID.#ctor(OpenMetaverse.UUID)">
2435 <summary> 2433 <summary>
2436 IComparable.CompareTo implementation 2434 Copy constructor
2437 </summary> 2435 </summary>
2436 <param name="val">UUID to copy</param>
2438 </member> 2437 </member>
2439 <member name="M:OpenMetaverse.Vector3.IsFinite"> 2438 <member name="M:OpenMetaverse.UUID.CompareTo(OpenMetaverse.UUID)">
2440 <summary> 2439 <summary>
2441 Test if this vector is composed of all finite numbers 2440 IComparable.CompareTo implementation
2442 </summary> 2441 </summary>
2443 </member> 2442 </member>
2444 <member name="M:OpenMetaverse.Vector3.FromBytes(System.Byte[],System.Int32)"> 2443 <member name="M:OpenMetaverse.UUID.FromBytes(System.Byte[],System.Int32)">
2445 <summary> 2444 <summary>
2446 Builds a vector from a byte array 2445 Assigns this UUID from 16 bytes out of a byte array
2447 </summary> 2446 </summary>
2448 <param name="byteArray">Byte array containing a 12 byte vector</param> 2447 <param name="source">Byte array containing the UUID to assign this UUID to</param>
2449 <param name="pos">Beginning position in the byte array</param> 2448 <param name="pos">Starting position of the UUID in the byte array</param>
2450 </member> 2449 </member>
2451 <member name="M:OpenMetaverse.Vector3.GetBytes"> 2450 <member name="M:OpenMetaverse.UUID.GetBytes">
2452 <summary> 2451 <summary>
2453 Returns the raw bytes for this vector 2452 Returns a copy of the raw bytes for this UUID
2454 </summary> 2453 </summary>
2455 <returns>A 12 byte array containing X, Y, and Z</returns> 2454 <returns>A 16 byte array containing this UUID</returns>
2456 </member> 2455 </member>
2457 <member name="M:OpenMetaverse.Vector3.ToBytes(System.Byte[],System.Int32)"> 2456 <member name="M:OpenMetaverse.UUID.ToBytes(System.Byte[],System.Int32)">
2458 <summary> 2457 <summary>
2459 Writes the raw bytes for this vector to a byte array 2458 Writes the raw bytes for this UUID to a byte array
2460 </summary> 2459 </summary>
2461 <param name="dest">Destination byte array</param> 2460 <param name="dest">Destination byte array</param>
2462 <param name="pos">Position in the destination array to start 2461 <param name="pos">Position in the destination array to start
2463 writing. Must be at least 12 bytes before the end of the array</param> 2462 writing. Must be at least 16 bytes before the end of the array</param>
2464 </member> 2463 </member>
2465 <member name="M:OpenMetaverse.Vector3.Parse(System.String)"> 2464 <member name="M:OpenMetaverse.UUID.CRC">
2466 <summary> 2465 <summary>
2467 Parse a vector from a string 2466 Calculate an LLCRC (cyclic redundancy check) for this UUID
2468 </summary> 2467 </summary>
2469 <param name="val">A string representation of a 3D vector, enclosed 2468 <returns>The CRC checksum for this UUID</returns>
2470 in arrow brackets and separated by commas</param>
2471 </member> 2469 </member>
2472 <member name="M:OpenMetaverse.Vector3.RotationBetween(OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 2470 <member name="M:OpenMetaverse.UUID.GetULong">
2473 <summary> 2471 <summary>
2474 Calculate the rotation between two vectors 2472 Create a 64-bit integer representation from the second half of this UUID
2475 </summary> 2473 </summary>
2476 <param name="a">Normalized directional vector (such as 1,0,0 for forward facing)</param> 2474 <returns>An integer created from the last eight bytes of this UUID</returns>
2477 <param name="b">Normalized target vector</param>
2478 </member> 2475 </member>
2479 <member name="M:OpenMetaverse.Vector3.SmoothStep(OpenMetaverse.Vector3,OpenMetaverse.Vector3,System.Single)"> 2476 <member name="M:OpenMetaverse.UUID.Parse(System.String)">
2480 <summary> 2477 <summary>
2481 Interpolates between two vectors using a cubic equation 2478 Generate a UUID from a string
2482 </summary> 2479 </summary>
2480 <param name="val">A string representation of a UUID, case
2481 insensitive and can either be hyphenated or non-hyphenated</param>
2482 <example>UUID.Parse("11f8aa9c-b071-4242-836b-13b7abe0d489")</example>
2483 </member> 2483 </member>
2484 <member name="M:OpenMetaverse.Vector3.ToString"> 2484 <member name="M:OpenMetaverse.UUID.TryParse(System.String,OpenMetaverse.UUID@)">
2485 <summary> 2485 <summary>
2486 Get a formatted string representation of the vector 2486 Generate a UUID from a string
2487 </summary> 2487 </summary>
2488 <returns>A string representation of the vector</returns> 2488 <param name="val">A string representation of a UUID, case
2489 insensitive and can either be hyphenated or non-hyphenated</param>
2490 <param name="result">Will contain the parsed UUID if successful,
2491 otherwise null</param>
2492 <returns>True if the string was successfully parse, otherwise false</returns>
2493 <example>UUID.TryParse("11f8aa9c-b071-4242-836b-13b7abe0d489", result)</example>
2489 </member> 2494 </member>
2490 <member name="M:OpenMetaverse.Vector3.ToRawString"> 2495 <member name="M:OpenMetaverse.UUID.Combine(OpenMetaverse.UUID,OpenMetaverse.UUID)">
2491 <summary> 2496 <summary>
2492 Get a string representation of the vector elements with up to three 2497 Combine two UUIDs together by taking the MD5 hash of a byte array
2493 decimal digits and separated by spaces only 2498 containing both UUIDs
2494 </summary> 2499 </summary>
2495 <returns>Raw string representation of the vector</returns> 2500 <param name="first">First UUID to combine</param>
2501 <param name="second">Second UUID to combine</param>
2502 <returns>The UUID product of the combination</returns>
2496 </member> 2503 </member>
2497 <member name="M:OpenMetaverse.Vector3.op_Modulus(OpenMetaverse.Vector3,OpenMetaverse.Vector3)"> 2504 <member name="M:OpenMetaverse.UUID.Random">
2498 <summary> 2505 <summary>
2499 Cross product between two vectors 2506
2500 </summary> 2507 </summary>
2508 <returns></returns>
2501 </member> 2509 </member>
2502 <member name="T:OpenMetaverse.Vector3d"> 2510 <member name="M:OpenMetaverse.UUID.GetHashCode">
2503 <summary> 2511 <summary>
2504 A three-dimensional vector with doubleing-point values 2512 Return a hash code for this UUID, used by .NET for hash tables
2505 </summary> 2513 </summary>
2514 <returns>An integer composed of all the UUID bytes XORed together</returns>
2506 </member> 2515 </member>
2507 <member name="M:OpenMetaverse.Vector3d.#ctor(System.Byte[],System.Int32)"> 2516 <member name="M:OpenMetaverse.UUID.Equals(System.Object)">
2508 <summary> 2517 <summary>
2509 Constructor, builds a vector from a byte array 2518 Comparison function
2510 </summary> 2519 </summary>
2511 <param name="byteArray">Byte array containing three eight-byte doubles</param> 2520 <param name="o">An object to compare to this UUID</param>
2512 <param name="pos">Beginning position in the byte array</param> 2521 <returns>True if the object is a UUID and both UUIDs are equal</returns>
2513 </member>
2514 <member name="F:OpenMetaverse.Vector3d.X">
2515 <summary>X value</summary>
2516 </member>
2517 <member name="F:OpenMetaverse.Vector3d.Y">
2518 <summary>Y value</summary>
2519 </member>
2520 <member name="F:OpenMetaverse.Vector3d.Z">
2521 <summary>Z value</summary>
2522 </member>
2523 <member name="F:OpenMetaverse.Vector3d.Zero">
2524 <summary>A vector with a value of 0,0,0</summary>
2525 </member>
2526 <member name="F:OpenMetaverse.Vector3d.One">
2527 <summary>A vector with a value of 1,1,1</summary>
2528 </member>
2529 <member name="F:OpenMetaverse.Vector3d.UnitX">
2530 <summary>A unit vector facing forward (X axis), value of 1,0,0</summary>
2531 </member>
2532 <member name="F:OpenMetaverse.Vector3d.UnitY">
2533 <summary>A unit vector facing left (Y axis), value of 0,1,0</summary>
2534 </member>
2535 <member name="F:OpenMetaverse.Vector3d.UnitZ">
2536 <summary>A unit vector facing up (Z axis), value of 0,0,1</summary>
2537 </member> 2522 </member>
2538 <member name="M:OpenMetaverse.Vector3d.ApproxEquals(OpenMetaverse.Vector3d,System.Double)"> 2523 <member name="M:OpenMetaverse.UUID.Equals(OpenMetaverse.UUID)">
2539 <summary> 2524 <summary>
2540 Test if this vector is equal to another vector, within a given 2525 Comparison function
2541 tolerance range
2542 </summary> 2526 </summary>
2543 <param name="vec">Vector to test against</param> 2527 <param name="uuid">UUID to compare to</param>
2544 <param name="tolerance">The acceptable magnitude of difference 2528 <returns>True if the UUIDs are equal, otherwise false</returns>
2545 between the two vectors</param>
2546 <returns>True if the magnitude of difference between the two vectors
2547 is less than the given tolerance, otherwise false</returns>
2548 </member> 2529 </member>
2549 <member name="M:OpenMetaverse.Vector3d.CompareTo(OpenMetaverse.Vector3d)"> 2530 <member name="M:OpenMetaverse.UUID.ToString">
2550 <summary> 2531 <summary>
2551 IComparable.CompareTo implementation 2532 Get a hyphenated string representation of this UUID
2552 </summary> 2533 </summary>
2534 <returns>A string representation of this UUID, lowercase and
2535 with hyphens</returns>
2536 <example>11f8aa9c-b071-4242-836b-13b7abe0d489</example>
2553 </member> 2537 </member>
2554 <member name="M:OpenMetaverse.Vector3d.IsFinite"> 2538 <member name="M:OpenMetaverse.UUID.op_Equality(OpenMetaverse.UUID,OpenMetaverse.UUID)">
2555 <summary> 2539 <summary>
2556 Test if this vector is composed of all finite numbers 2540 Equals operator
2557 </summary> 2541 </summary>
2542 <param name="lhs">First UUID for comparison</param>
2543 <param name="rhs">Second UUID for comparison</param>
2544 <returns>True if the UUIDs are byte for byte equal, otherwise false</returns>
2558 </member> 2545 </member>
2559 <member name="M:OpenMetaverse.Vector3d.FromBytes(System.Byte[],System.Int32)"> 2546 <member name="M:OpenMetaverse.UUID.op_Inequality(OpenMetaverse.UUID,OpenMetaverse.UUID)">
2560 <summary> 2547 <summary>
2561 Builds a vector from a byte array 2548 Not equals operator
2562 </summary> 2549 </summary>
2563 <param name="byteArray">Byte array containing a 24 byte vector</param> 2550 <param name="lhs">First UUID for comparison</param>
2564 <param name="pos">Beginning position in the byte array</param> 2551 <param name="rhs">Second UUID for comparison</param>
2552 <returns>True if the UUIDs are not equal, otherwise true</returns>
2565 </member> 2553 </member>
2566 <member name="M:OpenMetaverse.Vector3d.GetBytes"> 2554 <member name="M:OpenMetaverse.UUID.op_ExclusiveOr(OpenMetaverse.UUID,OpenMetaverse.UUID)">
2567 <summary> 2555 <summary>
2568 Returns the raw bytes for this vector 2556 XOR operator
2569 </summary> 2557 </summary>
2570 <returns>A 24 byte array containing X, Y, and Z</returns> 2558 <param name="lhs">First UUID</param>
2559 <param name="rhs">Second UUID</param>
2560 <returns>A UUID that is a XOR combination of the two input UUIDs</returns>
2571 </member> 2561 </member>
2572 <member name="M:OpenMetaverse.Vector3d.ToBytes(System.Byte[],System.Int32)"> 2562 <member name="M:OpenMetaverse.UUID.op_Explicit(System.String)~OpenMetaverse.UUID">
2573 <summary> 2563 <summary>
2574 Writes the raw bytes for this vector to a byte array 2564 String typecasting operator
2575 </summary> 2565 </summary>
2576 <param name="dest">Destination byte array</param> 2566 <param name="val">A UUID in string form. Case insensitive,
2577 <param name="pos">Position in the destination array to start 2567 hyphenated or non-hyphenated</param>
2578 writing. Must be at least 24 bytes before the end of the array</param> 2568 <returns>A UUID built from the string representation</returns>
2579 </member> 2569 </member>
2580 <member name="M:OpenMetaverse.Vector3d.Parse(System.String)"> 2570 <member name="F:OpenMetaverse.UUID.Zero">
2581 <summary> 2571 <summary>An UUID with a value of all zeroes</summary>
2582 Parse a vector from a string
2583 </summary>
2584 <param name="val">A string representation of a 3D vector, enclosed
2585 in arrow brackets and separated by commas</param>
2586 </member> 2572 </member>
2587 <member name="M:OpenMetaverse.Vector3d.SmoothStep(OpenMetaverse.Vector3d,OpenMetaverse.Vector3d,System.Double)"> 2573 <member name="F:OpenMetaverse.UUID.ZeroString">
2588 <summary> 2574 <summary>A cache of UUID.Zero as a string to optimize a common path</summary>
2589 Interpolates between two vectors using a cubic equation
2590 </summary>
2591 </member> 2575 </member>
2592 <member name="M:OpenMetaverse.Vector3d.ToString"> 2576 <member name="T:OpenMetaverse.Parallel">
2593 <summary> 2577 <summary>
2594 Get a formatted string representation of the vector 2578 Provides helper methods for parallelizing loops
2595 </summary> 2579 </summary>
2596 <returns>A string representation of the vector</returns>
2597 </member> 2580 </member>
2598 <member name="M:OpenMetaverse.Vector3d.ToRawString"> 2581 <member name="M:OpenMetaverse.Parallel.For(System.Int32,System.Int32,System.Action{System.Int32})">
2599 <summary> 2582 <summary>
2600 Get a string representation of the vector elements with up to three 2583 Executes a for loop in which iterations may run in parallel
2601 decimal digits and separated by spaces only
2602 </summary> 2584 </summary>
2603 <returns>Raw string representation of the vector</returns> 2585 <param name="fromInclusive">The loop will be started at this index</param>
2586 <param name="toExclusive">The loop will be terminated before this index is reached</param>
2587 <param name="body">Method body to run for each iteration of the loop</param>
2604 </member> 2588 </member>
2605 <member name="M:OpenMetaverse.Vector3d.op_Modulus(OpenMetaverse.Vector3d,OpenMetaverse.Vector3d)"> 2589 <member name="M:OpenMetaverse.Parallel.For(System.Int32,System.Int32,System.Int32,System.Action{System.Int32})">
2606 <summary> 2590 <summary>
2607 Cross product between two vectors 2591 Executes a for loop in which iterations may run in parallel
2608 </summary> 2592 </summary>
2593 <param name="threadCount">The number of concurrent execution threads to run</param>
2594 <param name="fromInclusive">The loop will be started at this index</param>
2595 <param name="toExclusive">The loop will be terminated before this index is reached</param>
2596 <param name="body">Method body to run for each iteration of the loop</param>
2609 </member> 2597 </member>
2610 <member name="M:OpenMetaverse.Vector4.#ctor(System.Byte[],System.Int32)"> 2598 <member name="M:OpenMetaverse.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
2611 <summary> 2599 <summary>
2612 Constructor, builds a vector from a byte array 2600 Executes a foreach loop in which iterations may run in parallel
2613 </summary> 2601 </summary>
2614 <param name="byteArray">Byte array containing four four-byte floats</param> 2602 <typeparam name="T">Object type that the collection wraps</typeparam>
2615 <param name="pos">Beginning position in the byte array</param> 2603 <param name="enumerable">An enumerable collection to iterate over</param>
2616 </member> 2604 <param name="body">Method body to run for each object in the collection</param>
2617 <member name="F:OpenMetaverse.Vector4.X">
2618 <summary>X value</summary>
2619 </member>
2620 <member name="F:OpenMetaverse.Vector4.Y">
2621 <summary>Y value</summary>
2622 </member>
2623 <member name="F:OpenMetaverse.Vector4.Z">
2624 <summary>Z value</summary>
2625 </member>
2626 <member name="F:OpenMetaverse.Vector4.W">
2627 <summary>W value</summary>
2628 </member>
2629 <member name="F:OpenMetaverse.Vector4.Zero">
2630 <summary>A vector with a value of 0,0,0,0</summary>
2631 </member>
2632 <member name="F:OpenMetaverse.Vector4.One">
2633 <summary>A vector with a value of 1,1,1,1</summary>
2634 </member>
2635 <member name="F:OpenMetaverse.Vector4.UnitX">
2636 <summary>A vector with a value of 1,0,0,0</summary>
2637 </member>
2638 <member name="F:OpenMetaverse.Vector4.UnitY">
2639 <summary>A vector with a value of 0,1,0,0</summary>
2640 </member>
2641 <member name="F:OpenMetaverse.Vector4.UnitZ">
2642 <summary>A vector with a value of 0,0,1,0</summary>
2643 </member>
2644 <member name="F:OpenMetaverse.Vector4.UnitW">
2645 <summary>A vector with a value of 0,0,0,1</summary>
2646 </member> 2605 </member>
2647 <member name="M:OpenMetaverse.Vector4.ApproxEquals(OpenMetaverse.Vector4,System.Single)"> 2606 <member name="M:OpenMetaverse.Parallel.ForEach``1(System.Int32,System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
2648 <summary> 2607 <summary>
2649 Test if this vector is equal to another vector, within a given 2608 Executes a foreach loop in which iterations may run in parallel
2650 tolerance range
2651 </summary> 2609 </summary>
2652 <param name="vec">Vector to test against</param> 2610 <typeparam name="T">Object type that the collection wraps</typeparam>
2653 <param name="tolerance">The acceptable magnitude of difference 2611 <param name="threadCount">The number of concurrent execution threads to run</param>
2654 between the two vectors</param> 2612 <param name="enumerable">An enumerable collection to iterate over</param>
2655 <returns>True if the magnitude of difference between the two vectors 2613 <param name="body">Method body to run for each object in the collection</param>
2656 is less than the given tolerance, otherwise false</returns>
2657 </member> 2614 </member>
2658 <member name="M:OpenMetaverse.Vector4.CompareTo(OpenMetaverse.Vector4)"> 2615 <member name="M:OpenMetaverse.Parallel.Invoke(System.Action[])">
2659 <summary> 2616 <summary>
2660 IComparable.CompareTo implementation 2617 Executes a series of tasks in parallel
2661 </summary> 2618 </summary>
2619 <param name="actions">A series of method bodies to execute</param>
2662 </member> 2620 </member>
2663 <member name="M:OpenMetaverse.Vector4.IsFinite"> 2621 <member name="M:OpenMetaverse.Parallel.Invoke(System.Int32,System.Action[])">
2664 <summary> 2622 <summary>
2665 Test if this vector is composed of all finite numbers 2623 Executes a series of tasks in parallel
2666 </summary> 2624 </summary>
2625 <param name="threadCount">The number of concurrent execution threads to run</param>
2626 <param name="actions">A series of method bodies to execute</param>
2667 </member> 2627 </member>
2668 <member name="M:OpenMetaverse.Vector4.FromBytes(System.Byte[],System.Int32)"> 2628 <member name="M:OpenMetaverse.CircularQueue`1.#ctor(OpenMetaverse.CircularQueue{`0})">
2669 <summary> 2629 <summary>
2670 Builds a vector from a byte array 2630 Copy constructor
2671 </summary> 2631 </summary>
2672 <param name="byteArray">Byte array containing a 16 byte vector</param> 2632 <param name="queue">Circular queue to copy</param>
2673 <param name="pos">Beginning position in the byte array</param>
2674 </member> 2633 </member>
2675 <member name="M:OpenMetaverse.Vector4.GetBytes"> 2634 <member name="M:OpenMetaverse.ReaderWriterLockSlim.ExitAndWakeUpAppropriateWaiters">
2676 <summary> 2635 <summary>
2677 Returns the raw bytes for this vector 2636 Determines the appropriate events to set, leaves the locks, and sets the events.
2678 </summary> 2637 </summary>
2679 <returns>A 16 byte array containing X, Y, Z, and W</returns>
2680 </member> 2638 </member>
2681 <member name="M:OpenMetaverse.Vector4.ToBytes(System.Byte[],System.Int32)"> 2639 <member name="M:OpenMetaverse.ReaderWriterLockSlim.LazyCreateEvent(System.Threading.EventWaitHandle@,System.Boolean)">
2682 <summary> 2640 <summary>
2683 Writes the raw bytes for this vector to a byte array 2641 A routine for lazily creating a event outside the lock (so if errors
2642 happen they are outside the lock and that we don't do much work
2643 while holding a spin lock). If all goes well, reenter the lock and
2644 set 'waitEvent'
2684 </summary> 2645 </summary>
2685 <param name="dest">Destination byte array</param>
2686 <param name="pos">Position in the destination array to start
2687 writing. Must be at least 16 bytes before the end of the array</param>
2688 </member> 2646 </member>
2689 <member name="M:OpenMetaverse.Vector4.ToRawString"> 2647 <member name="M:OpenMetaverse.ReaderWriterLockSlim.WaitOnEvent(System.Threading.EventWaitHandle,System.UInt32@,System.Int32)">
2690 <summary> 2648 <summary>
2691 Get a string representation of the vector elements with up to three 2649 Waits on 'waitEvent' with a timeout of 'millisceondsTimeout.
2692 decimal digits and separated by spaces only 2650 Before the wait 'numWaiters' is incremented and is restored before leaving this routine.
2693 </summary> 2651 </summary>
2694 <returns>Raw string representation of the vector</returns>
2695 </member> 2652 </member>
2696 </members> 2653 </members>
2697</doc> 2654</doc>
diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll
index 6cc4c5a..7ee907b 100755
--- a/bin/OpenMetaverseTypes.dll
+++ b/bin/OpenMetaverseTypes.dll
Binary files differ
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 842043e..1ea4609 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -503,8 +503,10 @@
503 ;; "<url>" -- capability enabled and served by some other server 503 ;; "<url>" -- capability enabled and served by some other server
504 ;; 504 ;;
505 ; These are enabled by default to localhost. Change if you see fit. 505 ; These are enabled by default to localhost. Change if you see fit.
506 Cap_GetTexture = "localhost" 506 Cap_GetTexture = "localhost"
507 Cap_GetMesh = "localhost" 507 Cap_GetMesh = "localhost"
508 Cap_AvatarPickerSearch = "localhost"
509
508 ; This is disabled by default. Change if you see fit. Note that 510 ; This is disabled by default. Change if you see fit. Note that
509 ; serving this cap from the simulators may lead to poor performace. 511 ; serving this cap from the simulators may lead to poor performace.
510 Cap_WebFetchInventoryDescendents = "" 512 Cap_WebFetchInventoryDescendents = ""
@@ -1026,6 +1028,12 @@
1026 ;# {InitialTerrain} {} {Initial terrain type} {pinhead-island flat} pinhead-island 1028 ;# {InitialTerrain} {} {Initial terrain type} {pinhead-island flat} pinhead-island
1027 ; InitialTerrain = "pinhead-island" 1029 ; InitialTerrain = "pinhead-island"
1028 1030
1031[UserProfiles]
1032 ;# {ProfileURL} {} {Set url to UserProfilesService} {}
1033 ;; Set the value of the url to your UserProfilesService
1034 ;; If un-set / "" the module is disabled
1035 ;; ProfileServiceURL = http://127.0.0.1:8002
1036
1029[Architecture] 1037[Architecture]
1030 ;# {Include-Architecture} {} {Choose one of the following architectures} {config-include/Standalone.ini config-include/StandaloneHypergrid.ini config-include/Grid.ini config-include/GridHypergrid.ini config-include/SimianGrid.ini config-include/HyperSimianGrid.ini} config-include/Standalone.ini 1038 ;# {Include-Architecture} {} {Choose one of the following architectures} {config-include/Standalone.ini config-include/StandaloneHypergrid.ini config-include/Grid.ini config-include/GridHypergrid.ini config-include/SimianGrid.ini config-include/HyperSimianGrid.ini} config-include/Standalone.ini
1031 ;; Uncomment one of the following includes as required. For instance, to create a standalone OpenSim, 1039 ;; Uncomment one of the following includes as required. For instance, to create a standalone OpenSim,
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 3eaef61..3a961d6 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -43,9 +43,14 @@
43 ; Sets the method that OpenSim will use to fire asynchronous 43 ; Sets the method that OpenSim will use to fire asynchronous
44 ; events. Valid values are UnsafeQueueUserWorkItem, 44 ; events. Valid values are UnsafeQueueUserWorkItem,
45 ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread. 45 ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
46 ;
46 ; SmartThreadPool is reported to work well on Mono/Linux, but 47 ; SmartThreadPool is reported to work well on Mono/Linux, but
47 ; UnsafeQueueUserWorkItem has been benchmarked with better 48 ; UnsafeQueueUserWorkItem has been benchmarked with better
48 ; performance on .NET/Windows 49 ; performance on .NET/Windows
50 ;
51 ; UnsafeQueueUserWorkItem refers to the fact that the code creating the event could elevate its security
52 ; privileges. However, as calling code is trusted anyway this is safe (if you set
53 ; TrustedBinaries = true in the [XEngine] section then you already have to trust that incoming code for other reasons).
49 async_call_method = SmartThreadPool 54 async_call_method = SmartThreadPool
50 55
51 ; Max threads to allocate on the FireAndForget thread pool 56 ; Max threads to allocate on the FireAndForget thread pool
@@ -368,6 +373,19 @@
368 AllowRegionRestartFromClient = true 373 AllowRegionRestartFromClient = true
369 374
370 375
376[UserProfiles]
377 ;# {ProfileURL} {} {Set url to UserProfilesService} {}
378 ;; Set the value of the url to your UserProfilesService
379 ;; If un-set / "" the module is disabled
380 ;; If the ProfileURL is not set, then very BASIC
381 ;; profile support will be configured. If the ProfileURL is set to a
382 ;; valid URL, then full profile support will be configured. The URL
383 ;; points to your grid's Robust user profiles service
384 ;;
385 ; ProfileURL = http://127.0.0.1:9000
386
387
388
371[SMTP] 389[SMTP]
372 enabled = false 390 enabled = false
373 391
@@ -536,7 +554,6 @@
536 ;; in OpenSim.ini 554 ;; in OpenSim.ini
537 ;; 555 ;;
538 Cap_AttachmentResources = "" 556 Cap_AttachmentResources = ""
539 Cap_AvatarPickerSearch = ""
540 Cap_ChatSessionRequest = "" 557 Cap_ChatSessionRequest = ""
541 Cap_CopyInventoryFromNotecard = "localhost" 558 Cap_CopyInventoryFromNotecard = "localhost"
542 Cap_DispatchRegionInfo = "" 559 Cap_DispatchRegionInfo = ""
@@ -600,6 +617,10 @@
600 Cap_WebFetchInventoryDescendents = "" 617 Cap_WebFetchInventoryDescendents = ""
601 Cap_FetchInventoryDescendents2 = "localhost" 618 Cap_FetchInventoryDescendents2 = "localhost"
602 Cap_FetchInventory2 = "localhost" 619 Cap_FetchInventory2 = "localhost"
620
621 ; Capability for searching for people
622 Cap_AvatarPickerSearch = "localhost"
623
603 624
604 625
605[Chat] 626[Chat]
@@ -671,6 +692,9 @@
671 ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others). 692 ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others).
672 ResendAppearanceUpdates = true 693 ResendAppearanceUpdates = true
673 694
695 ; Turning this on responds to CachedTexture packets to possibly avoid rebaking the avatar
696 ; on every login
697 ReuseTextures = false
674 698
675[Attachments] 699[Attachments]
676 ; Controls whether avatar attachments are enabled. 700 ; Controls whether avatar attachments are enabled.
@@ -906,56 +930,49 @@
906 ;force_simple_prim_meshing = true 930 ;force_simple_prim_meshing = true
907 931
908[BulletSim] 932[BulletSim]
909 ; World parameters 933 ; All the BulletSim parameters can be displayed with the console command "physics get all"
934 ; and all are defined in the source file OpenSim/Regions/Physics/BulletSPlugin/BSParam.cs.
910 935
911 ; There are two bullet physics libraries, bulletunmanaged is the default and is a native c++ dll 936 ; There are two bullet physics libraries, bulletunmanaged is the default and is a native c++ dll
912 ; bulletxna is a managed C# dll. They have comparible functionality.. the c++ is much faster. 937 ; bulletxna is a managed C# dll. They have comparible functionality but the c++ one is much faster.
913
914 BulletEngine = "bulletunmanaged" 938 BulletEngine = "bulletunmanaged"
915 ; BulletEngine = "bulletxna" 939 ; BulletEngine = "bulletxna"
916 940
917 ; Terrain Implementation {1|0} 0 for HeightField, 1 for Mesh terrain. If you're using the bulletxna engine, 941 ; Terrain Implementation
918 ; you will want to switch to the heightfield option 942 TerrainImplementation = 1 ; 0=Heightfield, 1=mesh
919 TerrainImplementation = 1 943 ; For mesh terrain, the detail of the created mesh. '1' gives 256x256 (heightfield resolution). '2'
920 ; TerrainImplementation = 0 944 ; gives 512x512. Etc. Cannot be larger than '4'. Higher magnification uses lots of memory.
921 945 TerrainMeshMagnification = 2
922 Gravity = -9.80665
923
924 TerrainFriction = 0.30
925 TerrainHitFraction = 0.8
926 TerrainRestitution = 0
927 TerrainCollisionMargin = 0.04
928 946
929 AvatarFriction = 0.2 947 ; Avatar physics height adjustments. http://opensimulator.org/wiki/BulletSim#Adjusting_Avatar_Height
930 AvatarStandingFriction = 0.95 948 AvatarHeightLowFudge = -0.2 ; Adjustment at low end of height range
931 AvatarRestitution = 0.0 949 AvatarHeightMidFudge = 0.1 ; Adjustment at mid point of avatar height range
932 AvatarDensity = 3.5 950 AvatarHeightHighFudge = 0.1 ; Adjustment at high end of height range
933 AvatarCapsuleWidth = 0.6
934 AvatarCapsuleDepth = 0.45
935 AvatarCapsuleHeight = 1.5
936 AvatarContactProcessingThreshold = 0.1
937 951
938 MaxObjectMass = 10000.01 952 ; Default linkset implmentation
939 953 ; 'Constraint' uses physics constraints to hold linkset together. 'Compound' builds a compound
940 CollisionMargin = 0.04 954 ; shape from the children shapes to create a single physical shape. 'Compound' uses a lot less CPU time.
941
942 ; Linkset implmentation
943 LinkImplementation = 1 ; 0=constraint, 1=compound 955 LinkImplementation = 1 ; 0=constraint, 1=compound
944 956
945 ; Whether to mesh sculpties 957 ; If 'true', turn scuplties into meshes
946 MeshSculptedPrim = true 958 MeshSculptedPrim = true
947 959
948 ; If 'true', force simple prims (box and sphere) to be meshed 960 ; If 'true', force simple prims (box and sphere) to be meshed
961 ; If 'false', the Bullet native special case shape is used for square rectangles and even dimensioned spheres
949 ForceSimplePrimMeshing = false 962 ForceSimplePrimMeshing = false
950 963
951 ; Bullet step parameters 964 ; If 'true', when creating meshes, remove all triangles that have two equal vertexes.
952 MaxSubSteps = 10 965 ; Happens often in sculpties. If turned off, there will be some doorways that cannot be walked through.
953 FixedTimeStep = .01667 966 ShouldRemoveZeroWidthTriangles = true
967
968 ; If 'true', use convex hull definition in mesh asset if present.
969 ShouldUseAssetHulls = true
954 970
971 ; If there are thousands of physical objects, these maximums should be increased.
955 MaxCollisionsPerFrame = 2048 972 MaxCollisionsPerFrame = 2048
956 MaxUpdatesPerFrame = 8192 973 MaxUpdatesPerFrame = 8192
957 974
958 ; Detailed physics debug logging 975 ; Detailed physics debug logging. Very verbose.
959 PhysicsLoggingEnabled = False 976 PhysicsLoggingEnabled = False
960 PhysicsLoggingDir = "." 977 PhysicsLoggingDir = "."
961 VehicleLoggingEnabled = False 978 VehicleLoggingEnabled = False
diff --git a/bin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config b/bin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config
index 1bc7e41..2763525 100755
--- a/bin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config
+++ b/bin/Physics/OpenSim.Region.Physics.BulletSPlugin.dll.config
@@ -1,6 +1,8 @@
1<configuration> 1<configuration>
2 <dllmap os="windows" cpu="x86" dll="BulletSim" target="lib32/BulletSim" /> 2 <dllmap os="windows" cpu="x86" dll="BulletSim" target="lib32/BulletSim" />
3 <dllmap os="windows" cpu="x86-64,ia64" dll="BulletSim" target="lib64/BulletSim" /> 3 <dllmap os="windows" cpu="x86-64,ia64" dll="BulletSim" target="lib64/BulletSim" />
4 <dllmap os="osx" cpu="x86" dll="BulletSim" target="lib32/libBulletSim.dylib" />
5 <dllmap os="osx" cpu="x86-64,ia64" dll="BulletSim" target="lib32/libBulletSim.dylib" />
4 <dllmap os="!windows,osx" cpu="x86" dll="BulletSim" target="lib32/libBulletSim.so" /> 6 <dllmap os="!windows,osx" cpu="x86" dll="BulletSim" target="lib32/libBulletSim.so" />
5 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="BulletSim" target="lib64/libBulletSim.so" /> 7 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="BulletSim" target="lib64/libBulletSim.so" />
6</configuration> 8</configuration>
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index 581c31d..d9f1ca1 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -21,18 +21,21 @@
21; * [[<ConfigName>@]<port>/]<dll name>[:<class name>] 21; * [[<ConfigName>@]<port>/]<dll name>[:<class name>]
22; * 22; *
23[Startup] 23[Startup]
24 24 ; Place to create a PID file
25 ; Plugin Registry Location 25 ; If no path if specified then a PID file is not created.
26 ; Set path to directory for plugin registry. Information 26 ; PIDFile = "/tmp/my.pid"
27 ; about the registered repositories and installed plugins 27
28 ; will be stored here 28 ; Plugin Registry Location
29 ; The Robust.exe process must have R/W access to the location 29 ; Set path to directory for plugin registry. Information
30 RegistryLocation = "." 30 ; about the registered repositories and installed plugins
31 31 ; will be stored here
32 ; Modular configurations 32 ; The Robust.exe process must have R/W access to the location
33 ; Set path to directory for modular ini files... 33 RegistryLocation = "."
34 ; The Robust.exe process must have R/W access to the location 34
35 ConfigDirectory = "/home/opensim/etc/Configs" 35 ; Modular configurations
36 ; Set path to directory for modular ini files...
37 ; The Robust.exe process must have R/W access to the location
38 ConfigDirectory = "."
36 39
37[ServiceList] 40[ServiceList]
38 41
@@ -68,10 +71,12 @@ HGInventoryServiceConnector = "HGInventoryService@8002/OpenSim.Server.Handlers.d
68HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:AssetServiceConnector" 71HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:AssetServiceConnector"
69;; Uncomment this if you want Groups V2, HG to work 72;; Uncomment this if you want Groups V2, HG to work
70; HGGroupsServiceConnector = "8002/OpenSim.Addons.Groups.dll:HGGroupsServiceRobustConnector" 73; HGGroupsServiceConnector = "8002/OpenSim.Addons.Groups.dll:HGGroupsServiceRobustConnector"
71
72;; Additions for other add-on modules. For example: 74;; Additions for other add-on modules. For example:
73;; WifiServerConnector = "8002/Diva.Wifi.dll:WifiServerConnector" 75;; WifiServerConnector = "8002/Diva.Wifi.dll:WifiServerConnector"
74 76
77;; Uncomment for UserProfiles see [UserProfilesService] to configure...
78; UserProfilesServiceConnector = "8002/OpenSim.Server.Handlers.dll:UserProfilesConnector"
79
75; * This is common for all services, it's the network setup for the entire 80; * This is common for all services, it's the network setup for the entire
76; * server instance, if none is specified above 81; * server instance, if none is specified above
77; * 82; *
@@ -322,6 +327,12 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
322 ; For V2/V3 webapp authentication SSO 327 ; For V2/V3 webapp authentication SSO
323 ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" 328 ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/"
324 329
330 ; For V3 destination guide
331 ; DestinationGuide = "http://127.0.0.1/guide"
332
333 ; For V3 avatar picker (( work in progress ))
334 ; AvatarPicker = "http://127.0.0.1/avatars"
335
325 ; If you run this login server behind a proxy, set this to true 336 ; If you run this login server behind a proxy, set this to true
326 ; HasProxy = false 337 ; HasProxy = false
327 338
@@ -586,4 +597,12 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
586 ;; Can overwrite the default in [Hypergrid], but probably shouldn't 597 ;; Can overwrite the default in [Hypergrid], but probably shouldn't
587 ; HomeURI = "http://127.0.0.1:8002" 598 ; HomeURI = "http://127.0.0.1:8002"
588 599
600[UserProfilesService]
601 LocalServiceModule = "OpenSim.Services.UserProfilesService.dll:UserProfilesService"
602 Enabled = false
603 ;; Configure this for separate profiles database
604 ;; ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;"
605 ;; Realm = UserProfiles
606 UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService
607 AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
589 608
diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example
index d932ce7..7d6492b 100644
--- a/bin/Robust.ini.example
+++ b/bin/Robust.ini.example
@@ -13,19 +13,21 @@
13; * [[<ConfigName>@]<port>/]<dll name>[:<class name>] 13; * [[<ConfigName>@]<port>/]<dll name>[:<class name>]
14; * 14; *
15[Startup] 15[Startup]
16 16 ; Place to create a PID file
17 ; Plugin Registry Location 17 ; If no path if specified then a PID file is not created.
18 ; Set path to directory for plugin registry. Information 18 ; PIDFile = "/tmp/my.pid"
19 ; about the registered repositories and installed plugins 19
20 ; will be stored here 20 ; Plugin Registry Location
21 ; The Robust.exe process must hvae R/W access to the location 21 ; Set path to directory for plugin registry. Information
22 RegistryLocation = "." 22 ; about the registered repositories and installed plugins
23 23 ; will be stored here
24 24 ; The Robust.exe process must have R/W access to the location
25 ; Modular configurations 25 RegistryLocation = "."
26 ; Set path to directory for modular ini files... 26
27 ; The Robust.exe process must hvae R/W access to the location 27 ; Modular configurations
28 ConfigDirectory = "/home/opensim/etc/Configs" 28 ; Set path to directory for modular ini files...
29 ; The Robust.exe process must have R/W access to the location
30 ConfigDirectory = "."
29 31
30[ServiceList] 32[ServiceList]
31AssetServiceConnector = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector" 33AssetServiceConnector = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector"
@@ -49,6 +51,8 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto
49;; Uncomment this if you want Groups V2 to work 51;; Uncomment this if you want Groups V2 to work
50;GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" 52;GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector"
51 53
54;; Uncomment for UserProfiles see [UserProfilesService] to configure...
55; UserProfilesServiceConnector = "8002/OpenSim.Server.Handlers.dll:UserProfilesConnector"
52 56
53; * This is common for all services, it's the network setup for the entire 57; * This is common for all services, it's the network setup for the entire
54; * server instance, if none is specified above 58; * server instance, if none is specified above
@@ -286,6 +290,12 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto
286 ; For V2/V3 webapp authentication SSO 290 ; For V2/V3 webapp authentication SSO
287 ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" 291 ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/"
288 292
293 ; For V3 destination guide
294 ; DestinationGuide = "http://127.0.0.1/guide"
295
296 ; For V3 avatar picker (( work in progress ))
297 ; AvatarPicker = "http://127.0.0.1/avatars"
298
289 ; If you run this login server behind a proxy, set this to true 299 ; If you run this login server behind a proxy, set this to true
290 ; HasProxy = false 300 ; HasProxy = false
291 301
@@ -383,4 +393,13 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto
383 ; password help: optional: page providing password assistance for users of your grid 393 ; password help: optional: page providing password assistance for users of your grid
384 ;password = http://127.0.0.1/password 394 ;password = http://127.0.0.1/password
385 395
396[UserProfilesService]
397 LocalServiceModule = "OpenSim.Services.UserProfilesService.dll:UserProfilesService"
398 Enabled = false
399 ;; Configure this for separate profiles database
400 ;; ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;"
401 ;; Realm = UserProfiles
402 UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService
403 AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
404
386 405
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example
index f80044e..8c23c41 100644
--- a/bin/config-include/StandaloneCommon.ini.example
+++ b/bin/config-include/StandaloneCommon.ini.example
@@ -85,7 +85,7 @@
85 Region_Welcome_Area = "DefaultRegion, FallbackRegion" 85 Region_Welcome_Area = "DefaultRegion, FallbackRegion"
86 86
87 ; === HG ONLY === 87 ; === HG ONLY ===
88 ;; If you have this set under [Startup], no need to set it here, leave it commented 88 ;; If you have this set under [Hypergrid], no need to set it here, leave it commented
89 ; GatekeeperURI="http://127.0.0.1:9000" 89 ; GatekeeperURI="http://127.0.0.1:9000"
90 90
91[LibraryModule] 91[LibraryModule]
@@ -94,7 +94,7 @@
94 94
95[LoginService] 95[LoginService]
96 WelcomeMessage = "Welcome, Avatar!" 96 WelcomeMessage = "Welcome, Avatar!"
97 ;; If you have Gatekeeper set under [Startup], no need to set it here, leave it commented 97 ;; If you have Gatekeeper set under [Hypergrid], no need to set it here, leave it commented
98 ; GatekeeperURI = "http://127.0.0.1:9000" 98 ; GatekeeperURI = "http://127.0.0.1:9000"
99 99
100 SRV_HomeURI = "http://127.0.0.1:9000" 100 SRV_HomeURI = "http://127.0.0.1:9000"
@@ -240,7 +240,7 @@
240;; HG configurations 240;; HG configurations
241;; 241;;
242[GatekeeperService] 242[GatekeeperService]
243 ;; If you have GatekeeperURI set under [Startup], no need to set it here, leave it commented 243 ;; If you have GatekeeperURI set under [Hypergrid], no need to set it here, leave it commented
244 ; ExternalName = "http://127.0.0.1:9000" 244 ; ExternalName = "http://127.0.0.1:9000"
245 245
246 ; Does this grid allow incoming links to any region in it? 246 ; Does this grid allow incoming links to any region in it?
@@ -297,11 +297,11 @@
297 ; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002" 297 ; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002"
298 298
299[HGInventoryService] 299[HGInventoryService]
300 ;; If you have this set under [Startup], no need to set it here, leave it commented 300 ;; If you have this set under [Hypergrid], no need to set it here, leave it commented
301 ; HomeURI = "http://127.0.0.1:9000" 301 ; HomeURI = "http://127.0.0.1:9000"
302 302
303[HGAssetService] 303[HGAssetService]
304 ;; If you have this set under [Startup], no need to set it here, leave it commented 304 ;; If you have this set under [Hypergrid], no need to set it here, leave it commented
305 ; HomeURI = "http://127.0.0.1:9000" 305 ; HomeURI = "http://127.0.0.1:9000"
306 306
307 ;; The asset types that this grid can export to / import from other grids. 307 ;; The asset types that this grid can export to / import from other grids.
@@ -318,7 +318,7 @@
318 318
319 319
320[HGInventoryAccessModule] 320[HGInventoryAccessModule]
321 ;; If you have these set under [Startup], no need to set it here, leave it commented 321 ;; If you have these set under [Hypergrid], no need to set it here, leave it commented
322 ; HomeURI = "http://127.0.0.1:9000" 322 ; HomeURI = "http://127.0.0.1:9000"
323 ; GatekeeperURI = "http://127.0.0.1:9000" 323 ; GatekeeperURI = "http://127.0.0.1:9000"
324 324
@@ -337,7 +337,7 @@
337 337
338[Messaging] 338[Messaging]
339 ; === HG ONLY === 339 ; === HG ONLY ===
340 ;; If you have this set under [Startup], no need to set it here, leave it commented 340 ;; If you have this set under [Hypergrid], no need to set it here, leave it commented
341 ; GatekeeperURI = "http://127.0.0.1:9000" 341 ; GatekeeperURI = "http://127.0.0.1:9000"
342 342
343 343
@@ -352,3 +352,19 @@
352 ;; If appearance is restricted, which accounts' appearances are allowed to be exported? 352 ;; If appearance is restricted, which accounts' appearances are allowed to be exported?
353 ;; Comma-separated list of account names 353 ;; Comma-separated list of account names
354 AccountForAppearance = "Test User, Astronaut Smith" 354 AccountForAppearance = "Test User, Astronaut Smith"
355
356;; UserProfiles Service
357;;
358;; To use, set Enabled to true then configure for your site...
359[UserProfilesService]
360 LocalServiceModule = "OpenSim.Services.UserProfilesService.dll:UserProfilesService"
361 Enabled = false
362
363 ;; Configure this for separate databse
364 ; ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
365 ; Realm = UserProfiles
366
367 UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService
368 AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
369
370
diff --git a/bin/config-include/StandaloneHypergrid.ini b/bin/config-include/StandaloneHypergrid.ini
index 195e780..39c33e8 100644
--- a/bin/config-include/StandaloneHypergrid.ini
+++ b/bin/config-include/StandaloneHypergrid.ini
@@ -19,6 +19,7 @@
19 GridUserServices = "LocalGridUserServicesConnector" 19 GridUserServices = "LocalGridUserServicesConnector"
20 SimulationServices = "RemoteSimulationConnectorModule" 20 SimulationServices = "RemoteSimulationConnectorModule"
21 AvatarServices = "LocalAvatarServicesConnector" 21 AvatarServices = "LocalAvatarServicesConnector"
22 UserProfilesServices = "LocalUserProfilesServicesConnector"
22 MapImageService = "MapImageServiceModule" 23 MapImageService = "MapImageServiceModule"
23 EntityTransferModule = "HGEntityTransferModule" 24 EntityTransferModule = "HGEntityTransferModule"
24 InventoryAccessModule = "HGInventoryAccessModule" 25 InventoryAccessModule = "HGInventoryAccessModule"
@@ -55,8 +56,6 @@
55 HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector" 56 HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector"
56 57
57[InventoryService] 58[InventoryService]
58 LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"
59
60 ; For HGInventoryBroker 59 ; For HGInventoryBroker
61 LocalGridInventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService" 60 LocalGridInventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
62 61
@@ -147,6 +146,9 @@
147 FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" 146 FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
148 UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" 147 UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
149 148
149 ;; This switch creates the minimum set of body parts and avatar entries for a viewer 2 to show a default "Ruth" avatar rather than a cloud.
150 CreateDefaultAvatarEntries = true
151
150 152
151;; The interface that local users get when they are in other grids 153;; The interface that local users get when they are in other grids
152;; This greatly restricts the inventory operations while in other grids 154;; This greatly restricts the inventory operations while in other grids
@@ -183,7 +185,6 @@
183 UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" 185 UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
184 InGatekeeper = True 186 InGatekeeper = True
185 187
186
187;; This should always be the very last thing on this file 188;; This should always be the very last thing on this file
188[Includes] 189[Includes]
189 Include-Common = "config-include/StandaloneCommon.ini" 190 Include-Common = "config-include/StandaloneCommon.ini"
diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll
index 689b34f..bc0e222 100755
--- a/bin/lib32/BulletSim.dll
+++ b/bin/lib32/BulletSim.dll
Binary files differ
diff --git a/bin/lib32/libBulletSim.dylib b/bin/lib32/libBulletSim.dylib
new file mode 100755
index 0000000..02f8a7f
--- /dev/null
+++ b/bin/lib32/libBulletSim.dylib
Binary files differ
diff --git a/bin/lib32/libBulletSim.so b/bin/lib32/libBulletSim.so
index b8c813e..e09dd27 100755
--- a/bin/lib32/libBulletSim.so
+++ b/bin/lib32/libBulletSim.so
Binary files differ
diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll
index 33c4d08..5fc09f6 100755
--- a/bin/lib64/BulletSim.dll
+++ b/bin/lib64/BulletSim.dll
Binary files differ
diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so
index 79207fe..925269d 100755
--- a/bin/lib64/libBulletSim.so
+++ b/bin/lib64/libBulletSim.so
Binary files differ
diff --git a/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686.so b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686.so
new file mode 100644
index 0000000..193eca4
--- /dev/null
+++ b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-i686.so
Binary files differ
diff --git a/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
new file mode 100644
index 0000000..7a9bdfc
--- /dev/null
+++ b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
Binary files differ
diff --git a/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1.dylib b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1.dylib
new file mode 100644
index 0000000..91f7264
--- /dev/null
+++ b/bin/libopenjpeg-dotnet-2-1.5.0-dotnet-1.dylib
Binary files differ
diff --git a/prebuild.xml b/prebuild.xml
index 20b9c9d..2eb0a92 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -282,6 +282,7 @@
282 <Reference name="System.Data"/> 282 <Reference name="System.Data"/>
283 <Reference name="XMLRPC" path="../../bin/"/> 283 <Reference name="XMLRPC" path="../../bin/"/>
284 <Reference name="OpenMetaverse" path="../../bin/"/> 284 <Reference name="OpenMetaverse" path="../../bin/"/>
285 <Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
285 <Reference name="OpenMetaverseTypes" path="../../bin/"/> 286 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
286 <Reference name="OpenSim.Framework"/> 287 <Reference name="OpenSim.Framework"/>
287 <Reference name="log4net" path="../../bin/"/> 288 <Reference name="log4net" path="../../bin/"/>
@@ -1360,6 +1361,42 @@
1360 </Files> 1361 </Files>
1361 </Project> 1362 </Project>
1362 1363
1364 <Project frameworkVersion="v3_5" name="OpenSim.Services.UserProfilesService" path="OpenSim/Services/UserProfilesService" type="Library">
1365 <Configuration name="Debug">
1366 <Options>
1367 <OutputPath>../../../bin/</OutputPath>
1368 </Options>
1369 </Configuration>
1370 <Configuration name="Release">
1371 <Options>
1372 <OutputPath>../../../bin/</OutputPath>
1373 </Options>
1374 </Configuration>
1375
1376 <ReferencePath>../../../bin/</ReferencePath>
1377 <Reference name="System"/>
1378 <Reference name="System.Core"/>
1379 <Reference name="OpenSim.Framework"/>
1380 <Reference name="OpenSim.Framework.Console"/>
1381 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1382 <Reference name="OpenSim.Services.UserAccountService"/>
1383 <Reference name="OpenSim.Services.Interfaces"/>
1384 <Reference name="OpenSim.Services.Connectors"/>
1385 <Reference name="OpenSim.Services.Base"/>
1386 <Reference name="OpenSim.Server.Base"/>
1387 <Reference name="OpenSim.Data"/>
1388 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1389 <Reference name="OpenMetaverse" path="../../../bin/"/>
1390 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1391 <Reference name="Nini" path="../../../bin/"/>
1392 <Reference name="log4net" path="../../../bin/"/>
1393
1394 <Files>
1395 <Match pattern="*.cs" recurse="true"/>
1396 </Files>
1397 </Project>
1398
1399
1363 <Project frameworkVersion="v3_5" name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library"> 1400 <Project frameworkVersion="v3_5" name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library">
1364 <Configuration name="Debug"> 1401 <Configuration name="Debug">
1365 <Options> 1402 <Options>
@@ -1760,6 +1797,7 @@
1760 <Reference name="System.Xml"/> 1797 <Reference name="System.Xml"/>
1761 <Reference name="System.Drawing"/> 1798 <Reference name="System.Drawing"/>
1762 <Reference name="System.Web"/> 1799 <Reference name="System.Web"/>
1800 <Reference name="Ionic.Zip" path="../../../bin/"/>
1763 <Reference name="NDesk.Options" path="../../../bin/"/> 1801 <Reference name="NDesk.Options" path="../../../bin/"/>
1764 <Reference name="OpenMetaverseTypes" path="../../../bin/"/> 1802 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1765 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/> 1803 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
@@ -1879,6 +1917,7 @@
1879 <Reference name="OpenSim.Region.CoreModules"/> 1917 <Reference name="OpenSim.Region.CoreModules"/>
1880 <Reference name="OpenSim.Framework.Console"/> 1918 <Reference name="OpenSim.Framework.Console"/>
1881 <Reference name="OpenSim.Region.Physics.Manager"/> 1919 <Reference name="OpenSim.Region.Physics.Manager"/>
1920 <Reference name="OpenSim.Region.Physics.Meshing" path="../../../../bin/Physics/"/>
1882 <Reference name="OpenSim.Region.Physics.ConvexDecompositionDotNet"/> 1921 <Reference name="OpenSim.Region.Physics.ConvexDecompositionDotNet"/>
1883 <Reference name="BulletXNA.dll" path="../../../../bin/"/> 1922 <Reference name="BulletXNA.dll" path="../../../../bin/"/>
1884 <Reference name="log4net.dll" path="../../../../bin/"/> 1923 <Reference name="log4net.dll" path="../../../../bin/"/>
@@ -2102,6 +2141,7 @@
2102 <Reference name="OpenSim.Data"/> 2141 <Reference name="OpenSim.Data"/>
2103 <Reference name="OpenMetaverseTypes" path="../../../bin/"/> 2142 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2104 <Reference name="OpenMetaverse" path="../../../bin/"/> 2143 <Reference name="OpenMetaverse" path="../../../bin/"/>
2144 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
2105 <Reference name="MySql.Data" path="../../../bin/"/> 2145 <Reference name="MySql.Data" path="../../../bin/"/>
2106 <Reference name="OpenSim.Framework.Console"/> 2146 <Reference name="OpenSim.Framework.Console"/>
2107 <Reference name="OpenSim.Region.Framework"/> 2147 <Reference name="OpenSim.Region.Framework"/>
@@ -3181,7 +3221,9 @@
3181 <Match path="Avatar/AvatarFactory/Tests" pattern="*.cs" recurse="true"/> 3221 <Match path="Avatar/AvatarFactory/Tests" pattern="*.cs" recurse="true"/>
3182 <Match path="Avatar/Friends/Tests" pattern="*.cs" recurse="true"/> 3222 <Match path="Avatar/Friends/Tests" pattern="*.cs" recurse="true"/>
3183 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/> 3223 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/>
3224 <Match path="Avatar/Inventory/Transfer/Tests" pattern="*.cs" recurse="true"/>
3184 <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/> 3225 <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/>
3226 <Match path="Framework/UserManagement/Tests" pattern="*.cs" recurse="true"/>
3185 <Match path="Scripting/VectorRender/Tests" pattern="*.cs" recurse="true"/> 3227 <Match path="Scripting/VectorRender/Tests" pattern="*.cs" recurse="true"/>
3186 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/> 3228 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/>
3187 <Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/> 3229 <Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/>