From 42e37d20871b274a0b2891a7ae2e4622ab7498e4 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 16 Mar 2022 22:27:34 +0000 Subject: [PATCH] some changes on avatarappearance --- OpenSim/Framework/AvatarAppearance.cs | 128 ++++++++---------- .../ClientStack/Linden/UDP/LLClientView.cs | 33 +++-- 2 files changed, 76 insertions(+), 85 deletions(-) diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index a3747e7e5d..db8e9b5712 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs @@ -74,34 +74,34 @@ namespace OpenSim.Framework protected float m_avatarFeetOffset = 0; protected float m_avatarAnimOffset = 0; - public virtual int Serial + public int Serial { get { return m_serial; } set { m_serial = value; } } - public virtual byte[] VisualParams + public byte[] VisualParams { get { return m_visualparams; } set { m_visualparams = value; } } - public virtual Vector3 AvatarSize + public Vector3 AvatarSize { get { return m_avatarSize; } } - public virtual Vector3 AvatarBoxSize + public Vector3 AvatarBoxSize { get { return m_avatarBoxSize; } } - public virtual float AvatarFeetOffset + public float AvatarFeetOffset { get { return m_avatarFeetOffset + m_avatarAnimOffset; } } - public virtual Primitive.TextureEntry Texture + public Primitive.TextureEntry Texture { get { return m_texture; } set @@ -111,25 +111,25 @@ namespace OpenSim.Framework } } - public virtual AvatarWearable[] Wearables + public AvatarWearable[] Wearables { get { return m_wearables; } set { m_wearables = value; } } - public virtual float AvatarHeight + public float AvatarHeight { get { return m_avatarHeight; } set { m_avatarHeight = value; } } - public virtual WearableCacheItem[] WearableCacheItems + public WearableCacheItem[] WearableCacheItems { get { return m_cacheitems; } set { m_cacheitems = value; } } - public virtual float AvatarPreferencesHoverZ { get; set; } + public float AvatarPreferencesHoverZ { get; set; } public AvatarAppearance() { @@ -278,7 +278,7 @@ namespace OpenSim.Framework m_wearables[i] = new AvatarWearable(); } - protected virtual void SetDefaultWearables() + protected void SetDefaultWearables() { m_wearables = AvatarWearable.DefaultWearables; } @@ -287,7 +287,7 @@ namespace OpenSim.Framework /// Invalidate all of the baked textures in the appearance, useful /// if you know that none are valid /// - public virtual void ResetAppearance() + public void ResetAppearance() { // m_log.WarnFormat("[AVATAR APPEARANCE]: Reset appearance"); @@ -303,31 +303,21 @@ namespace OpenSim.Framework // } } - protected virtual void SetDefaultParams() + protected void SetDefaultParams() { m_visualparams = new byte[] { 33,61,85,23,58,127,63,85,63,42,0,85,63,36,85,95,153,63,34,0,63,109,88,132,63,136,81,85,103,136,127,0,150,150,150,127,0,0,0,0,0,127,0,0,255,127,114,127,99,63,127,140,127,127,0,0,0,191,0,104,0,0,0,0,0,0,0,0,0,145,216,133,0,127,0,127,170,0,0,127,127,109,85,127,127,63,85,42,150,150,150,150,150,150,150,25,150,150,150,0,127,0,0,144,85,127,132,127,85,0,127,127,127,127,127,127,59,127,85,127,127,106,47,79,127,127,204,2,141,66,0,0,127,127,0,0,0,0,127,0,159,0,0,178,127,36,85,131,127,127,127,153,95,0,140,75,27,127,127,0,150,150,198,0,0,63,30,127,165,209,198,127,127,153,204,51,51,255,255,255,204,0,255,150,150,150,150,150,150,150,150,150,150,0,150,150,150,150,150,0,127,127,150,150,150,150,150,150,150,150,0,0,150,51,132,150,150,150 }; -// for (int i = 0; i < VISUALPARAM_COUNT; i++) -// { -// m_visualparams[i] = 150; -// } } /// /// Invalidate all of the baked textures in the appearance, useful /// if you know that none are valid /// - public virtual void ResetBakedTextures() + public void ResetBakedTextures() { SetDefaultTexture(); - - //for (int i = 0; i < BAKE_INDICES.Length; i++) - // { - // int idx = BAKE_INDICES[i]; - // m_texture.FaceTextures[idx].TextureID = UUID.Zero; - // } } - protected virtual void SetDefaultTexture() + protected void SetDefaultTexture() { m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); } @@ -339,7 +329,7 @@ namespace OpenSim.Framework /// True if any existing texture id was changed by the new data. /// False if there were no changes or no existing texture ids. /// - public virtual bool SetTextureEntries(Primitive.TextureEntry textureEntry) + public bool SetTextureEntries(Primitive.TextureEntry textureEntry) { if (textureEntry == null) return false; @@ -347,23 +337,26 @@ namespace OpenSim.Framework bool changed = false; Primitive.TextureEntryFace newface; Primitive.TextureEntryFace tmpFace; + Primitive.TextureEntryFace curFace; //make sure textureEntry.DefaultTexture is the unused one(DEFAULT_AVATAR_TEXTURE). Primitive.TextureEntry converted = new Primitive.TextureEntry(AppearanceManager.DEFAULT_AVATAR_TEXTURE); for (uint i = 0; i < TEXTURE_COUNT; ++i) { newface = textureEntry.GetFace(i); - if (newface.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) + curFace = m_texture.FaceTextures[i]; + if (newface.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) { - tmpFace = converted.GetFace(i); - tmpFace.TextureID = newface.TextureID; // we need a full high level copy, assuming all other parameters are the same. - if (m_texture.FaceTextures[i] == null || newface.TextureID != m_texture.FaceTextures[i].TextureID) + if (curFace == null) + continue; + if (!curFace.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) changed = true; } else - { if (m_texture.FaceTextures[i] == null) - continue; - if(m_texture.FaceTextures[i].TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) + { + tmpFace = converted.GetFace(i); + tmpFace.TextureID = newface.TextureID; // we need a full high level copy, assuming all other parameters are the same. + if (curFace == null || !curFace.TextureID.Equals(newface.TextureID)) changed = true; } } @@ -379,7 +372,7 @@ namespace OpenSim.Framework /// True if any existing visual parameter was changed by the new data. /// False if there were no changes or no existing visual parameters. /// - public virtual bool SetVisualParams(byte[] visualParams) + public bool SetVisualParams(byte[] visualParams) { if (visualParams == null) return false; @@ -404,8 +397,8 @@ namespace OpenSim.Framework if (visualParams[i] != m_visualparams[i]) { // DEBUG ON - // m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}", - // i,m_visualparams[i],visualParams[i]); + // m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}", + // i,m_visualparams[i],visualParams[i]); // DEBUG OFF m_visualparams[i] = visualParams[i]; changed = true; @@ -413,13 +406,13 @@ namespace OpenSim.Framework } } // Reset the height if the visual parameters actually changed -// if (changed) -// SetHeight(); + //if (changed) + // SetHeight(); return changed; } - public virtual void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams) + public void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams) { SetTextureEntries(textureEntry); SetVisualParams(visualParams); @@ -428,7 +421,7 @@ namespace OpenSim.Framework /// /// Set avatar height by a calculation based on their visual parameters. /// - public virtual void SetHeight() + public void SetHeight() { /* // Start with shortest possible female avatar height @@ -474,7 +467,7 @@ namespace OpenSim.Framework m_avatarHeight = m_avatarSize.Z; } - public virtual void SetWearable(int wearableId, AvatarWearable wearable) + public void SetWearable(int wearableId, AvatarWearable wearable) { // DEBUG ON // m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID); @@ -540,9 +533,9 @@ namespace OpenSim.Framework internal void AppendAttachment(AvatarAttachment attach) { -// m_log.DebugFormat( -// "[AVATAR APPEARNCE]: Appending itemID={0}, assetID={1} at {2}", -// attach.ItemID, attach.AssetID, attach.AttachPoint); + //m_log.DebugFormat( + // "[AVATAR APPEARNCE]: Appending itemID={0}, assetID={1} at {2}", + // attach.ItemID, attach.AssetID, attach.AttachPoint); lock (m_attachments) { @@ -551,7 +544,7 @@ namespace OpenSim.Framework foreach (AvatarAttachment prev in m_attachments[attach.AttachPoint]) { - if (prev.ItemID == attach.ItemID) + if (prev.ItemID.Equals(attach.ItemID)) return; } @@ -561,9 +554,9 @@ namespace OpenSim.Framework internal void ReplaceAttachment(AvatarAttachment attach) { -// m_log.DebugFormat( -// "[AVATAR APPEARANCE]: Replacing itemID={0}, assetID={1} at {2}", -// attach.ItemID, attach.AssetID, attach.AttachPoint); + //m_log.DebugFormat( + // "[AVATAR APPEARANCE]: Replacing itemID={0}, assetID={1} at {2}", + // attach.ItemID, attach.AssetID, attach.AttachPoint); lock (m_attachments) { @@ -589,9 +582,9 @@ namespace OpenSim.Framework /// public bool SetAttachment(int attachpoint, UUID item, UUID asset) { -// m_log.DebugFormat( -// "[AVATAR APPEARANCE]: Setting attachment at {0} with item ID {1}, asset ID {2}", -// attachpoint, item, asset); + //m_log.DebugFormat( + // "[AVATAR APPEARANCE]: Setting attachment at {0} with item ID {1}, asset ID {2}", + // attachpoint, item, asset); if (attachpoint == 0) return false; @@ -599,15 +592,7 @@ namespace OpenSim.Framework lock (m_attachments) { if (item.IsZero()) - { - if (m_attachments.ContainsKey(attachpoint)) - { - m_attachments.Remove(attachpoint); - return true; - } - - return false; - } + return m_attachments.Remove(attachpoint); // When a user logs in, the attachment item ids are pulled from persistence in the Avatars table. However, // the asset ids are not saved. When the avatar enters a simulator the attachments are set again. If @@ -665,7 +650,7 @@ namespace OpenSim.Framework { foreach (KeyValuePair> kvp in m_attachments) { - int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID == itemID; }); + int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID.Equals(itemID); }); if (index >= 0) return kvp.Value[index]; } @@ -680,7 +665,7 @@ namespace OpenSim.Framework { foreach (KeyValuePair> kvp in m_attachments) { - int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID == itemID; }); + int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID.Equals(itemID); }); if (index >= 0) return kvp.Key; } @@ -694,12 +679,12 @@ namespace OpenSim.Framework { foreach (KeyValuePair> kvp in m_attachments) { - int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID == itemID; }); + int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID.Equals(itemID); }); if (index >= 0) { -// m_log.DebugFormat( -// "[AVATAR APPEARANCE]: Detaching attachment {0}, index {1}, point {2}", -// m_attachments[kvp.Key][index].ItemID, index, m_attachments[kvp.Key][index].AttachPoint); + //m_log.DebugFormat( + // "[AVATAR APPEARANCE]: Detaching attachment {0}, index {1}, point {2}", + // m_attachments[kvp.Key][index].ItemID, index, m_attachments[kvp.Key][index].AttachPoint); // Remove it from the list of attachments at that attach point m_attachments[kvp.Key].RemoveAt(index); @@ -847,7 +832,7 @@ namespace OpenSim.Framework int idx = BAKE_INDICES[i]; if (m_texture.FaceTextures[idx] == null) continue; - if (m_texture.FaceTextures[idx].TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE || + if (m_texture.FaceTextures[idx].TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE) || m_texture.FaceTextures[idx].TextureID.IsZero()) continue; needExtra = true; @@ -1004,9 +989,9 @@ namespace OpenSim.Framework AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]); AppendAttachment(att); -// m_log.DebugFormat( -// "[AVATAR APPEARANCE]: Unpacked attachment itemID {0}, assetID {1}, point {2}", -// att.ItemID, att.AssetID, att.AttachPoint); + //m_log.DebugFormat( + // "[AVATAR APPEARANCE]: Unpacked attachment itemID {0}, assetID {1}, point {2}", + // att.ItemID, att.AssetID, att.AttachPoint); } } } @@ -1036,7 +1021,8 @@ namespace OpenSim.Framework int idx = BAKE_INDICES[i]; if (m_texture.FaceTextures[idx] == null) continue; - if (m_texture.FaceTextures[idx].TextureID.IsZero() || m_texture.FaceTextures[idx].TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) + if (m_texture.FaceTextures[idx].TextureID.IsZero() || + m_texture.FaceTextures[idx].TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) continue; return false; } diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 4c3839e493..4587514d1b 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -12595,12 +12595,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (cachedtex.AgentData.SessionID.NotEqual(m_sessionId) || cachedtex.AgentData.AgentID.NotEqual(m_agentId)) return; - // TODO: don't create new blocks if recycling an old packet cachedresp.AgentData.AgentID = m_agentId; cachedresp.AgentData.SessionID = m_sessionId; cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum; - cachedresp.WearableData = - new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; + cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; int cacheHits = 0; @@ -12623,29 +12621,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP maxWearablesLoop = cacheItems.Length; for (int i = 0; i < maxWearablesLoop; i++) { - int idx = cachedtex.WearableData[i].TextureIndex; - cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); - cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; - cachedresp.WearableData[i].HostName = Array.Empty(); - if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId) + var checkdWear = cachedtex.WearableData[i]; + int idx = checkdWear.TextureIndex; + var respWear = new AgentCachedTextureResponsePacket.WearableDataBlock() { - cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID; + TextureIndex = (byte)idx, + HostName = Array.Empty() + }; + if (checkdWear.ID.Equals(cacheItems[idx].CacheId)) + { + respWear.TextureID = cacheItems[idx].TextureID; cacheHits++; } else { - cachedresp.WearableData[i].TextureID = UUID.Zero; + respWear.TextureID = UUID.Zero; } + cachedresp.WearableData[i] = respWear; } } else { for (int i = 0; i < maxWearablesLoop; i++) { - cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); - cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; - cachedresp.WearableData[i].TextureID = UUID.Zero; - cachedresp.WearableData[i].HostName = Array.Empty(); + var newWear = new AgentCachedTextureResponsePacket.WearableDataBlock() + { + TextureIndex = cachedtex.WearableData[i].TextureIndex, + TextureID = UUID.Zero, + HostName = Array.Empty() + }; + cachedresp.WearableData[i] = newWear; } }