Browse Source

Merge eda403eabf into 5a08031caf

pull/8410/merge
Eric Robinson 4 days ago committed by GitHub
parent
commit
94cc8e6737
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 52
      Source/cursor.cpp

52
Source/cursor.cpp

@ -63,6 +63,7 @@ namespace {
/** Cursor images CEL */
OptionalOwnedClxSpriteList pCursCels;
OptionalOwnedClxSpriteList pCursCels2;
OptionalOwnedClxSpriteList pCursCelsMod;
OptionalOwnedClxSpriteList *HalfSizeItemSprites;
OptionalOwnedClxSpriteList *HalfSizeItemSpritesRed;
@ -441,12 +442,17 @@ void InitCursor()
#ifdef UNPACKED_MPQS
pCursCels = LoadClx("data\\inv\\objcurs.clx");
pCursCels2 = LoadOptionalClx("data\\inv\\objcurs2.clx");
pCursCelsMod = LoadOptionalClx("data\\inv\\objcursmod.clx");
#else
pCursCels = LoadCel("data\\inv\\objcurs", ReadWidths(FindAsset("data\\inv\\objcurs-widths.txt")).data());
AssetRef ref = FindAsset("data\\inv\\objcurs2-widths.txt");
if (ref.ok()) {
pCursCels2 = LoadOptionalCel("data\\inv\\objcurs2", ReadWidths(std::move(ref)).data());
}
ref = FindAsset("data\\inv\\objcursmod-widths.txt");
if (ref.ok()) {
pCursCelsMod = LoadOptionalCel("data\\inv\\objcursmod", ReadWidths(std::move(ref)).data());
}
#endif
ClearCursor();
}
@ -455,19 +461,31 @@ void FreeCursor()
{
pCursCels = std::nullopt;
pCursCels2 = std::nullopt;
pCursCelsMod = std::nullopt;
ClearCursor();
}
ClxSprite GetInvItemSprite(int cursId)
{
assert(cursId > 0);
const size_t numSprites = pCursCels->numSprites();
if (static_cast<size_t>(cursId) <= numSprites) {
return (*pCursCels)[cursId - 1];
const size_t n1 = pCursCels->numSprites();
size_t idx = static_cast<size_t>(cursId);
if (idx <= n1)
return (*pCursCels)[idx - 1];
idx -= n1;
if (pCursCels2.has_value()) {
const size_t n2 = pCursCels2->numSprites();
if (idx <= n2)
return (*pCursCels2)[idx - 1];
idx -= n2;
}
assert(pCursCels2.has_value());
assert(cursId - numSprites <= pCursCels2->numSprites());
return (*pCursCels2)[cursId - numSprites - 1];
assert(pCursCelsMod.has_value());
const size_t n3 = pCursCelsMod->numSprites();
assert(idx <= n3);
return (*pCursCelsMod)[idx - 1];
}
Size GetInvItemSize(int cursId)
@ -490,8 +508,12 @@ void CreateHalfSizeItemSprites()
{
if (HalfSizeItemSprites != nullptr)
return;
const uint32_t numInvItems = pCursCels->numSprites() - (static_cast<uint32_t>(CURSOR_FIRSTITEM) - 1)
+ (pCursCels2.has_value() ? pCursCels2->numSprites() : 0);
const uint32_t baseItemCount = pCursCels->numSprites() - (static_cast<uint32_t>(CURSOR_FIRSTITEM) - 1);
const uint32_t hfItemCount = pCursCels2.has_value() ? static_cast<uint32_t>(pCursCels2->numSprites()) : 0;
const uint32_t modItemCount = pCursCelsMod.has_value() ? static_cast<uint32_t>(pCursCelsMod->numSprites()) : 0;
const uint32_t numInvItems = baseItemCount + hfItemCount + modItemCount;
HalfSizeItemSprites = new OptionalOwnedClxSpriteList[numInvItems];
HalfSizeItemSpritesRed = new OptionalOwnedClxSpriteList[numInvItems];
const uint8_t *redTrn = GetInfravisionTRN();
@ -526,14 +548,22 @@ void CreateHalfSizeItemSprites()
};
size_t outputIndex = 0;
for (size_t i = static_cast<int>(CURSOR_FIRSTITEM) - 1, n = pCursCels->numSprites(); i < n; ++i, ++outputIndex) {
for (size_t i = static_cast<size_t>(static_cast<int>(CURSOR_FIRSTITEM) - 1), n = pCursCels->numSprites(); i < n; ++i, ++outputIndex) {
createHalfSize((*pCursCels)[i], outputIndex);
}
if (pCursCels2.has_value()) {
for (size_t i = 0, n = pCursCels2->numSprites(); i < n; ++i, ++outputIndex) {
for (size_t i = 0, n = pCursCels2->numSprites(); i < n; ++i, ++outputIndex)
createHalfSize((*pCursCels2)[i], outputIndex);
}
}
if (pCursCelsMod.has_value()) {
for (size_t i = 0, n = pCursCelsMod->numSprites(); i < n; ++i, ++outputIndex)
createHalfSize((*pCursCelsMod)[i], outputIndex);
}
assert(outputIndex == numInvItems);
}
void FreeHalfSizeItemSprites()

Loading…
Cancel
Save