diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs index 4a3fae6..db6f9fd 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs | |||
@@ -96,12 +96,18 @@ namespace OpenSim.Region.ClientStack.Linden | |||
96 | // basicCost input region assets upload cost | 96 | // basicCost input region assets upload cost |
97 | // totalcost returns model total upload fee | 97 | // totalcost returns model total upload fee |
98 | // meshcostdata returns detailed costs for viewer | 98 | // meshcostdata returns detailed costs for viewer |
99 | public bool MeshModelCost(LLSDAssetResource resources, int basicCost, out int totalcost, | 99 | // avatarSkeleton if mesh includes a avatar skeleton |
100 | LLSDAssetUploadResponseData meshcostdata, out string error, ref string warning) | 100 | // useAvatarCollider if we should use physics mesh for avatar |
101 | public bool MeshModelCost(LLSDAssetResource resources, int basicCost, out int totalcost, | ||
102 | LLSDAssetUploadResponseData meshcostdata,out bool avatarSkeleton, out bool useAvatarCollider, | ||
103 | out string error, ref string warning) | ||
101 | { | 104 | { |
102 | totalcost = 0; | 105 | totalcost = 0; |
103 | error = string.Empty; | 106 | error = string.Empty; |
104 | 107 | ||
108 | avatarSkeleton = false; | ||
109 | useAvatarCollider = false; | ||
110 | |||
105 | if (resources == null || | 111 | if (resources == null || |
106 | resources.instance_list == null || | 112 | resources.instance_list == null || |
107 | resources.instance_list.Array.Count == 0) | 113 | resources.instance_list.Array.Count == 0) |
@@ -145,6 +151,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
145 | float meshsfee = 0; | 151 | float meshsfee = 0; |
146 | int numberMeshs = 0; | 152 | int numberMeshs = 0; |
147 | bool haveMeshs = false; | 153 | bool haveMeshs = false; |
154 | |||
155 | bool curskeleton; | ||
156 | bool curAvatarPhys; | ||
157 | |||
148 | List<ameshCostParam> meshsCosts = new List<ameshCostParam>(); | 158 | List<ameshCostParam> meshsCosts = new List<ameshCostParam>(); |
149 | 159 | ||
150 | if (resources.mesh_list != null && resources.mesh_list.Array.Count > 0) | 160 | if (resources.mesh_list != null && resources.mesh_list.Array.Count > 0) |
@@ -156,10 +166,20 @@ namespace OpenSim.Region.ClientStack.Linden | |||
156 | ameshCostParam curCost = new ameshCostParam(); | 166 | ameshCostParam curCost = new ameshCostParam(); |
157 | byte[] data = (byte[])resources.mesh_list.Array[i]; | 167 | byte[] data = (byte[])resources.mesh_list.Array[i]; |
158 | 168 | ||
159 | if (!MeshCost(data, curCost, out error)) | 169 | if (!MeshCost(data, curCost,out curskeleton, out curAvatarPhys, out error)) |
160 | { | 170 | { |
161 | return false; | 171 | return false; |
162 | } | 172 | } |
173 | |||
174 | if (curskeleton) | ||
175 | { | ||
176 | if (avatarSkeleton) | ||
177 | { | ||
178 | error = "model can only contain a avatar skeleton"; | ||
179 | return false; | ||
180 | } | ||
181 | avatarSkeleton = true; | ||
182 | } | ||
163 | meshsCosts.Add(curCost); | 183 | meshsCosts.Add(curCost); |
164 | meshsfee += curCost.costFee; | 184 | meshsfee += curCost.costFee; |
165 | } | 185 | } |
@@ -273,7 +293,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
273 | } | 293 | } |
274 | 294 | ||
275 | // single mesh asset cost | 295 | // single mesh asset cost |
276 | private bool MeshCost(byte[] data, ameshCostParam cost, out string error) | 296 | private bool MeshCost(byte[] data, ameshCostParam cost,out bool skeleton, out bool avatarPhys, out string error) |
277 | { | 297 | { |
278 | cost.highLODSize = 0; | 298 | cost.highLODSize = 0; |
279 | cost.medLODSize = 0; | 299 | cost.medLODSize = 0; |
@@ -284,6 +304,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
284 | 304 | ||
285 | error = string.Empty; | 305 | error = string.Empty; |
286 | 306 | ||
307 | skeleton = false; | ||
308 | avatarPhys = false; | ||
309 | |||
287 | if (data == null || data.Length == 0) | 310 | if (data == null || data.Length == 0) |
288 | { | 311 | { |
289 | error = "Missing model information."; | 312 | error = "Missing model information."; |
@@ -330,6 +353,17 @@ namespace OpenSim.Region.ClientStack.Linden | |||
330 | 353 | ||
331 | int submesh_offset = -1; | 354 | int submesh_offset = -1; |
332 | 355 | ||
356 | if (map.ContainsKey("skeleton")) | ||
357 | { | ||
358 | tmpmap = (OSDMap)map["skeleton"]; | ||
359 | if (tmpmap.ContainsKey("offset") && tmpmap.ContainsKey("size")) | ||
360 | { | ||
361 | int sksize = tmpmap["size"].AsInteger(); | ||
362 | if(sksize > 0) | ||
363 | skeleton = true; | ||
364 | } | ||
365 | } | ||
366 | |||
333 | if (map.ContainsKey("physics_convex")) | 367 | if (map.ContainsKey("physics_convex")) |
334 | { | 368 | { |
335 | tmpmap = (OSDMap)map["physics_convex"]; | 369 | tmpmap = (OSDMap)map["physics_convex"]; |