Changed it so the avatar's rotation is now sent as part of a full avatar update.
This should fix the wrong rotation on existing sitting avatar when logging in bug.0.6.0-stable
							parent
							
								
									ce4bcb5065
								
							
						
					
					
						commit
						9b51bb545e
					
				| 
						 | 
				
			
			@ -545,7 +545,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        void SendPayPrice(LLUUID objectID, int[] payPrice);
 | 
			
		||||
 | 
			
		||||
        void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID,
 | 
			
		||||
                            LLVector3 Pos, byte[] textureEntry, uint parentID);
 | 
			
		||||
                            LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation);
 | 
			
		||||
 | 
			
		||||
        void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position,
 | 
			
		||||
                                   LLVector3 velocity, LLQuaternion rotation);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2132,7 +2132,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
        /// <param name="avatarLocalID"></param>
 | 
			
		||||
        /// <param name="Pos"></param>
 | 
			
		||||
        public void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID,
 | 
			
		||||
                                   uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID)
 | 
			
		||||
                                   uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation)
 | 
			
		||||
        {
 | 
			
		||||
            ObjectUpdatePacket objupdate = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate);
 | 
			
		||||
            // TODO: don't create new blocks if recycling an old packet
 | 
			
		||||
| 
						 | 
				
			
			@ -2147,9 +2147,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
            objupdate.ObjectData[0].ParentID = parentID;
 | 
			
		||||
            objupdate.ObjectData[0].NameValue =
 | 
			
		||||
                Helpers.StringToField("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName);
 | 
			
		||||
 | 
			
		||||
            LLVector3 pos2 = new LLVector3((float)Pos.X, (float)Pos.Y, (float)Pos.Z);
 | 
			
		||||
            byte[] pb = pos2.GetBytes();
 | 
			
		||||
            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
 | 
			
		||||
 | 
			
		||||
            byte[] rot = rotation.GetBytes();
 | 
			
		||||
            Array.Copy(rot, 0, objupdate.ObjectData[0].ObjectData, 52, rot.Length);
 | 
			
		||||
 | 
			
		||||
            objupdate.Header.Zerocoded = true;
 | 
			
		||||
            OutPacket(objupdate, ThrottleOutPacketType.Task);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -496,7 +496,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID,
 | 
			
		||||
                                           uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID)
 | 
			
		||||
                                           uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
 | 
			
		||||
        private bool m_setAlwaysRun = false;
 | 
			
		||||
 | 
			
		||||
        private Quaternion m_bodyRot;
 | 
			
		||||
        private Quaternion m_bodyRot= Quaternion.Identity;
 | 
			
		||||
 | 
			
		||||
        public bool IsRestrictedToRegion = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1266,7 +1266,8 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
            SendFullUpdateToAllClients();
 | 
			
		||||
            // This may seem stupid, but Our Full updates don't send avatar rotation :P
 | 
			
		||||
            // So we're also sending a terse update (which has avatar rotation)
 | 
			
		||||
            SendTerseUpdateToAllClients();
 | 
			
		||||
            // [Update] We do now.
 | 
			
		||||
            //SendTerseUpdateToAllClients();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1617,9 +1618,19 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
            if (m_appearance.Texture == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            LLQuaternion rot;
 | 
			
		||||
            if (m_bodyRot != null)
 | 
			
		||||
            {
 | 
			
		||||
                rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                rot = LLQuaternion.Identity;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid,
 | 
			
		||||
                                                            LocalId, m_pos, m_appearance.Texture.ToBytes(),
 | 
			
		||||
                                                            m_parentID);
 | 
			
		||||
                                                            m_parentID, rot);
 | 
			
		||||
            m_scene.AddAgentUpdates(1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1671,8 +1682,18 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
            // Needed for standalone
 | 
			
		||||
            m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
 | 
			
		||||
 | 
			
		||||
            LLQuaternion rot;
 | 
			
		||||
            if (m_bodyRot != null)
 | 
			
		||||
            {
 | 
			
		||||
                rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                rot = LLQuaternion.Identity;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId,
 | 
			
		||||
                                               m_pos, m_appearance.Texture.ToBytes(), m_parentID);
 | 
			
		||||
                                               m_pos, m_appearance.Texture.ToBytes(), m_parentID, rot);
 | 
			
		||||
 | 
			
		||||
            if (!m_isChildAgent)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -413,7 +413,7 @@ namespace OpenSim.Region.Examples.SimpleModule
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID,
 | 
			
		||||
                                           uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID)
 | 
			
		||||
                                           uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue