diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/WearableItem.cs | 656 |
1 files changed, 328 insertions, 328 deletions
diff --git a/OpenSim/Framework/WearableItem.cs b/OpenSim/Framework/WearableItem.cs index c4aa9bd..b2cb7e1 100644 --- a/OpenSim/Framework/WearableItem.cs +++ b/OpenSim/Framework/WearableItem.cs | |||
@@ -1,328 +1,328 @@ | |||
1 | using System; | 1 | using System; |
2 | using System.Collections.Generic; | 2 | using System.Collections.Generic; |
3 | using System.Globalization; | 3 | using System.Globalization; |
4 | using System.IO; | 4 | using System.IO; |
5 | using System.Text.RegularExpressions; | 5 | using System.Text.RegularExpressions; |
6 | using OpenMetaverse; | 6 | using OpenMetaverse; |
7 | 7 | ||
8 | namespace OpenSim.Framework | 8 | namespace OpenSim.Framework |
9 | { | 9 | { |
10 | public class WearableItem | 10 | public class WearableItem |
11 | { | 11 | { |
12 | public string WearableName = ""; | 12 | public string WearableName = ""; |
13 | public WearableType WearType = WearableType.Invalid; | 13 | public WearableType WearType = WearableType.Invalid; |
14 | 14 | ||
15 | public string ItemInfo = "Created Wearable"; | 15 | public string ItemInfo = "Created Wearable"; |
16 | 16 | ||
17 | public SortedList<int, VisualSetting> VisualSettings = new SortedList<int, VisualSetting>(); | 17 | public SortedList<int, VisualSetting> VisualSettings = new SortedList<int, VisualSetting>(); |
18 | // public LLObject.TextureEntry TextureEntry = null; | 18 | // public LLObject.TextureEntry TextureEntry = null; |
19 | //public byte[] TextureEntry = null; | 19 | //public byte[] TextureEntry = null; |
20 | 20 | ||
21 | public List<string> TextureStrings = new List<string>(); | 21 | public List<string> TextureStrings = new List<string>(); |
22 | 22 | ||
23 | //permissions | 23 | //permissions |
24 | public uint BaseMask = 0; | 24 | public uint BaseMask = 0; |
25 | public uint OwnerMask = 0; | 25 | public uint OwnerMask = 0; |
26 | public uint GroupMask = 0; | 26 | public uint GroupMask = 0; |
27 | public uint EveryoneMask = 0; | 27 | public uint EveryoneMask = 0; |
28 | public uint NextOwnerMask = 0; | 28 | public uint NextOwnerMask = 0; |
29 | 29 | ||
30 | public UUID CreatorID = UUID.Zero; | 30 | public UUID CreatorID = UUID.Zero; |
31 | public UUID OwnerID = UUID.Zero; | 31 | public UUID OwnerID = UUID.Zero; |
32 | public UUID LastOwnerID = UUID.Zero; | 32 | public UUID LastOwnerID = UUID.Zero; |
33 | public UUID GroupID = UUID.Zero; | 33 | public UUID GroupID = UUID.Zero; |
34 | 34 | ||
35 | //sale | 35 | //sale |
36 | public string SaleType = "not"; | 36 | public string SaleType = "not"; |
37 | public int SalePrice = 10; | 37 | public int SalePrice = 10; |
38 | 38 | ||
39 | private string BuildString = ""; | 39 | private string BuildString = ""; |
40 | 40 | ||
41 | 41 | ||
42 | public WearableItem(string wearableName, WearableType type) | 42 | public WearableItem(string wearableName, WearableType type) |
43 | { | 43 | { |
44 | WearableName = wearableName; | 44 | WearableName = wearableName; |
45 | WearType = type; | 45 | WearType = type; |
46 | } | 46 | } |
47 | 47 | ||
48 | public WearableItem(string wearableName) | 48 | public WearableItem(string wearableName) |
49 | { | 49 | { |
50 | WearableName = wearableName; | 50 | WearableName = wearableName; |
51 | WearType = ConvertNameToType(WearableName); | 51 | WearType = ConvertNameToType(WearableName); |
52 | } | 52 | } |
53 | 53 | ||
54 | public WearableItem(WearableType type) | 54 | public WearableItem(WearableType type) |
55 | { | 55 | { |
56 | WearType = type; | 56 | WearType = type; |
57 | WearableName = Enum.GetName(typeof(WearableType), type).ToLower(); | 57 | WearableName = Enum.GetName(typeof(WearableType), type).ToLower(); |
58 | } | 58 | } |
59 | 59 | ||
60 | public WearableItem() | 60 | public WearableItem() |
61 | { | 61 | { |
62 | } | 62 | } |
63 | 63 | ||
64 | public void AddVisualSetting(VisualSetting setting) | 64 | public void AddVisualSetting(VisualSetting setting) |
65 | { | 65 | { |
66 | if (!VisualSettings.ContainsKey(setting.VisualParam.ParamID)) | 66 | if (!VisualSettings.ContainsKey(setting.VisualParam.ParamID)) |
67 | { | 67 | { |
68 | VisualSettings.Add(setting.VisualParam.ParamID, setting); | 68 | VisualSettings.Add(setting.VisualParam.ParamID, setting); |
69 | } | 69 | } |
70 | } | 70 | } |
71 | 71 | ||
72 | public bool TryGetSetting(string paramName, out VisualSetting paramSetting) | 72 | public bool TryGetSetting(string paramName, out VisualSetting paramSetting) |
73 | { | 73 | { |
74 | foreach (VisualSetting setting in VisualSettings.Values) | 74 | foreach (VisualSetting setting in VisualSettings.Values) |
75 | { | 75 | { |
76 | if (setting.VisualParam.Name == paramName) | 76 | if (setting.VisualParam.Name == paramName) |
77 | { | 77 | { |
78 | paramSetting = setting; | 78 | paramSetting = setting; |
79 | return true; | 79 | return true; |
80 | } | 80 | } |
81 | } | 81 | } |
82 | 82 | ||
83 | paramSetting = null; | 83 | paramSetting = null; |
84 | return false; | 84 | return false; |
85 | } | 85 | } |
86 | 86 | ||
87 | public bool SetParamValue(string paramName, float value) | 87 | public bool SetParamValue(string paramName, float value) |
88 | { | 88 | { |
89 | VisualSetting paramSetting; | 89 | VisualSetting paramSetting; |
90 | if (TryGetSetting(paramName, out paramSetting)) | 90 | if (TryGetSetting(paramName, out paramSetting)) |
91 | { | 91 | { |
92 | if ((value >= paramSetting.VisualParam.MinValue) && (value <= paramSetting.VisualParam.MaxValue)) | 92 | if ((value >= paramSetting.VisualParam.MinValue) && (value <= paramSetting.VisualParam.MaxValue)) |
93 | { | 93 | { |
94 | paramSetting.Value = value; | 94 | paramSetting.Value = value; |
95 | return true; | 95 | return true; |
96 | } | 96 | } |
97 | } | 97 | } |
98 | return false; | 98 | return false; |
99 | } | 99 | } |
100 | 100 | ||
101 | public void RandomiseValues() | 101 | public void RandomiseValues() |
102 | { | 102 | { |
103 | foreach (VisualSetting setting in VisualSettings.Values) | 103 | foreach (VisualSetting setting in VisualSettings.Values) |
104 | { | 104 | { |
105 | //int randNum = Util.RandomClass.Next(0, 1000); | 105 | //int randNum = Util.RandomClass.Next(0, 1000); |
106 | float range = setting.VisualParam.MaxValue - setting.VisualParam.MinValue; | 106 | float range = setting.VisualParam.MaxValue - setting.VisualParam.MinValue; |
107 | // float val =((float) randNum )/ ((float)(1000.0f / range)); | 107 | // float val =((float) randNum )/ ((float)(1000.0f / range)); |
108 | float val = (float)OpenSim.Framework.Util.RandomClass.NextDouble() * range * 0.2f; | 108 | float val = (float)OpenSim.Framework.Util.RandomClass.NextDouble() * range * 0.2f; |
109 | setting.Value = setting.VisualParam.MinValue + (range / 2) + val; | 109 | setting.Value = setting.VisualParam.MinValue + (range / 2) + val; |
110 | } | 110 | } |
111 | } | 111 | } |
112 | 112 | ||
113 | public WearableType ConvertNameToType(string name) | 113 | public WearableType ConvertNameToType(string name) |
114 | { | 114 | { |
115 | return (WearableType)Enum.Parse(typeof(WearableType), name, true); | 115 | return (WearableType)Enum.Parse(typeof(WearableType), name, true); |
116 | } | 116 | } |
117 | 117 | ||
118 | public string ToAssetFormat() | 118 | public string ToAssetFormat() |
119 | { | 119 | { |
120 | BuildString = "LLWearable version 22\n"; | 120 | BuildString = "LLWearable version 22\n"; |
121 | BuildString += "New Item \n"; | 121 | BuildString += "New Item \n"; |
122 | BuildString += ItemInfo + "\n"; | 122 | BuildString += ItemInfo + "\n"; |
123 | 123 | ||
124 | 124 | ||
125 | AddSectionStart("permissions"); | 125 | AddSectionStart("permissions"); |
126 | AddTabbedNameValueLine("base_mask", BaseMask.ToString("00000000")); | 126 | AddTabbedNameValueLine("base_mask", BaseMask.ToString("00000000")); |
127 | AddTabbedNameValueLine("owner_mask", OwnerMask.ToString("00000000")); | 127 | AddTabbedNameValueLine("owner_mask", OwnerMask.ToString("00000000")); |
128 | AddTabbedNameValueLine("group_mask", GroupMask.ToString("00000000")); | 128 | AddTabbedNameValueLine("group_mask", GroupMask.ToString("00000000")); |
129 | AddTabbedNameValueLine("everyone_mask", EveryoneMask.ToString("00000000")); | 129 | AddTabbedNameValueLine("everyone_mask", EveryoneMask.ToString("00000000")); |
130 | AddTabbedNameValueLine("next_owner_mask", NextOwnerMask.ToString("00000000")); | 130 | AddTabbedNameValueLine("next_owner_mask", NextOwnerMask.ToString("00000000")); |
131 | AddTabbedNameValueLine("creator_id", CreatorID.ToString()); | 131 | AddTabbedNameValueLine("creator_id", CreatorID.ToString()); |
132 | AddTabbedNameValueLine("owner_id", OwnerID.ToString()); | 132 | AddTabbedNameValueLine("owner_id", OwnerID.ToString()); |
133 | AddTabbedNameValueLine("last_owner_id", LastOwnerID.ToString()); | 133 | AddTabbedNameValueLine("last_owner_id", LastOwnerID.ToString()); |
134 | AddTabbedNameValueLine("group_id", GroupID.ToString()); | 134 | AddTabbedNameValueLine("group_id", GroupID.ToString()); |
135 | AddSectionEnd(); | 135 | AddSectionEnd(); |
136 | 136 | ||
137 | AddSectionStart("sale_info"); | 137 | AddSectionStart("sale_info"); |
138 | AddTabbedNameValueLine("sale_type", SaleType.ToString()); | 138 | AddTabbedNameValueLine("sale_type", SaleType.ToString()); |
139 | AddTabbedNameValueLine("sale_price", SalePrice.ToString()); | 139 | AddTabbedNameValueLine("sale_price", SalePrice.ToString()); |
140 | AddSectionEnd(); | 140 | AddSectionEnd(); |
141 | 141 | ||
142 | AddNameValueLine("type", ((byte)WearType).ToString()); | 142 | AddNameValueLine("type", ((byte)WearType).ToString()); |
143 | AddNameValueLine("parameters", VisualSettings.Count.ToString()); | 143 | AddNameValueLine("parameters", VisualSettings.Count.ToString()); |
144 | 144 | ||
145 | foreach (KeyValuePair<int, VisualSetting> kp in VisualSettings) | 145 | foreach (KeyValuePair<int, VisualSetting> kp in VisualSettings) |
146 | { | 146 | { |
147 | AddNameValueLine(kp.Key.ToString(), kp.Value.Value.ToString(CultureInfo.InvariantCulture)); | 147 | AddNameValueLine(kp.Key.ToString(), kp.Value.Value.ToString(CultureInfo.InvariantCulture)); |
148 | } | 148 | } |
149 | if (TextureStrings.Count == 0) | 149 | if (TextureStrings.Count == 0) |
150 | { | 150 | { |
151 | AddNameValueLine("textures", "0"); //todo output texture entry | 151 | AddNameValueLine("textures", "0"); //todo output texture entry |
152 | } | 152 | } |
153 | else | 153 | else |
154 | { | 154 | { |
155 | AddNameValueLine("textures", TextureStrings.Count.ToString()); | 155 | AddNameValueLine("textures", TextureStrings.Count.ToString()); |
156 | for (int i = 0; i < TextureStrings.Count; i++) | 156 | for (int i = 0; i < TextureStrings.Count; i++) |
157 | { | 157 | { |
158 | BuildString += TextureStrings[i] + "\n"; | 158 | BuildString += TextureStrings[i] + "\n"; |
159 | } | 159 | } |
160 | BuildString += "\n"; | 160 | BuildString += "\n"; |
161 | 161 | ||
162 | } | 162 | } |
163 | 163 | ||
164 | return BuildString; | 164 | return BuildString; |
165 | } | 165 | } |
166 | 166 | ||
167 | public void SaveToFile(string fileName) | 167 | public void SaveToFile(string fileName) |
168 | { | 168 | { |
169 | File.WriteAllText(fileName, this.ToAssetFormat()); | 169 | File.WriteAllText(fileName, this.ToAssetFormat()); |
170 | } | 170 | } |
171 | 171 | ||
172 | public void AddSectionStart(string sectionName) | 172 | public void AddSectionStart(string sectionName) |
173 | { | 173 | { |
174 | BuildString += "\t" + sectionName + " 0\n"; | 174 | BuildString += "\t" + sectionName + " 0\n"; |
175 | BuildString += "\t{\n"; | 175 | BuildString += "\t{\n"; |
176 | } | 176 | } |
177 | 177 | ||
178 | public void AddSectionEnd() | 178 | public void AddSectionEnd() |
179 | { | 179 | { |
180 | BuildString += "\t}\n"; | 180 | BuildString += "\t}\n"; |
181 | } | 181 | } |
182 | 182 | ||
183 | private void AddTabbedNameValueLine(string name, string value) | 183 | private void AddTabbedNameValueLine(string name, string value) |
184 | { | 184 | { |
185 | BuildString += "\t\t"; | 185 | BuildString += "\t\t"; |
186 | BuildString += name + "\t"; | 186 | BuildString += name + "\t"; |
187 | BuildString += value + "\n"; | 187 | BuildString += value + "\n"; |
188 | } | 188 | } |
189 | 189 | ||
190 | private void AddNameValueLine(string name, string value) | 190 | private void AddNameValueLine(string name, string value) |
191 | { | 191 | { |
192 | // BuildString += "\t\t"; | 192 | // BuildString += "\t\t"; |
193 | BuildString += name + " "; | 193 | BuildString += name + " "; |
194 | BuildString += value + "\n"; | 194 | BuildString += value + "\n"; |
195 | } | 195 | } |
196 | 196 | ||
197 | #region Static Methods | 197 | #region Static Methods |
198 | public static List<VisualParam> FindParamsForWearable(string wearableName) | 198 | public static List<VisualParam> FindParamsForWearable(string wearableName) |
199 | { | 199 | { |
200 | List<VisualParam> wearableParams = new List<VisualParam>(); | 200 | List<VisualParam> wearableParams = new List<VisualParam>(); |
201 | foreach (VisualParam param in VisualParams.Params.Values) | 201 | foreach (VisualParam param in VisualParams.Params.Values) |
202 | { | 202 | { |
203 | if (param.Wearable == wearableName) | 203 | if (param.Wearable == wearableName) |
204 | { | 204 | { |
205 | wearableParams.Add(param); | 205 | wearableParams.Add(param); |
206 | } | 206 | } |
207 | } | 207 | } |
208 | 208 | ||
209 | return wearableParams; | 209 | return wearableParams; |
210 | } | 210 | } |
211 | 211 | ||
212 | public static WearableItem Create(string wearableTypeName) | 212 | public static WearableItem Create(string wearableTypeName) |
213 | { | 213 | { |
214 | WearableItem wearableItem = new WearableItem(wearableTypeName); | 214 | WearableItem wearableItem = new WearableItem(wearableTypeName); |
215 | List<VisualParam> typeParams = FindParamsForWearable(wearableTypeName); | 215 | List<VisualParam> typeParams = FindParamsForWearable(wearableTypeName); |
216 | foreach (VisualParam param in typeParams) | 216 | foreach (VisualParam param in typeParams) |
217 | { | 217 | { |
218 | wearableItem.AddVisualSetting(new VisualSetting(param)); | 218 | wearableItem.AddVisualSetting(new VisualSetting(param)); |
219 | } | 219 | } |
220 | return wearableItem; | 220 | return wearableItem; |
221 | } | 221 | } |
222 | 222 | ||
223 | public static WearableItem CreateFromAsset(string assetData) | 223 | public static WearableItem CreateFromAsset(string assetData) |
224 | { | 224 | { |
225 | UUID creatorID = UUID.Zero; | 225 | UUID creatorID = UUID.Zero; |
226 | UUID ownerID = UUID.Zero; | 226 | UUID ownerID = UUID.Zero; |
227 | UUID lastOwnerID = UUID.Zero; | 227 | UUID lastOwnerID = UUID.Zero; |
228 | UUID groupID = UUID.Zero; | 228 | UUID groupID = UUID.Zero; |
229 | 229 | ||
230 | char[] newlineDelimiter = { '\n' }; | 230 | char[] newlineDelimiter = { '\n' }; |
231 | string[] lines = assetData.Split(newlineDelimiter); | 231 | string[] lines = assetData.Split(newlineDelimiter); |
232 | 232 | ||
233 | WearableItem wearableObject = null; | 233 | WearableItem wearableObject = null; |
234 | Regex r = new Regex("[\t ]+"); | 234 | Regex r = new Regex("[\t ]+"); |
235 | bool reachedParams = false; | 235 | bool reachedParams = false; |
236 | bool reachedTextures = false; | 236 | bool reachedTextures = false; |
237 | foreach (string line in lines) | 237 | foreach (string line in lines) |
238 | { | 238 | { |
239 | string trimLine = line.Trim(); | 239 | string trimLine = line.Trim(); |
240 | // Console.WriteLine("line : " + trimLine); | 240 | // Console.WriteLine("line : " + trimLine); |
241 | 241 | ||
242 | string[] splitLine = r.Split(trimLine); | 242 | string[] splitLine = r.Split(trimLine); |
243 | if (splitLine.Length > 1) | 243 | if (splitLine.Length > 1) |
244 | { | 244 | { |
245 | switch (splitLine[0]) | 245 | switch (splitLine[0]) |
246 | { | 246 | { |
247 | case "textures": | 247 | case "textures": |
248 | reachedParams = false; | 248 | reachedParams = false; |
249 | reachedTextures = true; | 249 | reachedTextures = true; |
250 | break; | 250 | break; |
251 | 251 | ||
252 | case "type": | 252 | case "type": |
253 | string wearableTypeName = Enum.GetName(typeof(WearableType), (WearableType)Convert.ToInt32(splitLine[1])); | 253 | string wearableTypeName = Enum.GetName(typeof(WearableType), (WearableType)Convert.ToInt32(splitLine[1])); |
254 | wearableObject = Create(wearableTypeName.ToLower()); | 254 | wearableObject = Create(wearableTypeName.ToLower()); |
255 | break; | 255 | break; |
256 | 256 | ||
257 | case "parameters": | 257 | case "parameters": |
258 | reachedParams = true; | 258 | reachedParams = true; |
259 | break; | 259 | break; |
260 | 260 | ||
261 | case "creator_id": | 261 | case "creator_id": |
262 | creatorID = new UUID(splitLine[1]); | 262 | creatorID = new UUID(splitLine[1]); |
263 | break; | 263 | break; |
264 | 264 | ||
265 | case "owner_id": | 265 | case "owner_id": |
266 | ownerID = new UUID(splitLine[1]); | 266 | ownerID = new UUID(splitLine[1]); |
267 | break; | 267 | break; |
268 | 268 | ||
269 | case "last_owner_id": | 269 | case "last_owner_id": |
270 | lastOwnerID = new UUID(splitLine[1]); | 270 | lastOwnerID = new UUID(splitLine[1]); |
271 | break; | 271 | break; |
272 | 272 | ||
273 | case "group_id": | 273 | case "group_id": |
274 | groupID = new UUID(splitLine[1]); | 274 | groupID = new UUID(splitLine[1]); |
275 | break; | 275 | break; |
276 | 276 | ||
277 | default: | 277 | default: |
278 | if ((wearableObject != null) && (reachedParams)) | 278 | if ((wearableObject != null) && (reachedParams)) |
279 | { | 279 | { |
280 | int id = Convert.ToInt32(splitLine[0]); | 280 | int id = Convert.ToInt32(splitLine[0]); |
281 | if (wearableObject.VisualSettings.ContainsKey(id)) | 281 | if (wearableObject.VisualSettings.ContainsKey(id)) |
282 | { | 282 | { |
283 | 283 | ||
284 | wearableObject.VisualSettings[id].Value = Convert.ToSingle(splitLine[1], CultureInfo.InvariantCulture); | 284 | wearableObject.VisualSettings[id].Value = Convert.ToSingle(splitLine[1], CultureInfo.InvariantCulture); |
285 | } | 285 | } |
286 | } | 286 | } |
287 | else if ((wearableObject != null) && (reachedTextures)) | 287 | else if ((wearableObject != null) && (reachedTextures)) |
288 | { | 288 | { |
289 | wearableObject.TextureStrings.Add(line); | 289 | wearableObject.TextureStrings.Add(line); |
290 | } | 290 | } |
291 | break; | 291 | break; |
292 | } | 292 | } |
293 | } | 293 | } |
294 | } | 294 | } |
295 | 295 | ||
296 | if (wearableObject != null) | 296 | if (wearableObject != null) |
297 | { | 297 | { |
298 | wearableObject.CreatorID = creatorID; | 298 | wearableObject.CreatorID = creatorID; |
299 | wearableObject.OwnerID = ownerID; | 299 | wearableObject.OwnerID = ownerID; |
300 | wearableObject.LastOwnerID = lastOwnerID; | 300 | wearableObject.LastOwnerID = lastOwnerID; |
301 | wearableObject.GroupID = groupID; | 301 | wearableObject.GroupID = groupID; |
302 | } | 302 | } |
303 | 303 | ||
304 | return wearableObject; | 304 | return wearableObject; |
305 | } | 305 | } |
306 | #endregion | 306 | #endregion |
307 | 307 | ||
308 | #region Nested Class | 308 | #region Nested Class |
309 | public class VisualSetting | 309 | public class VisualSetting |
310 | { | 310 | { |
311 | public VisualParam VisualParam; | 311 | public VisualParam VisualParam; |
312 | public float Value = 0; | 312 | public float Value = 0; |
313 | 313 | ||
314 | public VisualSetting(VisualParam param, float value) | 314 | public VisualSetting(VisualParam param, float value) |
315 | { | 315 | { |
316 | VisualParam = param; | 316 | VisualParam = param; |
317 | Value = value; | 317 | Value = value; |
318 | } | 318 | } |
319 | 319 | ||
320 | public VisualSetting(VisualParam param) | 320 | public VisualSetting(VisualParam param) |
321 | { | 321 | { |
322 | VisualParam = param; | 322 | VisualParam = param; |
323 | Value = param.DefaultValue; | 323 | Value = param.DefaultValue; |
324 | } | 324 | } |
325 | } | 325 | } |
326 | #endregion | 326 | #endregion |
327 | } | 327 | } |
328 | } | 328 | } |