From 5915dfc26f0fe02411588ddea2791d69cb67d1ed Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 17 Sep 2012 15:37:05 +0100
Subject: Make use of mesh cost functions

---
 .../Linden/Caps/BunchOfCaps/BunchOfCaps.cs         | 29 ++++++++--------------
 .../Linden/Caps/BunchOfCaps/MeshCost.cs            |  8 +++---
 2 files changed, 13 insertions(+), 24 deletions(-)

(limited to 'OpenSim/Region/ClientStack/Linden')

diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 580c005..ce3ca8b 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -429,6 +429,7 @@ namespace OpenSim.Region.ClientStack.Linden
             //m_log.Debug("asset upload request via CAPS" + llsdRequest.inventory_type + " , " + llsdRequest.asset_type);
 
             uint cost = 0;
+            LLSDAssetUploadResponseData meshcostdata = new LLSDAssetUploadResponseData();
 
             if (llsdRequest.asset_type == "texture" ||
                 llsdRequest.asset_type == "animation" ||
@@ -467,11 +468,15 @@ namespace OpenSim.Region.ClientStack.Linden
 
                         if (llsdRequest.asset_type == "mesh")
                         {
-                            cost += 20; // Constant for now to test showing a price
+                            string error;
+                            int modelcost;
+                            ModelCost mc = new ModelCost();
 
-                            if (llsdRequest.asset_resources == null)
+                            if (!mc.MeshModelCost(llsdRequest.asset_resources, mm.UploadCharge, out modelcost,
+                                meshcostdata, out error))
                             {
-                                client.SendAgentAlertMessage("Unable to upload asset. missing information.", false);
+
+                                client.SendAgentAlertMessage(error, false);
 
                                 LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse();
                                 errorResponse.uploader = "";
@@ -479,10 +484,7 @@ namespace OpenSim.Region.ClientStack.Linden
                                 return errorResponse;
                             }
 
-                            uint textures_cost = (uint)llsdRequest.asset_resources.texture_list.Array.Count;
-                            textures_cost *= (uint)mm.UploadCharge;
-
-                            cost += textures_cost;
+                            cost = (uint)modelcost;
                         }
                         else
                         {
@@ -536,20 +538,9 @@ namespace OpenSim.Region.ClientStack.Linden
             uploadResponse.state = "upload";
             uploadResponse.upload_price = (int)cost;
 
-            // use fake values for now
             if (llsdRequest.asset_type == "mesh")
             {
-                uploadResponse.data = new LLSDAssetUploadResponseData();
-                uploadResponse.data.model_streaming_cost = 1.0;
-                uploadResponse.data.simulation_cost = 1.5;
-
-                uploadResponse.data.physics_cost = 2.0;
-                uploadResponse.data.resource_cost = 3.0;
-                uploadResponse.data.upload_price_breakdown.mesh_instance = 1;
-                uploadResponse.data.upload_price_breakdown.mesh_physics = 2;
-                uploadResponse.data.upload_price_breakdown.mesh_streaming = 3;
-                uploadResponse.data.upload_price_breakdown.texture = 5;
-                uploadResponse.data.upload_price_breakdown.model = 4;
+                uploadResponse.data = meshcostdata;
             }
 
             uploader.OnUpLoad += UploadCompleteHandler;
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
index 8adacab..0b5d3fa 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
@@ -27,9 +27,6 @@ namespace OpenSim.Region.ClientStack.Linden
     {
         float ModelMinCost = 5.0f; // try to favor small meshs versus sculpts
 
-        // scale prices relative to basic cost
-        const float ModelCostScale = 1.0f;
-
         const float primCreationCost = 0.01f;  // 256 prims cost extra 2.56
 
         // weigthed size to money convertion
@@ -70,7 +67,7 @@ namespace OpenSim.Region.ClientStack.Linden
         {
             totalcost = 0;
             error = string.Empty;
-
+            
             if (resources == null ||
                 resources.instance_list == null ||
                 resources.instance_list.Array.Count == 0)
@@ -184,7 +181,8 @@ namespace OpenSim.Region.ClientStack.Linden
             if (meshsfee < ModelMinCost)
                 meshsfee = ModelMinCost;
 
-            meshsfee *= ModelCostScale;
+            // scale cost with basic cost changes relative to 10
+            meshsfee *= (float)basicCost / 10.0f;
             meshsfee += 0.5f; // rounding
 
             totalcost += (int)meshsfee;
-- 
cgit v1.1