aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs98
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs20
2 files changed, 67 insertions, 51 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index dafc1af..2a48be9 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -177,7 +177,6 @@ namespace OpenSim.Region.Framework.Scenes
177 private float m_health = 100f; 177 private float m_health = 100f;
178 178
179 // Default AV Height 179 // Default AV Height
180 private float m_avHeight = 127.0f;
181 180
182 protected RegionInfo m_regionInfo; 181 protected RegionInfo m_regionInfo;
183 protected ulong crossingFromRegion; 182 protected ulong crossingFromRegion;
@@ -974,9 +973,10 @@ namespace OpenSim.Region.Framework.Scenes
974 } 973 }
975 974
976 float localAVHeight = 1.56f; 975 float localAVHeight = 1.56f;
977 if (m_avHeight != 127.0f) 976 if (m_appearance != null)
978 { 977 {
979 localAVHeight = m_avHeight; 978 if (m_appearance.AvatarHeight > 0)
979 localAVHeight = m_appearance.AvatarHeight;
980 } 980 }
981 981
982 float posZLimit = 0; 982 float posZLimit = 0;
@@ -991,17 +991,6 @@ namespace OpenSim.Region.Framework.Scenes
991 } 991 }
992 AbsolutePosition = pos; 992 AbsolutePosition = pos;
993 993
994 AddToPhysicalScene(isFlying);
995
996 if (m_forceFly)
997 {
998 m_physicsActor.Flying = true;
999 }
1000 else if (m_flyDisabled)
1001 {
1002 m_physicsActor.Flying = false;
1003 }
1004
1005 if (m_appearance != null) 994 if (m_appearance != null)
1006 { 995 {
1007 if (m_appearance.AvatarHeight > 0) 996 if (m_appearance.AvatarHeight > 0)
@@ -1014,6 +1003,23 @@ namespace OpenSim.Region.Framework.Scenes
1014 m_appearance = new AvatarAppearance(UUID); 1003 m_appearance = new AvatarAppearance(UUID);
1015 } 1004 }
1016 1005
1006 AddToPhysicalScene(isFlying);
1007
1008 if (m_appearance != null)
1009 {
1010 if (m_appearance.AvatarHeight > 0)
1011 SetHeight(m_appearance.AvatarHeight);
1012 }
1013
1014 if (m_forceFly)
1015 {
1016 m_physicsActor.Flying = true;
1017 }
1018 else if (m_flyDisabled)
1019 {
1020 m_physicsActor.Flying = false;
1021 }
1022
1017 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying 1023 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying
1018 // avatar to return to the standing position in mid-air. On login it looks like this is being sent 1024 // avatar to return to the standing position in mid-air. On login it looks like this is being sent
1019 // elsewhere anyway 1025 // elsewhere anyway
@@ -1200,10 +1206,9 @@ namespace OpenSim.Region.Framework.Scenes
1200 /// </summary> 1206 /// </summary>
1201 public void SetHeight(float height) 1207 public void SetHeight(float height)
1202 { 1208 {
1203 m_avHeight = height;
1204 if (PhysicsActor != null && !IsChildAgent) 1209 if (PhysicsActor != null && !IsChildAgent)
1205 { 1210 {
1206 Vector3 SetSize = new Vector3(0.45f, 0.6f, m_avHeight); 1211 Vector3 SetSize = new Vector3(0.45f, 0.6f, height);
1207 PhysicsActor.Size = SetSize; 1212 PhysicsActor.Size = SetSize;
1208 } 1213 }
1209 } 1214 }
@@ -1215,9 +1220,11 @@ namespace OpenSim.Region.Framework.Scenes
1215 /// </summary> 1220 /// </summary>
1216 public void CompleteMovement(IClientAPI client) 1221 public void CompleteMovement(IClientAPI client)
1217 { 1222 {
1218// DEBUG ON 1223 DateTime startTime = DateTime.Now;
1219 m_log.WarnFormat("[SCENE PRESENCE]: CompleteMovement for {0}",UUID); 1224
1220// DEBUG OFF 1225 m_log.DebugFormat(
1226 "[SCENE PRESENCE]: Completing movement of {0} into region {1}",
1227 client.Name, Scene.RegionInfo.RegionName);
1221 1228
1222 Vector3 look = Velocity; 1229 Vector3 look = Velocity;
1223 if ((look.X == 0) && (look.Y == 0) && (look.Z == 0)) 1230 if ((look.X == 0) && (look.Y == 0) && (look.Z == 0))
@@ -1264,6 +1271,10 @@ namespace OpenSim.Region.Framework.Scenes
1264 if (friendsModule != null) 1271 if (friendsModule != null)
1265 friendsModule.SendFriendsOnlineIfNeeded(ControllingClient); 1272 friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
1266 } 1273 }
1274
1275 m_log.DebugFormat(
1276 "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
1277 client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);
1267 } 1278 }
1268 1279
1269 /// <summary> 1280 /// <summary>
@@ -1859,9 +1870,10 @@ namespace OpenSim.Region.Framework.Scenes
1859 SendFullUpdateToAllClients(); 1870 SendFullUpdateToAllClients();
1860 m_requestedSitTargetID = 0; 1871 m_requestedSitTargetID = 0;
1861 1872
1862 if ((m_physicsActor != null) && (m_avHeight > 0)) 1873 if (m_physicsActor != null && m_appearance != null)
1863 { 1874 {
1864 SetHeight(m_avHeight); 1875 if (m_appearance.AvatarHeight > 0)
1876 SetHeight(m_appearance.AvatarHeight);
1865 } 1877 }
1866 } 1878 }
1867 Animator.TrySetMovementAnimation("STAND"); 1879 Animator.TrySetMovementAnimation("STAND");
@@ -2728,22 +2740,25 @@ namespace OpenSim.Region.Framework.Scenes
2728 if (remoteAvatar == null) 2740 if (remoteAvatar == null)
2729 return; 2741 return;
2730 2742
2731 IClientAPI cl=remoteAvatar.ControllingClient; 2743 IClientAPI cl = remoteAvatar.ControllingClient;
2732 if (cl == null) 2744 if (cl == null)
2733 return; 2745 return;
2734 2746
2735 if (m_appearance.Texture == null) 2747 if (m_appearance.Texture == null)
2736 return; 2748 return;
2737 2749
2738 if (LocalId == remoteAvatar.LocalId) 2750// MT: This is needed for sit. It's legal to send it to oneself, and the name
2739 { 2751// of the method is a misnomer
2740 m_log.WarnFormat("[SP] An agent is attempting to send data to itself; {0}",UUID); 2752//
2741 return; 2753// if (LocalId == remoteAvatar.LocalId)
2742 } 2754// {
2755// m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send avatar data to itself; {0}", UUID);
2756// return;
2757// }
2743 2758
2744 if (IsChildAgent) 2759 if (IsChildAgent)
2745 { 2760 {
2746 m_log.WarnFormat("[SCENEPRESENCE] A child agent is attempting to send out avatar data"); 2761 m_log.WarnFormat("[SCENEPRESENCE]: A child agent is attempting to send out avatar data; {0}", UUID);
2747 return; 2762 return;
2748 } 2763 }
2749 2764
@@ -2826,14 +2841,14 @@ namespace OpenSim.Region.Framework.Scenes
2826 { 2841 {
2827 if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient)) 2842 if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
2828 { 2843 {
2829 m_log.WarnFormat("[SP] baked textures are in the ache for {0}",Name); 2844// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
2830 m_controllingClient.SendAppearance( 2845 m_controllingClient.SendAppearance(
2831 m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes()); 2846 m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
2832 } 2847 }
2833 } 2848 }
2834 else 2849 else
2835 { 2850 {
2836 m_log.WarnFormat("[SP] AvatarFactory not set"); 2851 m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
2837 } 2852 }
2838 2853
2839 SendInitialFullUpdateToAllClients(); 2854 SendInitialFullUpdateToAllClients();
@@ -2845,7 +2860,7 @@ namespace OpenSim.Region.Framework.Scenes
2845 public void SendAppearanceToAllOtherAgents() 2860 public void SendAppearanceToAllOtherAgents()
2846 { 2861 {
2847// DEBUG ON 2862// DEBUG ON
2848 m_log.WarnFormat("[SP] Send appearance from {0} to all other agents",m_uuid); 2863// m_log.WarnFormat("[SCENEPRESENCE]: Send appearance from {0} to all other agents", m_uuid);
2849// DEBUG OFF 2864// DEBUG OFF
2850 m_perfMonMS = Util.EnvironmentTickCount(); 2865 m_perfMonMS = Util.EnvironmentTickCount();
2851 2866
@@ -2868,7 +2883,7 @@ namespace OpenSim.Region.Framework.Scenes
2868 { 2883 {
2869 if (LocalId == avatar.LocalId) 2884 if (LocalId == avatar.LocalId)
2870 { 2885 {
2871 m_log.WarnFormat("[SP] An agent is attempting to send data to itself; {0}",UUID); 2886 m_log.WarnFormat("[SCENE PRESENCE]: An agent is attempting to send appearance data to itself; {0}", UUID);
2872 return; 2887 return;
2873 } 2888 }
2874 2889
@@ -2920,7 +2935,7 @@ namespace OpenSim.Region.Framework.Scenes
2920 cadu.ActiveGroupID = UUID.Zero.Guid; 2935 cadu.ActiveGroupID = UUID.Zero.Guid;
2921 cadu.AgentID = UUID.Guid; 2936 cadu.AgentID = UUID.Guid;
2922 cadu.alwaysrun = m_setAlwaysRun; 2937 cadu.alwaysrun = m_setAlwaysRun;
2923 cadu.AVHeight = m_avHeight; 2938 cadu.AVHeight = m_appearance.AvatarHeight;;
2924 Vector3 tempCameraCenter = m_CameraCenter; 2939 Vector3 tempCameraCenter = m_CameraCenter;
2925 cadu.cameraPosition = tempCameraCenter; 2940 cadu.cameraPosition = tempCameraCenter;
2926 cadu.drawdistance = m_DrawDistance; 2941 cadu.drawdistance = m_DrawDistance;
@@ -3256,7 +3271,6 @@ namespace OpenSim.Region.Framework.Scenes
3256 3271
3257 m_CameraCenter = cAgentData.Center + offset; 3272 m_CameraCenter = cAgentData.Center + offset;
3258 3273
3259 m_avHeight = cAgentData.Size.Z;
3260 //SetHeight(cAgentData.AVHeight); 3274 //SetHeight(cAgentData.AVHeight);
3261 3275
3262 if ((cAgentData.Throttles != null) && cAgentData.Throttles.Length > 0) 3276 if ((cAgentData.Throttles != null) && cAgentData.Throttles.Length > 0)
@@ -3281,8 +3295,6 @@ namespace OpenSim.Region.Framework.Scenes
3281 cAgent.Position = AbsolutePosition; 3295 cAgent.Position = AbsolutePosition;
3282 cAgent.Velocity = m_velocity; 3296 cAgent.Velocity = m_velocity;
3283 cAgent.Center = m_CameraCenter; 3297 cAgent.Center = m_CameraCenter;
3284 // Don't copy the size; it is inferred from apearance parameters
3285 //cAgent.Size = new Vector3(0, 0, m_avHeight);
3286 cAgent.AtAxis = m_CameraAtAxis; 3298 cAgent.AtAxis = m_CameraAtAxis;
3287 cAgent.LeftAxis = m_CameraLeftAxis; 3299 cAgent.LeftAxis = m_CameraLeftAxis;
3288 cAgent.UpAxis = m_CameraUpAxis; 3300 cAgent.UpAxis = m_CameraUpAxis;
@@ -3401,7 +3413,6 @@ namespace OpenSim.Region.Framework.Scenes
3401 3413
3402 m_velocity = cAgent.Velocity; 3414 m_velocity = cAgent.Velocity;
3403 m_CameraCenter = cAgent.Center; 3415 m_CameraCenter = cAgent.Center;
3404 //m_avHeight = cAgent.Size.Z;
3405 m_CameraAtAxis = cAgent.AtAxis; 3416 m_CameraAtAxis = cAgent.AtAxis;
3406 m_CameraLeftAxis = cAgent.LeftAxis; 3417 m_CameraLeftAxis = cAgent.LeftAxis;
3407 m_CameraUpAxis = cAgent.UpAxis; 3418 m_CameraUpAxis = cAgent.UpAxis;
@@ -3562,17 +3573,8 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju
3562 3573
3563 Vector3 pVec = AbsolutePosition; 3574 Vector3 pVec = AbsolutePosition;
3564 3575
3565 // Old bug where the height was in centimeters instead of meters 3576 m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec,
3566 if (m_avHeight == 127.0f) 3577 new Vector3(0f, 0f, m_appearance.AvatarHeight), isFlying);
3567 {
3568 m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new Vector3(0f, 0f, 1.56f),
3569 isFlying);
3570 }
3571 else
3572 {
3573 m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec,
3574 new Vector3(0f, 0f, m_avHeight), isFlying);
3575 }
3576 scene.AddPhysicsActorTaint(m_physicsActor); 3578 scene.AddPhysicsActorTaint(m_physicsActor);
3577 //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; 3579 //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
3578 m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; 3580 m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index 4aadfdb..a398dfd 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1135,7 +1135,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1135 writer.WriteElementString("GroupMask", sop.GroupMask.ToString()); 1135 writer.WriteElementString("GroupMask", sop.GroupMask.ToString());
1136 writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString()); 1136 writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString());
1137 writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString()); 1137 writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString());
1138 writer.WriteElementString("Flags", sop.Flags.ToString()); 1138 WriteFlags(writer, "Flags", sop.Flags.ToString(), options);
1139 WriteUUID(writer, "CollisionSound", sop.CollisionSound, options); 1139 WriteUUID(writer, "CollisionSound", sop.CollisionSound, options);
1140 writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); 1140 writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString());
1141 if (sop.MediaUrl != null) 1141 if (sop.MediaUrl != null)
@@ -1188,6 +1188,20 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1188 1188
1189 } 1189 }
1190 1190
1191 static void WriteFlags(XmlTextWriter writer, string name, string flagsStr, Dictionary<string, object> options)
1192 {
1193 // Older versions of serialization can't cope with commas
1194 if (options.ContainsKey("version"))
1195 {
1196 float version = 0.5F;
1197 float.TryParse(options["version"].ToString(), out version);
1198 if (version < 0.5)
1199 flagsStr = flagsStr.Replace(",", "");
1200 }
1201
1202 writer.WriteElementString(name, flagsStr);
1203 }
1204
1191 static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options) 1205 static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options)
1192 { 1206 {
1193 if (tinv.Count > 0) // otherwise skip this 1207 if (tinv.Count > 0) // otherwise skip this
@@ -1275,8 +1289,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1275 writer.WriteElementString("ProfileHollow", shp.ProfileHollow.ToString()); 1289 writer.WriteElementString("ProfileHollow", shp.ProfileHollow.ToString());
1276 writer.WriteElementString("State", shp.State.ToString()); 1290 writer.WriteElementString("State", shp.State.ToString());
1277 1291
1278 writer.WriteElementString("ProfileShape", shp.ProfileShape.ToString()); 1292 WriteFlags(writer, "ProfileShape", shp.ProfileShape.ToString(), options);
1279 writer.WriteElementString("HollowShape", shp.HollowShape.ToString()); 1293 WriteFlags(writer, "HollowShape", shp.HollowShape.ToString(), options);
1280 1294
1281 WriteUUID(writer, "SculptTexture", shp.SculptTexture, options); 1295 WriteUUID(writer, "SculptTexture", shp.SculptTexture, options);
1282 writer.WriteElementString("SculptType", shp.SculptType.ToString()); 1296 writer.WriteElementString("SculptType", shp.SculptType.ToString());