diff options
Diffstat (limited to 'OpenSim/Framework/AvatarAppearance.cs')
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 98 |
1 files changed, 66 insertions, 32 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 494ae5e..157feb5 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -53,6 +53,7 @@ namespace OpenSim.Framework | |||
53 | protected AvatarWearable[] m_wearables; | 53 | protected AvatarWearable[] m_wearables; |
54 | protected Dictionary<int, List<AvatarAttachment>> m_attachments; | 54 | protected Dictionary<int, List<AvatarAttachment>> m_attachments; |
55 | protected float m_avatarHeight = 0; | 55 | protected float m_avatarHeight = 0; |
56 | protected UUID[] m_texturehashes; | ||
56 | 57 | ||
57 | public virtual int Serial | 58 | public virtual int Serial |
58 | { | 59 | { |
@@ -98,6 +99,8 @@ namespace OpenSim.Framework | |||
98 | SetDefaultParams(); | 99 | SetDefaultParams(); |
99 | SetHeight(); | 100 | SetHeight(); |
100 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); | 101 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); |
102 | |||
103 | ResetTextureHashes(); | ||
101 | } | 104 | } |
102 | 105 | ||
103 | public AvatarAppearance(OSDMap map) | 106 | public AvatarAppearance(OSDMap map) |
@@ -108,32 +111,6 @@ namespace OpenSim.Framework | |||
108 | SetHeight(); | 111 | SetHeight(); |
109 | } | 112 | } |
110 | 113 | ||
111 | public AvatarAppearance(AvatarWearable[] wearables, Primitive.TextureEntry textureEntry, byte[] visualParams) | ||
112 | { | ||
113 | // m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance"); | ||
114 | |||
115 | m_serial = 0; | ||
116 | |||
117 | if (wearables != null) | ||
118 | m_wearables = wearables; | ||
119 | else | ||
120 | SetDefaultWearables(); | ||
121 | |||
122 | if (textureEntry != null) | ||
123 | m_texture = textureEntry; | ||
124 | else | ||
125 | SetDefaultTexture(); | ||
126 | |||
127 | if (visualParams != null) | ||
128 | m_visualparams = visualParams; | ||
129 | else | ||
130 | SetDefaultParams(); | ||
131 | |||
132 | SetHeight(); | ||
133 | |||
134 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); | ||
135 | } | ||
136 | |||
137 | public AvatarAppearance(AvatarAppearance appearance) : this(appearance, true) | 114 | public AvatarAppearance(AvatarAppearance appearance) : this(appearance, true) |
138 | { | 115 | { |
139 | } | 116 | } |
@@ -151,6 +128,8 @@ namespace OpenSim.Framework | |||
151 | SetHeight(); | 128 | SetHeight(); |
152 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); | 129 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); |
153 | 130 | ||
131 | ResetTextureHashes(); | ||
132 | |||
154 | return; | 133 | return; |
155 | } | 134 | } |
156 | 135 | ||
@@ -166,6 +145,10 @@ namespace OpenSim.Framework | |||
166 | SetWearable(i,appearance.Wearables[i]); | 145 | SetWearable(i,appearance.Wearables[i]); |
167 | } | 146 | } |
168 | 147 | ||
148 | m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT]; | ||
149 | for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | ||
150 | m_texturehashes[i] = new UUID(appearance.m_texturehashes[i]); | ||
151 | |||
169 | m_texture = null; | 152 | m_texture = null; |
170 | if (appearance.Texture != null) | 153 | if (appearance.Texture != null) |
171 | { | 154 | { |
@@ -200,6 +183,37 @@ namespace OpenSim.Framework | |||
200 | } | 183 | } |
201 | } | 184 | } |
202 | 185 | ||
186 | public void ResetTextureHashes() | ||
187 | { | ||
188 | m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT]; | ||
189 | for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | ||
190 | m_texturehashes[i] = UUID.Zero; | ||
191 | } | ||
192 | |||
193 | public UUID GetTextureHash(int textureIndex) | ||
194 | { | ||
195 | return m_texturehashes[NormalizeBakedTextureIndex(textureIndex)]; | ||
196 | } | ||
197 | |||
198 | public void SetTextureHash(int textureIndex, UUID textureHash) | ||
199 | { | ||
200 | m_texturehashes[NormalizeBakedTextureIndex(textureIndex)] = new UUID(textureHash); | ||
201 | } | ||
202 | |||
203 | /// <summary> | ||
204 | /// Normalizes the texture index to the actual bake index, this is done to | ||
205 | /// accommodate older viewers that send the BAKE_INDICES index rather than | ||
206 | /// the actual texture index | ||
207 | /// </summary> | ||
208 | private int NormalizeBakedTextureIndex(int textureIndex) | ||
209 | { | ||
210 | // Earlier viewer send the index into the baked index array, just trying to be careful here | ||
211 | if (textureIndex < BAKE_INDICES.Length) | ||
212 | return BAKE_INDICES[textureIndex]; | ||
213 | |||
214 | return textureIndex; | ||
215 | } | ||
216 | |||
203 | public void ClearWearables() | 217 | public void ClearWearables() |
204 | { | 218 | { |
205 | m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; | 219 | m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; |
@@ -223,12 +237,7 @@ namespace OpenSim.Framework | |||
223 | m_serial = 0; | 237 | m_serial = 0; |
224 | 238 | ||
225 | SetDefaultTexture(); | 239 | SetDefaultTexture(); |
226 | 240 | ResetTextureHashes(); | |
227 | //for (int i = 0; i < BAKE_INDICES.Length; i++) | ||
228 | // { | ||
229 | // int idx = BAKE_INDICES[i]; | ||
230 | // m_texture.FaceTextures[idx].TextureID = UUID.Zero; | ||
231 | // } | ||
232 | } | 241 | } |
233 | 242 | ||
234 | protected virtual void SetDefaultParams() | 243 | protected virtual void SetDefaultParams() |
@@ -598,6 +607,12 @@ namespace OpenSim.Framework | |||
598 | data["serial"] = OSD.FromInteger(m_serial); | 607 | data["serial"] = OSD.FromInteger(m_serial); |
599 | data["height"] = OSD.FromReal(m_avatarHeight); | 608 | data["height"] = OSD.FromReal(m_avatarHeight); |
600 | 609 | ||
610 | // Hashes | ||
611 | OSDArray hashes = new OSDArray(AvatarAppearance.TEXTURE_COUNT); | ||
612 | for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | ||
613 | hashes.Add(OSD.FromUUID(m_texturehashes[i])); | ||
614 | data["hashes"] = hashes; | ||
615 | |||
601 | // Wearables | 616 | // Wearables |
602 | OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES); | 617 | OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES); |
603 | for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) | 618 | for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) |
@@ -642,6 +657,25 @@ namespace OpenSim.Framework | |||
642 | 657 | ||
643 | try | 658 | try |
644 | { | 659 | { |
660 | // Hashes | ||
661 | m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT]; | ||
662 | if ((data != null) && (data["hashes"] != null) && (data["hashes"]).Type == OSDType.Array) | ||
663 | { | ||
664 | OSDArray hashes = (OSDArray)(data["hashes"]); | ||
665 | for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | ||
666 | { | ||
667 | UUID hashID = UUID.Zero; | ||
668 | if (i < hashes.Count && hashes[i] != null) | ||
669 | hashID = hashes[i].AsUUID(); | ||
670 | m_texturehashes[i] = hashID; | ||
671 | } | ||
672 | } | ||
673 | else | ||
674 | { | ||
675 | for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | ||
676 | m_texturehashes[i] = UUID.Zero; | ||
677 | } | ||
678 | |||
645 | // Wearables | 679 | // Wearables |
646 | SetDefaultWearables(); | 680 | SetDefaultWearables(); |
647 | if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array) | 681 | if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array) |