Skip to content

Commit

Permalink
Added ArenaItemUtils.
Browse files Browse the repository at this point in the history
  • Loading branch information
afritz1 committed Nov 22, 2024
1 parent 7a4a30a commit 0afc0c5
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
1 change: 1 addition & 0 deletions OpenTESArena/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ SET(TES_INTERFACE
"${SRC_ROOT}/Interface/WorldMapUiView.h")

SET(TES_ITEMS
"${SRC_ROOT}/Items/ArenaItemUtils.h"
"${SRC_ROOT}/Items/ItemConditionLibrary.cpp"
"${SRC_ROOT}/Items/ItemConditionLibrary.h"
"${SRC_ROOT}/Items/ItemDefinition.cpp"
Expand Down
12 changes: 12 additions & 0 deletions OpenTESArena/src/Items/ArenaItemUtils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef ARENA_ITEM_UTILS_H
#define ARENA_ITEM_UTILS_H

namespace ArenaItemUtils
{
// Converts Arena weight units to kilograms.
constexpr double KilogramsDivisor = 256.0;

constexpr int RangedWeaponIDs[] = { 16, 17 };
}

#endif
24 changes: 13 additions & 11 deletions OpenTESArena/src/Items/ItemLibrary.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
#include <algorithm>

#include "ArenaItemUtils.h"
#include "ItemLibrary.h"
#include "../Assets/ExeData.h"

#include "components/debug/Debug.h"

namespace
{
constexpr double KilogramsDivisor = 256.0; // @todo: move this to some ArenaItemUtils
}

void ItemLibrary::init(const ExeData &exeData)
{
const BufferView<const std::string> accessoryNames = exeData.equipment.enhancementItemNames;
Expand All @@ -19,6 +17,7 @@ void ItemLibrary::init(const ExeData &exeData)
this->itemDefs.emplace_back(std::move(itemDef));
}

constexpr double kgDivisor = ArenaItemUtils::KilogramsDivisor;
constexpr int armorCount = 7; // Ignores shields at end.
const BufferView<const std::string> leatherArmorNames(exeData.equipment.leatherArmorNames.data(), armorCount);
const BufferView<const std::string> chainArmorNames(exeData.equipment.chainArmorNames.data(), armorCount);
Expand All @@ -33,7 +32,7 @@ void ItemLibrary::init(const ExeData &exeData)
itemDef.init(ItemType::Armor);

const int weightOriginal = leatherArmorWeights[i];
const double weightKg = static_cast<double>(weightOriginal) / KilogramsDivisor;
const double weightKg = static_cast<double>(weightOriginal) / kgDivisor;
itemDef.armor.initLeather(leatherArmorNames[i].c_str(), weightKg);
this->itemDefs.emplace_back(std::move(itemDef));
}
Expand All @@ -44,7 +43,7 @@ void ItemLibrary::init(const ExeData &exeData)
itemDef.init(ItemType::Armor);

const int weightOriginal = chainArmorWeights[i];
const double weightKg = static_cast<double>(weightOriginal) / KilogramsDivisor;
const double weightKg = static_cast<double>(weightOriginal) / kgDivisor;
itemDef.armor.initChain(chainArmorNames[i].c_str(), weightKg);
this->itemDefs.emplace_back(std::move(itemDef));
}
Expand All @@ -55,7 +54,7 @@ void ItemLibrary::init(const ExeData &exeData)
itemDef.init(ItemType::Armor);

const int weightOriginal = plateArmorWeights[i];
const double weightKg = static_cast<double>(weightOriginal) / KilogramsDivisor;
const double weightKg = static_cast<double>(weightOriginal) / kgDivisor;
itemDef.armor.initPlate(armorNames[i].c_str(), weightKg, -1); // @todo: for loop over all materials
this->itemDefs.emplace_back(std::move(itemDef));
}
Expand Down Expand Up @@ -88,7 +87,7 @@ void ItemLibrary::init(const ExeData &exeData)
itemDef.init(ItemType::Shield);

const int weightOriginal = shieldWeights[i];
const double weightKg = static_cast<double>(weightOriginal) / KilogramsDivisor;
const double weightKg = static_cast<double>(weightOriginal) / kgDivisor;
itemDef.shield.init(shieldNames[i].c_str(), weightKg);
this->itemDefs.emplace_back(std::move(itemDef));
}
Expand All @@ -114,13 +113,16 @@ void ItemLibrary::init(const ExeData &exeData)

const char *weaponName = weaponNames[i].c_str();
const int weightOriginal = weaponWeights[i];
const double weightKg = static_cast<double>(weightOriginal) / KilogramsDivisor;
const double weightKg = static_cast<double>(weightOriginal) / kgDivisor;
const int basePrice = weaponBasePrices[i];
const int damageMin = weaponDamages[i].first;
const int damageMax = weaponDamages[i].second;
const int handCount = weaponHandednesses[i];
const ItemMaterialDefinitionID materialDefID = -1; // @todo: for loop over all materials
const bool isRanged = (i == 16) || (i == 17);

const auto rangedWeaponIDsBegin = std::begin(ArenaItemUtils::RangedWeaponIDs);
const auto rangedWeaponIDsEnd = std::end(ArenaItemUtils::RangedWeaponIDs);
const bool isRanged = std::find(rangedWeaponIDsBegin, rangedWeaponIDsEnd, i) != rangedWeaponIDsEnd;

if (!isRanged)
{
Expand Down

0 comments on commit 0afc0c5

Please sign in to comment.