From 62a2d7836fb36f66a0e42b20f4596e517eb52354 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 3 Dec 2013 02:27:40 +0000
Subject: Ignore X and Y body rotations when sent by mouse look.
Fixes http://opensimulator.org/mantis/view.php?id=3274
When not in mouselook, avatar only sends rotations around the Z plane (since that's the only way an avatar can rotate).
However, in mouselook it also sends X and Y information. But sending X and Y in terse updates causes issues with wrong camera movement in mouselook.
So strip out X and Y components for now. If this is an issue, then could strip out before sending avatar terse update, though this generates more cpu work.
Thanks to mirceakitsune for suggesting an initial fix
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 1dc7e20..dae20a5 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1648,12 +1648,24 @@ namespace OpenSim.Region.Framework.Scenes
if (AllowMovement && !SitGround)
{
- Quaternion bodyRotation = agentData.BodyRotation;
+// m_log.DebugFormat("[SCENE PRESENCE]: Initial body rotation {0} for {1}", agentData.BodyRotation, Name);
+
bool update_rotation = false;
- if (bodyRotation != Rotation)
+ // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis
+ // it rotates around.
+ // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted
+ // excessive up and down movements of the camera when looking up and down.
+ // See http://opensimulator.org/mantis/view.php?id=3274
+ // This does not affect head movement, since this is controlled entirely by camera movement rather than
+ // body rotation. It does not affect sitting avatar since it's the sitting part rotation that takes
+ // effect, not the avatar rotation.
+ // However, if we do need to store X and Y rotations in the future, another solution needs to be found
+ // for the mouselook bug. Possibly, one could strip out X and Y rotations before sending the avatar
+ // update messages.
+ if (agentData.BodyRotation.Z != Rotation.Z || agentData.BodyRotation.W != Rotation.W)
{
- Rotation = bodyRotation;
+ Rotation = new Quaternion(0, 0, agentData.BodyRotation.Z, agentData.BodyRotation.W);
update_rotation = true;
}
--
cgit v1.1
From 17b32b764acd815400d9eb903aaec6dcebd60ac7 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Dec 2013 02:10:46 +0000
Subject: Fix regression where mouse look flight direction no longer worked by
zeroing x/y rot before sending agent updates, instead of before any agent
update processing
It turns out that the x/y rot data in mouselook is needed to implement this and to push the avatar against the ground if walking in mouselook.
Doing this in the terse send so that we preserve mouselook rotation information
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 25 +++++++++++++++++++++-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 15 ++-----------
2 files changed, 26 insertions(+), 14 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index c1aae3f..a04ded5 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -5091,7 +5091,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// acceleration = new Vector3(1, 0, 0);
angularVelocity = presence.AngularVelocity;
+
+ // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis
+ // it rotates around.
+ // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted
+ // excessive up and down movements of the camera when looking up and down.
+ // See http://opensimulator.org/mantis/view.php?id=3274
+ // This does not affect head movement, since this is controlled entirely by camera movement rather than
+ // body rotation. It does not affect sitting avatar since it's the sitting part rotation that takes
+ // effect, not the avatar rotation.
rotation = presence.Rotation;
+ rotation.X = 0;
+ rotation.Y = 0;
if (sendTexture)
textureEntry = presence.Appearance.Texture.GetBytes();
@@ -5207,7 +5218,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
data.OffsetPosition.ToBytes(objectData, 16);
// data.Velocity.ToBytes(objectData, 28);
// data.Acceleration.ToBytes(objectData, 40);
- data.Rotation.ToBytes(objectData, 52);
+
+ // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis
+ // it rotates around.
+ // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted
+ // excessive up and down movements of the camera when looking up and down.
+ // See http://opensimulator.org/mantis/view.php?id=3274
+ // This does not affect head movement, since this is controlled entirely by camera movement rather than
+ // body rotation. It does not affect sitting avatar since it's the sitting part rotation that takes
+ // effect, not the avatar rotation.
+ Quaternion rot = data.Rotation;
+ rot.X = 0;
+ rot.Y = 0;
+ rot.ToBytes(objectData, 52);
//data.AngularVelocity.ToBytes(objectData, 64);
ObjectUpdatePacket.ObjectDataBlock update = new ObjectUpdatePacket.ObjectDataBlock();
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index dae20a5..7ed3a4b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1652,20 +1652,9 @@ namespace OpenSim.Region.Framework.Scenes
bool update_rotation = false;
- // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis
- // it rotates around.
- // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted
- // excessive up and down movements of the camera when looking up and down.
- // See http://opensimulator.org/mantis/view.php?id=3274
- // This does not affect head movement, since this is controlled entirely by camera movement rather than
- // body rotation. It does not affect sitting avatar since it's the sitting part rotation that takes
- // effect, not the avatar rotation.
- // However, if we do need to store X and Y rotations in the future, another solution needs to be found
- // for the mouselook bug. Possibly, one could strip out X and Y rotations before sending the avatar
- // update messages.
- if (agentData.BodyRotation.Z != Rotation.Z || agentData.BodyRotation.W != Rotation.W)
+ if (agentData.BodyRotation != Rotation)
{
- Rotation = new Quaternion(0, 0, agentData.BodyRotation.Z, agentData.BodyRotation.W);
+ Rotation = agentData.BodyRotation;
update_rotation = true;
}
--
cgit v1.1
From 16aaba77d49baad0dc581ffbf69d71181b9be70f Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 6 Dec 2013 00:30:44 +0000
Subject: Properly set InventoryType.Snapshot when a snapshot is uploaded
Resolves http://opensimulator.org/mantis/view.php?id=6857
This prevents the inventory service complaining later about an attempt to change an invariant
---
OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 1d4c7f0..66d2138 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -501,6 +501,10 @@ namespace OpenSim.Region.ClientStack.Linden
inType = 1;
assType = 1;
}
+ else if (inventoryType == "snapshot")
+ {
+ inType = (sbyte)InventoryType.Snapshot;
+ }
else if (inventoryType == "animation")
{
inType = 19;
--
cgit v1.1
From bb4f4d9480df4c17ea31288c069993305c7e1582 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 6 Dec 2013 00:38:18 +0000
Subject: minor: Use enums for setting inv/asset types on data upload rather
than magic numbers
---
.../ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 66d2138..a4fe81c 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -498,8 +498,8 @@ namespace OpenSim.Region.ClientStack.Linden
if (inventoryType == "sound")
{
- inType = 1;
- assType = 1;
+ inType = (sbyte)InventoryType.Sound;
+ assType = (sbyte)AssetType.Sound;
}
else if (inventoryType == "snapshot")
{
@@ -507,19 +507,19 @@ namespace OpenSim.Region.ClientStack.Linden
}
else if (inventoryType == "animation")
{
- inType = 19;
- assType = 20;
+ inType = (sbyte)InventoryType.Animation;
+ assType = (sbyte)AssetType.Animation;
}
else if (inventoryType == "wearable")
{
- inType = 18;
+ inType = (sbyte)InventoryType.Wearable;
switch (assetType)
{
case "bodypart":
- assType = 13;
+ assType = (sbyte)AssetType.Bodypart;
break;
case "clothing":
- assType = 5;
+ assType = (sbyte)AssetType.Clothing;
break;
}
}
--
cgit v1.1
From 1842388bb4dcf5ecd57732ffa877b6ca1a3dec7b Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Fri, 6 Dec 2013 02:52:13 -0500
Subject: Add support for user preferences (im via email)
---
.../Avatar/UserProfiles/UserProfileModule.cs | 67 ++++++++++++++++++++++
.../LocalUserProfilesServiceConnector.cs | 2 +
2 files changed, 69 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
index 56ff2bd..b21082f 100644
--- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
@@ -270,6 +270,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
// Notes
client.AddGenericPacketHandler("avatarnotesrequest", NotesRequest);
client.OnAvatarNotesUpdate += NotesUpdate;
+
+ // Preferences
+ client.OnUserInfoRequest += UserPreferencesRequest;
+ client.OnUpdateUserInfo += UpdateUserPreferences;
}
#endregion Region Event Handlers
@@ -799,6 +803,69 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
}
#endregion Notes
+ #region User Preferences
+ ///
+ /// Updates the user preferences.
+ ///
+ ///
+ /// Im via email.
+ ///
+ ///
+ /// Visible.
+ ///
+ ///
+ /// Remote client.
+ ///
+ public void UpdateUserPreferences(bool imViaEmail, bool visible, IClientAPI remoteClient)
+ {
+ UserPreferences pref = new UserPreferences();
+
+ pref.UserId = remoteClient.AgentId;
+ pref.IMViaEmail = imViaEmail;
+ pref.Visible = visible;
+
+ string serverURI = string.Empty;
+ bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
+
+ object Pref = pref;
+ if(!JsonRpcRequest(ref Pref, "user_preferences_update", serverURI, UUID.Random().ToString()))
+ {
+ m_log.InfoFormat("[PROFILES]: UserPreferences update error");
+ remoteClient.SendAgentAlertMessage("Error updating preferences", false);
+ return;
+ }
+ }
+
+ ///
+ /// Users the preferences request.
+ ///
+ ///
+ /// Remote client.
+ ///
+ public void UserPreferencesRequest(IClientAPI remoteClient)
+ {
+ UserPreferences pref = new UserPreferences();
+
+ pref.UserId = remoteClient.AgentId;
+
+ string serverURI = string.Empty;
+ bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
+
+
+ object Pref = (object)pref;
+ if(!JsonRpcRequest(ref Pref, "user_preferences_request", serverURI, UUID.Random().ToString()))
+ {
+ m_log.InfoFormat("[PROFILES]: UserPreferences request error");
+ remoteClient.SendAgentAlertMessage("Error requesting preferences", false);
+ return;
+ }
+ pref = (UserPreferences) Pref;
+
+ remoteClient.SendUserInfoReply(pref.IMViaEmail, pref.Visible, pref.EMail);
+
+ }
+ #endregion User Preferences
+
#region Avatar Properties
///
/// Update the avatars interests .
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
index 323535a..4701ee6 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
@@ -153,6 +153,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Profile
Server.AddJsonRPCHandler("avatar_properties_request", handler.AvatarPropertiesRequest);
Server.AddJsonRPCHandler("avatar_properties_update", handler.AvatarPropertiesUpdate);
Server.AddJsonRPCHandler("avatar_interests_update", handler.AvatarInterestsUpdate);
+ Server.AddJsonRPCHandler("user_preferences_update", handler.UserPreferenecesUpdate);
+ Server.AddJsonRPCHandler("user_preferences_request", handler.UserPreferencesRequest);
Server.AddJsonRPCHandler("image_assets_request", handler.AvatarImageAssetsRequest);
Server.AddJsonRPCHandler("user_data_request", handler.RequestUserAppData);
Server.AddJsonRPCHandler("user_data_update", handler.UpdateUserAppData);
--
cgit v1.1