diff options
Diffstat (limited to 'indra/newview/llagentbenefits.cpp')
-rw-r--r-- | indra/newview/llagentbenefits.cpp | 268 |
1 files changed, 166 insertions, 102 deletions
diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp index c2a1589682..0717d92ea7 100644 --- a/indra/newview/llagentbenefits.cpp +++ b/indra/newview/llagentbenefits.cpp @@ -25,16 +25,17 @@ #include "llviewerprecompiledheaders.h" #include "llagentbenefits.h" +#include "llviewertexture.h" LLAgentBenefits::LLAgentBenefits(): - m_initalized(false), - m_animated_object_limit(-1), - m_animation_upload_cost(-1), - m_attachment_limit(-1), - m_group_membership_limit(-1), - m_picks_limit(-1), - m_sound_upload_cost(-1), - m_texture_upload_cost(-1) + m_initalized(false), + m_animated_object_limit(-1), + m_animation_upload_cost(-1), + m_attachment_limit(-1), + m_group_membership_limit(-1), + m_picks_limit(-1), + m_sound_upload_cost(-1), + m_texture_upload_cost(-1) { } @@ -47,118 +48,181 @@ LLAgentBenefits::~LLAgentBenefits() // the viewer cares about are integer. bool get_required_S32(const LLSD& sd, const LLSD::String& key, S32& value) { - value = -1; - if (sd.has(key)) - { - value = sd[key].asInteger(); - return true; - } + value = -1; + if (sd.has(key)) + { + value = sd[key].asInteger(); + return true; + } - LL_WARNS("Benefits") << "Missing required benefit field " << key << LL_ENDL; - return false; + LL_WARNS("Benefits") << "Missing required benefit field " << key << LL_ENDL; + return false; } bool LLAgentBenefits::init(const LLSD& benefits_sd) { - LL_DEBUGS("Benefits") << "initializing benefits from " << benefits_sd << LL_ENDL; + LL_DEBUGS("Benefits") << "initializing benefits from " << benefits_sd << LL_ENDL; - if (!get_required_S32(benefits_sd, "animated_object_limit", m_animated_object_limit)) - { - return false; - } - if (!get_required_S32(benefits_sd, "animation_upload_cost", m_animation_upload_cost)) - { - return false; - } - if (!get_required_S32(benefits_sd, "attachment_limit", m_attachment_limit)) - { - return false; - } - if (!get_required_S32(benefits_sd, "create_group_cost", m_create_group_cost)) - { - return false; - } - if (!get_required_S32(benefits_sd, "group_membership_limit", m_group_membership_limit)) - { - return false; - } - if (!get_required_S32(benefits_sd, "picks_limit", m_picks_limit)) - { - return false; - } - if (!get_required_S32(benefits_sd, "sound_upload_cost", m_sound_upload_cost)) + if (!get_required_S32(benefits_sd, "animated_object_limit", m_animated_object_limit)) + { + return false; + } + if (!get_required_S32(benefits_sd, "animation_upload_cost", m_animation_upload_cost)) + { + return false; + } + if (!get_required_S32(benefits_sd, "attachment_limit", m_attachment_limit)) + { + return false; + } + if (!get_required_S32(benefits_sd, "create_group_cost", m_create_group_cost)) + { + return false; + } + if (!get_required_S32(benefits_sd, "group_membership_limit", m_group_membership_limit)) + { + return false; + } + if (!get_required_S32(benefits_sd, "picks_limit", m_picks_limit)) + { + return false; + } + if (!get_required_S32(benefits_sd, "sound_upload_cost", m_sound_upload_cost)) + { + return false; + } + if (!get_required_S32(benefits_sd, "texture_upload_cost", m_texture_upload_cost)) + { + return false; + } + + if (benefits_sd.has("large_texture_upload_cost")) { - return false; + LLSD large_texture_cost = benefits_sd.get("large_texture_upload_cost"); + if (large_texture_cost.isArray()) + { + LLSD::array_const_iterator end = large_texture_cost.endArray(); + LLSD::array_const_iterator it = large_texture_cost.beginArray(); + for (; it != end; ++it) + { + m_2k_texture_upload_cost.push_back(it->asInteger()); + } + std::sort(m_2k_texture_upload_cost.begin(), m_2k_texture_upload_cost.end()); + } } - if (!get_required_S32(benefits_sd, "texture_upload_cost", m_texture_upload_cost)) + + if (m_2k_texture_upload_cost.empty()) { - return false; + m_2k_texture_upload_cost.push_back(m_texture_upload_cost); } - // FIXME PREMIUM - either use this field or get rid of it - m_initalized = true; - return true; + // FIXME PREMIUM - either use this field or get rid of it + m_initalized = true; + return true; } S32 LLAgentBenefits::getAnimatedObjectLimit() const { - return m_animated_object_limit; + return m_animated_object_limit; } S32 LLAgentBenefits::getAnimationUploadCost() const { - return m_animation_upload_cost; + return m_animation_upload_cost; } S32 LLAgentBenefits::getAttachmentLimit() const { - return m_attachment_limit; + return m_attachment_limit; } S32 LLAgentBenefits::getCreateGroupCost() const { - return m_create_group_cost; + return m_create_group_cost; } S32 LLAgentBenefits::getGroupMembershipLimit() const { - return m_group_membership_limit; + return m_group_membership_limit; } S32 LLAgentBenefits::getPicksLimit() const { - return m_picks_limit; + return m_picks_limit; } S32 LLAgentBenefits::getSoundUploadCost() const { - return m_sound_upload_cost; + return m_sound_upload_cost; } S32 LLAgentBenefits::getTextureUploadCost() const { - return m_texture_upload_cost; + return m_texture_upload_cost; } -bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const +S32 LLAgentBenefits::getTextureUploadCost(const LLViewerTexture* tex) const { - bool succ = false; - if (asset_type == LLAssetType::AT_TEXTURE) + if (tex) { - cost = getTextureUploadCost(); - succ = true; + S32 area = tex->getFullHeight() * tex->getFullWidth(); + if (area >= MIN_2K_TEXTURE_AREA) + { + return get2KTextureUploadCost(area); + } + else + { + return getTextureUploadCost(); + } } - else if (asset_type == LLAssetType::AT_SOUND) + return getTextureUploadCost(); +} + +S32 LLAgentBenefits::getTextureUploadCost(const LLImageBase* tex) const +{ + if (tex) { - cost = getSoundUploadCost(); - succ = true; + S32 area = tex->getHeight() * tex->getWidth(); + if (area >= MIN_2K_TEXTURE_AREA) + { + return get2KTextureUploadCost(area); + } + else + { + return getTextureUploadCost(); + } } - else if (asset_type == LLAssetType::AT_ANIMATION) + return getTextureUploadCost(); +} + +S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const +{ + if (m_2k_texture_upload_cost.empty()) { - cost = getAnimationUploadCost(); - succ = true; + return m_texture_upload_cost; } - return succ; + return m_2k_texture_upload_cost[0]; +} + +bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const +{ + bool succ = false; + if (asset_type == LLAssetType::AT_TEXTURE) + { + cost = getTextureUploadCost(); + succ = true; + } + else if (asset_type == LLAssetType::AT_SOUND) + { + cost = getSoundUploadCost(); + succ = true; + } + else if (asset_type == LLAssetType::AT_ANIMATION) + { + cost = getAnimationUploadCost(); + succ = true; + } + return succ; } LLAgentBenefitsMgr::LLAgentBenefitsMgr() @@ -172,65 +236,65 @@ LLAgentBenefitsMgr::~LLAgentBenefitsMgr() // static const LLAgentBenefits& LLAgentBenefitsMgr::current() { - return instance().mCurrent; + return instance().mCurrent; } // static const LLAgentBenefits& LLAgentBenefitsMgr::get(const std::string& package) { - if (instance().mPackageMap.find(package) != instance().mPackageMap.end()) - { - return instance().mPackageMap[package]; - } - else - { - return instance().mDefault; - } + if (instance().mPackageMap.find(package) != instance().mPackageMap.end()) + { + return instance().mPackageMap[package]; + } + else + { + return instance().mDefault; + } } // static bool LLAgentBenefitsMgr::init(const std::string& package, const LLSD& benefits_sd) { - LLAgentBenefits benefits; - if (!benefits.init(benefits_sd)) - { - LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL; - return false; - } - else - { - instance().mPackageMap[package] = benefits; - } - return true; + LLAgentBenefits benefits; + if (!benefits.init(benefits_sd)) + { + LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL; + return false; + } + else + { + instance().mPackageMap[package] = benefits; + } + return true; } // static bool LLAgentBenefitsMgr::initCurrent(const std::string& package, const LLSD& benefits_sd) { - LLAgentBenefits benefits; - if (!benefits.init(benefits_sd)) - { - LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL; - return false; - } - else - { - instance().mCurrent = benefits; - instance().mCurrentName = package; - } - return true; + LLAgentBenefits benefits; + if (!benefits.init(benefits_sd)) + { + LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL; + return false; + } + else + { + instance().mCurrent = benefits; + instance().mCurrentName = package; + } + return true; } // static bool LLAgentBenefitsMgr::has(const std::string& package) { - return instance().mPackageMap.find(package) != instance().mPackageMap.end(); + return instance().mPackageMap.find(package) != instance().mPackageMap.end(); } //static bool LLAgentBenefitsMgr::isCurrent(const std::string& package) { - return instance().mCurrentName == package; + return instance().mCurrentName == package; } |