From dd506b160ebde6528e1412284d7cd5ecc1215bc3 Mon Sep 17 00:00:00 2001 From: Pistonight Date: Fri, 8 Mar 2024 23:24:06 -0800 Subject: [PATCH] rename CookData and WeaponData fields --- src/Game/Actor/actWeapon.cpp | 2 +- src/Game/UI/uiPauseMenuDataMgr.cpp | 131 +++++++++++++++-------------- src/Game/UI/uiPauseMenuDataMgr.h | 56 +++++++----- 3 files changed, 100 insertions(+), 89 deletions(-) diff --git a/src/Game/Actor/actWeapon.cpp b/src/Game/Actor/actWeapon.cpp index 7ea6c2dc4..c4281c194 100644 --- a/src/Game/Actor/actWeapon.cpp +++ b/src/Game/Actor/actWeapon.cpp @@ -20,7 +20,7 @@ WeaponModifierInfo::WeaponModifierInfo(const ui::PouchItem& item) { void WeaponModifierInfo::fromItem(const ui::PouchItem& item) { if (item.getType() <= ui::PouchItemType::Shield) { - set(item.getWeaponData().mAddType, item.getWeaponData().mAddValue); + set(item.getWeaponData().mModifier, item.getWeaponData().mModifierValue); } else { flags.setDirect(0); value = 0; diff --git a/src/Game/UI/uiPauseMenuDataMgr.cpp b/src/Game/UI/uiPauseMenuDataMgr.cpp index 9ee8b83f6..0d073ed45 100644 --- a/src/Game/UI/uiPauseMenuDataMgr.cpp +++ b/src/Game/UI/uiPauseMenuDataMgr.cpp @@ -29,7 +29,7 @@ namespace uking::ui { SEAD_SINGLETON_DISPOSER_IMPL(PauseMenuDataMgr) -sead::Vector2f sDummyCookEffect0{-1, 0}; +sead::Vector2f sEmptyCookEffect{f32(CookEffectId::None), 0}; namespace { @@ -166,38 +166,38 @@ int getWeaponModifierSortKey(sead::TypedBitFlag flags) { return 12; } -int getFoodSortKey(int* effect_value, const PouchItem* item) { - const int type = item->getCookData().mCookEffect0.x; - const int value = item->getCookData().mCookEffect0.y; - *effect_value = value; - // TODO: add an enum +int getFoodSortKey(int* effect_level, const PouchItem* item) { + const CookEffectId type = item->getCookData().getEffect(); + const int level = int(item->getCookData().getEffectLevel()); + *effect_level = level; + switch (type) { - case 1: + case CookEffectId::LifeRecover: return 0; - case 2: + case CookEffectId::LifeMaxUp: return 1; - case 14: + case CookEffectId::GutsRecover: return 2; - case 15: + case CookEffectId::ExGutsMaxUp: return 3; - case 13: + case CookEffectId::MovingSpeed: return 4; - case 16: + case CookEffectId::Fireproof: return 5; - case 5: + case CookEffectId::ResistCold: return 6; - case 4: + case CookEffectId::ResistHot: return 7; - case 6: + case CookEffectId::ResistElectric: return 8; - case 10: + case CookEffectId::AttackUp: return 9; - case 11: + case CookEffectId::DefenseUp: return 10; - case 12: + case CookEffectId::Quietness: return 11; default: - *effect_value = 0; + *effect_level = 0; if (ksys::act::InfoData::instance()->hasTag(item->getName().cstr(), ksys::act::tags::CookResult)) { return 0; @@ -238,7 +238,7 @@ PauseMenuDataMgr::PauseMenuDataMgr() { PauseMenuDataMgr::~PauseMenuDataMgr() = default; PouchItem::PouchItem() { - mData.cook.mCookEffect0 = sDummyCookEffect0; + mData.cook.mEffect = sEmptyCookEffect; for (s32 i = 0; i < NumIngredientsMax; ++i) mIngredients.emplaceBack(); } @@ -251,16 +251,16 @@ void PauseMenuDataMgr::resetItem() { mNewlyAddedItem.mInInventory = false; mNewlyAddedItem.mName.clear(); mNewlyAddedItem.mData.cook = {}; - mNewlyAddedItem.mData.cook.mCookEffect0 = sDummyCookEffect0; + mNewlyAddedItem.mData.cook.mEffect = sEmptyCookEffect; } // NOLINTNEXTLINE(readability-convert-member-functions-to-static) void PauseMenuDataMgr::setItemModifier(PouchItem& item, const act::WeaponModifierInfo* modifier) { if (modifier && !modifier->flags.isZero()) { - item.setWeaponAddType(modifier->flags.getDirect()); - item.setWeaponAddValue(static_cast(modifier->value)); + item.setWeaponModifier(modifier->flags.getDirect()); + item.setWeaponModifierValue(static_cast(modifier->value)); } else { - item.setWeaponAddType(0); + item.setWeaponModifier(0); } } @@ -397,14 +397,14 @@ void PauseMenuDataMgr::doLoadFromGameData() { sead::Vector2f v{0, 0}; gdt::getFlag_StaminaRecover(&v, num_food); - mLastAddedItem->getCookData().setStaminaRecoverX(v.x); - mLastAddedItem->getCookData().setStaminaRecoverY(v.y); + mLastAddedItem->getCookData().setHealthRecover(v.x); + mLastAddedItem->getCookData().setEffectDuration(v.y); gdt::getFlag_CookEffect0(&v, num_food); - mLastAddedItem->getCookData().setCookEffect0(v); + mLastAddedItem->getCookData().setEffect(v); gdt::getFlag_CookEffect1(&v, num_food); - mLastAddedItem->getCookData().setCookEffect1(v.x); + mLastAddedItem->getCookData().setSellPrice(v.x); gdt::getFlag_CookMaterialName0(&item_name, num_food); mLastAddedItem->setIngredient(0, item_name); @@ -791,7 +791,7 @@ void PauseMenuDataMgr::itemGet(const sead::SafeString& name, int value, if (modifier) { setItemModifier(mNewlyAddedItem, modifier); const auto add_type = modifier->flags.getDirect(); - const auto add_value = mNewlyAddedItem.getWeaponAddValue(); + const auto add_value = mNewlyAddedItem.getWeaponModifierValue(); sValues.last_added_weapon_add_type = add_type; sValues.last_added_weapon_add_value = add_value; } @@ -997,11 +997,11 @@ void PauseMenuDataMgr::saveToGameData(const sead::OffsetList& list) c break; ksys::gdt::setFlag_StaminaRecover( - {static_cast(item->getCookData().mStaminaRecoverX), - static_cast(item->getCookData().mStaminaRecoverY) * 30.0f / 30.0f}, + {static_cast(item->getCookData().mHealthRecover), + static_cast(item->getCookData().mEffectDuration) * 30.0f / 30.0f}, num_food); - ksys::gdt::setFlag_CookEffect0(item->getCookData().mCookEffect0, num_food); - ksys::gdt::setFlag_CookEffect1({f32(item->getCookData().mCookEffect1), 0.0}, num_food); + ksys::gdt::setFlag_CookEffect0(item->getCookData().mEffect, num_food); + ksys::gdt::setFlag_CookEffect1({f32(item->getCookData().mSellPrice), 0.0}, num_food); ksys::gdt::setFlag_CookMaterialName0(item->getIngredient(0), num_food); ksys::gdt::setFlag_CookMaterialName1(item->getIngredient(1), num_food); ksys::gdt::setFlag_CookMaterialName2(item->getIngredient(2), num_food); @@ -1036,12 +1036,12 @@ void PauseMenuDataMgr::setCookDataOnLastAddedItem(const uking::CookItem& cook_it if (!mLastAddedItem) return; - mLastAddedItem->getCookData().setStaminaRecoverY(cook_item.effect_time); - mLastAddedItem->getCookData().setStaminaRecoverX(cook_item.life_recover); - mLastAddedItem->getCookData().setCookEffect1(cook_item.sell_price); - const int y = cook_item.vitality_boost; - const CookEffectId x = cook_item.effect_id; - mLastAddedItem->getCookData().setCookEffect0({float(x), float(y)}); + mLastAddedItem->getCookData().setEffectDuration(cook_item.effect_time); + mLastAddedItem->getCookData().setHealthRecover(static_cast(cook_item.life_recover)); + mLastAddedItem->getCookData().setSellPrice(cook_item.sell_price); + const int level = int(cook_item.vitality_boost); + const CookEffectId effect_id = cook_item.effect_id; + mLastAddedItem->getCookData().setEffect({float(effect_id), float(level)}); for (s32 i = 0; i < cook_item.ingredients.size(); ++i) mLastAddedItem->setIngredient(i, cook_item.ingredients[i]); mLastAddedItem->sortIngredients(); @@ -1396,7 +1396,7 @@ bool PauseMenuDataMgr::getEquippedArrowType(sead::BufferedSafeString* name, int* int PauseMenuDataMgr::getArrowCount(const sead::SafeString& name) const { const auto lock = sead::makeScopedLock(mCritSection); - for (auto item = getItemHead(PouchCategory::Bow); item; item = nextItem(item)) { + for (auto* item = getItemHead(PouchCategory::Bow); item; item = nextItem(item)) { if (item->getType() > PouchItemType::Arrow) break; if (item->getType() == PouchItemType::Arrow && item->mInInventory && @@ -1599,7 +1599,7 @@ int PauseMenuDataMgr::countCookResults(const sead::SafeString& name, s32 effect_ continue; if (!info->hasTag(item->getName().cstr(), ksys::act::tags::CookResult)) continue; - if (check_effect_type && item->getCookData().mCookEffect0.x != effect_type) + if (check_effect_type && item->getCookData().getEffectId() != effect_type) continue; if (check_name && item->getName() != name) continue; @@ -1662,9 +1662,9 @@ void PauseMenuDataMgr::removeCookResult(const sead::SafeString& name, s32 effect const auto lock = sead::makeScopedLock(mCritSection); const auto& items = getItems(); - auto min_x = std::numeric_limits::max(); - auto min_y = std::numeric_limits::infinity(); - auto min_fx = std::numeric_limits::infinity(); + auto min_hp = std::numeric_limits::max(); + auto min_stam = std::numeric_limits::infinity(); + auto min_level = std::numeric_limits::infinity(); PouchItem* to_remove = nullptr; for (auto* item = getItemHead(PouchCategory::Food); item; item = items.next(item)) { @@ -1674,25 +1674,26 @@ void PauseMenuDataMgr::removeCookResult(const sead::SafeString& name, s32 effect continue; if (!info->hasTag(item->getName().cstr(), ksys::act::tags::CookResult)) continue; - if (item->getCookData().mCookEffect0.x != effect_type && check_effect) + if (item->getCookData().getEffectId() != effect_type && check_effect) continue; if (check_name && item->getName() != name) continue; - const auto y = f32(item->getCookData().mStaminaRecoverY) * 30.0f; - if (y < min_y) { - min_x = item->getCookData().mStaminaRecoverX; - min_y = y; + const auto stam = f32(item->getCookData().mEffectDuration) * 30.0f; + if (stam < min_stam) { + min_hp = item->getCookData().mHealthRecover; + min_stam = stam; to_remove = item; - min_fx = item->getCookData().mCookEffect0.y; - } else if (y == min_y) { - const auto x = item->getCookData().mStaminaRecoverX; - if (x < min_x) { - min_x = x; + min_level = item->getCookData().getEffectLevel(); + } else if (stam == min_stam) { + const auto hp = item->getCookData().mHealthRecover; + if (hp < min_hp) { + min_hp = hp; to_remove = item; - min_fx = item->getCookData().mCookEffect0.y; - } else if (check_effect && x == min_x && item->getCookData().mCookEffect0.y < min_fx) { - min_fx = item->getCookData().mCookEffect0.y; + min_level = item->getCookData().getEffectLevel(); + } else if (check_effect && hp == min_hp && + item->getCookData().getEffectLevel() < min_level) { + min_level = item->getCookData().getEffectLevel(); to_remove = item; } } @@ -1969,8 +1970,8 @@ static int doCompareWeapon(const PouchItem* lhs, const PouchItem* rhs, ksys::act if (power1 < power2) return 1; - const auto mod1 = getWeaponModifierSortKey(lhs->getWeaponAddFlags()); - const auto mod2 = getWeaponModifierSortKey(rhs->getWeaponAddFlags()); + const auto mod1 = getWeaponModifierSortKey(lhs->getWeaponModifier()); + const auto mod2 = getWeaponModifierSortKey(rhs->getWeaponModifier()); if (mod1 < mod2) return -1; if (mod1 > mod2) @@ -1995,8 +1996,8 @@ static int compareWeaponType1(const PouchItem* lhs, const PouchItem* rhs, static int getShieldGuardPower(const PouchItem* item, ksys::act::InfoData* data) { int power = ksys::act::getWeaponCommonGuardPower(data, item->getName().cstr()); - if (item->getWeaponAddFlags().isOn(act::WeaponModifier::AddGuard)) - power += item->getWeaponAddValue(); + if (item->getWeaponModifier().isOn(act::WeaponModifier::AddGuard)) + power += item->getWeaponModifierValue(); return power; } @@ -2009,8 +2010,8 @@ static int doCompareShield(const PouchItem* lhs, const PouchItem* rhs, ksys::act if (gp1 < gp2) return 1; - const int mod1 = getWeaponModifierSortKey(lhs->getWeaponAddFlags()); - const int mod2 = getWeaponModifierSortKey(rhs->getWeaponAddFlags()); + const int mod1 = getWeaponModifierSortKey(lhs->getWeaponModifier()); + const int mod2 = getWeaponModifierSortKey(rhs->getWeaponModifier()); // Lower is better if (mod1 < mod2) return -1; @@ -2116,8 +2117,8 @@ int compareFood(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData* if (e1 < e2) return 1; - const int st1 = lhs->getCookData().mStaminaRecoverX; - const int st2 = rhs->getCookData().mStaminaRecoverX; + const int st1 = lhs->getCookData().mHealthRecover; + const int st2 = rhs->getCookData().mHealthRecover; // Higher is better if (st1 > st2) return -1; diff --git a/src/Game/UI/uiPauseMenuDataMgr.h b/src/Game/UI/uiPauseMenuDataMgr.h index ebc3b3d17..ffd5a187e 100644 --- a/src/Game/UI/uiPauseMenuDataMgr.h +++ b/src/Game/UI/uiPauseMenuDataMgr.h @@ -11,6 +11,7 @@ #include #include #include +#include "Game/Cooking/cookManager.h" #include "KingSystem/Utils/Types.h" namespace al { @@ -150,24 +151,33 @@ struct CookTagInfo { class PouchItem { public: struct CookData { - f32 getStaminaRecoverValue() const { return f32(mStaminaRecoverY) * 30.0f; } - void setStaminaRecoverX(int x) { mStaminaRecoverX = x; } - void setStaminaRecoverY(int y) { mStaminaRecoverY = y; } - void setCookEffect1(int effect) { mCookEffect1 = effect; } - void setCookEffect0(const sead::Vector2f& effect) { mCookEffect0 = effect; } - - int mStaminaRecoverX; - int mStaminaRecoverY; - int mCookEffect1; - sead::Vector2f mCookEffect0; + f32 getStaminaRecoverValue() const { return f32(mEffectDuration) * 30.0f; } + void setHealthRecover(int hp) { mHealthRecover = hp; } + void setEffectDuration(int seconds) { mEffectDuration = seconds; } + void setSellPrice(int price) { mSellPrice = price; } + void setEffect(const sead::Vector2f& effect) { mEffect = effect; } + CookEffectId getEffect() const { return static_cast(mEffect.x); } + f32 getEffectId() const { return mEffect.x; } + f32 getEffectLevel() const { return mEffect.y; } + + int mHealthRecover; + int mEffectDuration; // for potions, in seconds + int mSellPrice; + + /// x - CookEffectId enum, but stored as f32 + /// y - level (1.0f, 2.0f, or 3.0f) + sead::Vector2f mEffect; }; struct WeaponData { - u32 mAddValue; - u32 b; - u32 mAddType; - u32 d; - u32 e; + u32 mModifierValue; + u32 mUnused; + u32 mModifier; + sead::Vector2f mEffectUnused; + + sead::TypedBitFlag getModifier() const { + return sead::TypedBitFlag{mModifier}; + } }; PouchItem(); @@ -198,26 +208,26 @@ class PouchItem { WeaponData& getWeaponData() { return mData.weapon; } const WeaponData& getWeaponData() const { return mData.weapon; } - sead::TypedBitFlag getWeaponAddFlags() const { + sead::TypedBitFlag getWeaponModifier() const { if (!isWeapon()) return {}; - return sead::TypedBitFlag{mData.weapon.mAddType}; + return mData.weapon.getModifier(); } - u32 getWeaponAddValue() const { + u32 getWeaponModifierValue() const { if (!isWeapon()) return 0; - return mData.weapon.mAddValue; + return mData.weapon.mModifierValue; } - void setWeaponAddType(u32 type) { + void setWeaponModifier(u32 type) { if (isWeapon()) - mData.weapon.mAddType = type; + mData.weapon.mModifier = type; } - void setWeaponAddValue(u32 value) { + void setWeaponModifierValue(u32 value) { if (isWeapon()) - mData.weapon.mAddValue = value; + mData.weapon.mModifierValue = value; } static auto getListNodeOffset() { return offsetof(PouchItem, mListNode); }