Skip to content

Commit 74e3f87

Browse files
committed
Simplified TextureAsset constructors.
This avoids the most vexing parse problem.
1 parent 230b510 commit 74e3f87

21 files changed

Lines changed: 96 additions & 100 deletions

OpenTESArena/src/Assets/TextureAsset.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
#include "TextureAsset.h"
22

3-
TextureAsset::TextureAsset(std::string &&filename, const std::optional<int> &index)
4-
: filename(std::move(filename)), index(index) { }
5-
6-
TextureAsset::TextureAsset(std::string &&filename)
7-
: filename(std::move(filename)), index(std::nullopt) { }
8-
9-
TextureAsset::TextureAsset() { }
10-
113
bool TextureAsset::operator==(const TextureAsset &other) const
124
{
135
return (this->filename == other.filename) && (this->index == other.index);

OpenTESArena/src/Assets/TextureAsset.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
#include <optional>
44
#include <string>
55

6-
// General-purpose reference for a single texture. The index is set if the filename points to a
7-
// sequence of individual textures.
6+
// Points to a single texture on the file system. If the texture is part of a sequence of images,
7+
// its position is stored in the index.
88
struct TextureAsset
99
{
1010
std::string filename;
11-
std::optional<int> index; // Points into sequential texture file.
11+
std::optional<int> index;
1212

13-
TextureAsset(std::string &&filename, const std::optional<int> &index);
14-
TextureAsset(std::string &&filename);
15-
TextureAsset();
13+
constexpr TextureAsset(const std::string &filename, const std::optional<int> &index)
14+
: filename(filename), index(index) { }
15+
16+
constexpr TextureAsset(const std::string &filename)
17+
: filename(filename) { }
18+
19+
constexpr TextureAsset() { }
1620

1721
bool operator==(const TextureAsset &other) const;
1822
bool operator!=(const TextureAsset &other) const;

OpenTESArena/src/Assets/TextureUtils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ Buffer<TextureAsset> TextureUtils::makeTextureAssets(const std::string &filename
278278
Buffer<TextureAsset> textureAssets(textureCount);
279279
for (int i = 0; i < textureCount; i++)
280280
{
281-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), i);
281+
TextureAsset textureAsset(textureFileMetadata.getFilename(), i);
282282
textureAssets.set(i, std::move(textureAsset));
283283
}
284284

OpenTESArena/src/Entities/ArenaAnimUtils.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ namespace ArenaAnimUtils
153153
{
154154
const double width = MakeStaticKeyframeDimension(textureFileMetadata.getWidth(i), dimensionModifier);
155155
const double height = MakeStaticKeyframeDimension(textureFileMetadata.getHeight(i), dimensionModifier);
156-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), i);
156+
TextureAsset textureAsset(textureFileMetadata.getFilename(), i);
157157
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
158158
}
159159

@@ -206,7 +206,7 @@ namespace ArenaAnimUtils
206206
MakeCreatureKeyframeDimensions(creatureIndex, textureFileMetadata.getWidth(correctedFrameIndex),
207207
textureFileMetadata.getHeight(correctedFrameIndex), exeData, &width, &height);
208208

209-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), correctedFrameIndex);
209+
TextureAsset textureAsset(textureFileMetadata.getFilename(), correctedFrameIndex);
210210
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
211211
}
212212

@@ -310,7 +310,7 @@ namespace ArenaAnimUtils
310310
double width, height;
311311
MakeHumanKeyframeDimensions(textureFileMetadata.getWidth(frameIndex), textureFileMetadata.getHeight(frameIndex), &width, &height);
312312

313-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), frameIndex);
313+
TextureAsset textureAsset(textureFileMetadata.getFilename(), frameIndex);
314314
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
315315
}
316316

@@ -385,7 +385,7 @@ namespace ArenaAnimUtils
385385
MakeCreatureKeyframeDimensions(creatureIndex, textureFileMetadata.getWidth(frameIndex),
386386
textureFileMetadata.getHeight(frameIndex), exeData, &width, &height);
387387

388-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), frameIndex);
388+
TextureAsset textureAsset(textureFileMetadata.getFilename(), frameIndex);
389389
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
390390
}
391391

@@ -456,7 +456,7 @@ namespace ArenaAnimUtils
456456
double width, height;
457457
MakeHumanKeyframeDimensions(textureFileMetadata.getWidth(i), textureFileMetadata.getHeight(i), &width, &height);
458458

459-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), i);
459+
TextureAsset textureAsset(textureFileMetadata.getFilename(), i);
460460
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
461461
}
462462

@@ -505,7 +505,7 @@ namespace ArenaAnimUtils
505505
ArenaAnimUtils::MakeCreatureKeyframeDimensions(creatureIndex, textureFileMetadata.getWidth(i),
506506
textureFileMetadata.getHeight(i), exeData, &width, &height);
507507

508-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), i);
508+
TextureAsset textureAsset(textureFileMetadata.getFilename(), i);
509509
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
510510
}
511511

@@ -537,7 +537,7 @@ namespace ArenaAnimUtils
537537

538538
const double width = MakeDefaultKeyframeDimension(textureFileMetadata.getWidth(0));
539539
const double height = MakeDefaultKeyframeDimension(textureFileMetadata.getHeight(0));
540-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()));
540+
TextureAsset textureAsset(textureFileMetadata.getFilename());
541541
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
542542

543543
EntityAnimationDefinitionState &animDefState = outAnimDef->states[stateIndex];
@@ -590,7 +590,7 @@ namespace ArenaAnimUtils
590590
MakeCitizenKeyframeDimensions(textureFileMetadata.getWidth(correctedFrameIndex),
591591
textureFileMetadata.getHeight(correctedFrameIndex), &width, &height);
592592

593-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), correctedFrameIndex);
593+
TextureAsset textureAsset(textureFileMetadata.getFilename(), correctedFrameIndex);
594594
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
595595
}
596596

@@ -1302,7 +1302,7 @@ bool ArenaAnimUtils::tryMakeVfxAnim(const std::string &animFilename, bool isLoop
13021302
double width, height;
13031303
MakeVfxKeyframeDimensions(textureFileMetadata.getWidth(i), textureFileMetadata.getHeight(i), &width, &height);
13041304

1305-
TextureAsset textureAsset(std::string(textureFileMetadata.getFilename()), i);
1305+
TextureAsset textureAsset(textureFileMetadata.getFilename(), i);
13061306
outAnimDef->addKeyframe(keyframeListIndex, std::move(textureAsset), width, height);
13071307
}
13081308

OpenTESArena/src/Interface/AutomapUiMVC.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ WorldInt2 AutomapUiModel::makeRelativeWildOrigin(const WorldInt2 &voxel, SNInt g
5959

6060
TextureAsset AutomapUiView::getCursorTextureAsset()
6161
{
62-
return TextureAsset(std::string(ArenaTextureName::QuillCursor));
62+
return TextureAsset(ArenaTextureName::QuillCursor);
6363
}
6464

6565
TextureAsset AutomapUiView::getCursorPaletteTextureAsset()
6666
{
67-
return TextureAsset(std::string(ArenaTextureName::Automap));
67+
return TextureAsset(ArenaTextureName::Automap);
6868
}
6969

7070
const Color &AutomapUiView::getPixelColor(const VoxelTraitsDefinition &floorDef, const VoxelTraitsDefinition &wallDef,

OpenTESArena/src/Interface/CharacterCreationUiMVC.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ std::string ChooseAttributesUiModel::getAppearanceText(Game &game)
679679

680680
TextureAsset CharacterCreationUiView::getNightSkyTextureAsset()
681681
{
682-
return TextureAsset(std::string(ArenaTextureName::CharacterCreation));
682+
return TextureAsset(ArenaTextureName::CharacterCreation);
683683
}
684684

685685
UiTextureID CharacterCreationUiView::allocNightSkyTexture(TextureManager &textureManager, Renderer &renderer)
@@ -764,7 +764,7 @@ UiListBoxInitInfo ChooseClassUiView::makeListBoxProperties(const FontLibrary &fo
764764

765765
TextureAsset ChooseClassUiView::getListBoxTextureAsset()
766766
{
767-
return TextureAsset(std::string(ArenaTextureName::PopUp2));
767+
return TextureAsset(ArenaTextureName::PopUp2);
768768
}
769769

770770
UiTextureID ChooseClassUiView::allocPopUpTexture(TextureManager &textureManager, Renderer &renderer)
@@ -783,12 +783,12 @@ UiTextureID ChooseClassUiView::allocPopUpTexture(TextureManager &textureManager,
783783

784784
TextureAsset ChooseRaceUiView::getBackgroundTextureAsset()
785785
{
786-
return TextureAsset(std::string(ArenaTextureName::RaceSelect));
786+
return TextureAsset(ArenaTextureName::RaceSelect);
787787
}
788788

789789
TextureAsset ChooseRaceUiView::getNoExitTextureAsset()
790790
{
791-
return TextureAsset(std::string(ArenaTextureName::NoExit));
791+
return TextureAsset(ArenaTextureName::NoExit);
792792
}
793793

794794
Rect ChooseRaceUiView::getProvinceConfirmTitleTextBoxRect(const std::string_view text, const FontLibrary &fontLibrary)
@@ -1049,8 +1049,8 @@ TextureAsset ChooseAttributesUiView::getBodyTextureAsset(Game &game)
10491049
const bool isMale = charCreationState.male;
10501050
const int raceID = charCreationState.raceIndex;
10511051

1052-
std::string bodyFilename = ArenaPortraitUtils::getBody(isMale, raceID);
1053-
return TextureAsset(std::move(bodyFilename));
1052+
const std::string bodyFilename = ArenaPortraitUtils::getBody(isMale, raceID);
1053+
return TextureAsset(bodyFilename);
10541054
}
10551055

10561056
Buffer<TextureAsset> ChooseAttributesUiView::getHeadTextureAssets(Game &game)
@@ -1076,17 +1076,17 @@ TextureAsset ChooseAttributesUiView::getShirtTextureAsset(Game &game)
10761076
const CharacterClassDefinition &charClassDef = charClassLibrary.getDefinition(charClassDefID);
10771077
const bool isMagic = charClassDef.castsMagic;
10781078

1079-
std::string shirtFilename = ArenaPortraitUtils::getShirt(isMale, isMagic);
1080-
return TextureAsset(std::move(shirtFilename));
1079+
const std::string shirtFilename = ArenaPortraitUtils::getShirt(isMale, isMagic);
1080+
return TextureAsset(shirtFilename);
10811081
}
10821082

10831083
TextureAsset ChooseAttributesUiView::getPantsTextureAsset(Game &game)
10841084
{
10851085
const CharacterCreationState &charCreationState = game.getCharacterCreationState();
10861086
const bool isMale = charCreationState.male;
10871087

1088-
std::string pantsFilename = ArenaPortraitUtils::getPants(isMale);
1089-
return TextureAsset(std::move(pantsFilename));
1088+
const std::string pantsFilename = ArenaPortraitUtils::getPants(isMale);
1089+
return TextureAsset(pantsFilename);
10901090
}
10911091

10921092
UiTextureID ChooseAttributesUiView::allocBodyTexture(Game &game)

OpenTESArena/src/Interface/CharacterSheetUiMVC.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Int2 CharacterSheetUiView::getPantsOffset(Game &game)
160160

161161
TextureAsset CharacterSheetUiView::getPaletteTextureAsset()
162162
{
163-
return TextureAsset(std::string(ArenaPaletteName::CharSheet));
163+
return TextureAsset(ArenaPaletteName::CharSheet);
164164
}
165165

166166
TextureAsset CharacterSheetUiView::getBodyTextureAsset(Game &game)
@@ -188,11 +188,11 @@ TextureAsset CharacterSheetUiView::getHeadTextureAsset(Game &game)
188188

189189
if (player.male)
190190
{
191-
return TextureAsset(std::string(characterRaceDefinition.maleCharSheetHeadsFilename), headIndex);
191+
return TextureAsset(characterRaceDefinition.maleCharSheetHeadsFilename, headIndex);
192192
}
193193
else
194194
{
195-
return TextureAsset(std::string(characterRaceDefinition.femaleCharSheetHeadsFilename), headIndex);
195+
return TextureAsset(characterRaceDefinition.femaleCharSheetHeadsFilename, headIndex);
196196
}
197197
}
198198

@@ -206,17 +206,17 @@ TextureAsset CharacterSheetUiView::getShirtTextureAsset(Game &game)
206206
const CharacterClassDefinition &charClassDef = charClassLibrary.getDefinition(charClassDefID);
207207
const bool isMagic = charClassDef.castsMagic;
208208

209-
std::string shirtFilename = ArenaPortraitUtils::getShirt(isMale, isMagic);
210-
return TextureAsset(std::move(shirtFilename));
209+
const std::string shirtFilename = ArenaPortraitUtils::getShirt(isMale, isMagic);
210+
return TextureAsset(shirtFilename);
211211
}
212212

213213
TextureAsset CharacterSheetUiView::getPantsTextureAsset(Game &game)
214214
{
215215
const Player &player = game.player;
216216
const bool isMale = player.male;
217217

218-
std::string pantsFilename = ArenaPortraitUtils::getPants(isMale);
219-
return TextureAsset(std::move(pantsFilename));
218+
const std::string pantsFilename = ArenaPortraitUtils::getPants(isMale);
219+
return TextureAsset(pantsFilename);
220220
}
221221

222222
UiTextureID CharacterSheetUiView::allocBodyTexture(Game &game)
@@ -289,7 +289,7 @@ UiTextureID CharacterSheetUiView::allocHeadTexture(Game &game)
289289

290290
UiTextureID CharacterEquipmentUiView::allocUpDownButtonTexture(TextureManager &textureManager, Renderer &renderer)
291291
{
292-
const TextureAsset upDownTextureAsset = TextureAsset(std::string(ArenaTextureName::UpDown));
292+
const TextureAsset upDownTextureAsset(ArenaTextureName::UpDown);
293293
const TextureAsset paletteTextureAsset = CharacterSheetUiView::getPaletteTextureAsset();
294294

295295
UiTextureID textureID;

OpenTESArena/src/Interface/CinematicUiState.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ void CinematicUiState::init(Game &game)
4848
}
4949

5050
const TextureFileMetadata &textureFileMetadata = textureManager.getMetadataHandle(*metadataID);
51-
const TextureAsset paletteTextureAsset = TextureAsset(std::string(paletteName));
51+
const TextureAsset paletteTextureAsset(paletteName);
5252

5353
const int videoFrameCount = textureFileMetadata.getTextureCount();
5454
this->videoTextureIDs.init(videoFrameCount);
5555
for (int i = 0; i < videoFrameCount; i++)
5656
{
57-
const TextureAsset textureAsset = TextureAsset(std::string(sequenceName), i);
57+
const TextureAsset textureAsset(sequenceName, i);
5858

5959
UiTextureID textureID;
6060
if (!TextureUtils::tryAllocUiTexture(textureAsset, paletteTextureAsset, textureManager, renderer, &textureID))

OpenTESArena/src/Interface/CommonUiMVC.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
UiTextureID CommonUiView::allocDefaultCursorTexture(TextureManager &textureManager, Renderer &renderer)
1111
{
12-
const TextureAsset paletteTextureAsset = TextureAsset(std::string(ArenaPaletteName::Default));
13-
const TextureAsset textureAsset = TextureAsset(std::string(ArenaTextureName::SwordCursor));
12+
const TextureAsset paletteTextureAsset(ArenaPaletteName::Default);
13+
const TextureAsset textureAsset(ArenaTextureName::SwordCursor);
1414

1515
UiTextureID textureID;
1616
if (!TextureUtils::tryAllocUiTexture(textureAsset, paletteTextureAsset, textureManager, renderer, &textureID))

OpenTESArena/src/Interface/GameWorldUiMVC.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ Int2 GameWorldUiView::getNoMagicTexturePosition()
630630

631631
int GameWorldUiView::getKeyTextureCount(TextureManager &textureManager)
632632
{
633-
const TextureAsset &textureAsset = GameWorldUiView::getKeyTextureAsset(0);
633+
const TextureAsset textureAsset = GameWorldUiView::getKeyTextureAsset(0);
634634
std::optional<TextureFileMetadataID> textureFileMetadataID = textureManager.tryGetMetadataID(textureAsset.filename.c_str());
635635
if (!textureFileMetadataID.has_value())
636636
{
@@ -799,18 +799,18 @@ Int2 GameWorldUiView::getNativeWindowCenter(const Window &window)
799799

800800
TextureAsset GameWorldUiView::getPaletteTextureAsset()
801801
{
802-
return TextureAsset(std::string(ArenaPaletteName::Default));
802+
return TextureAsset(ArenaPaletteName::Default);
803803
}
804804

805805
TextureAsset GameWorldUiView::getGameWorldInterfaceTextureAsset()
806806
{
807-
return TextureAsset(std::string(ArenaTextureName::GameWorldInterface));
807+
return TextureAsset(ArenaTextureName::GameWorldInterface);
808808
}
809809

810810
TextureAsset GameWorldUiView::getStatusGradientTextureAsset(StatusGradientType gradientType)
811811
{
812812
const int gradientID = static_cast<int>(gradientType);
813-
return TextureAsset(std::string(ArenaTextureName::StatusGradients), gradientID);
813+
return TextureAsset(ArenaTextureName::StatusGradients, gradientID);
814814
}
815815

816816
TextureAsset GameWorldUiView::getPlayerPortraitTextureAsset(bool isMale, int raceID, int portraitID)
@@ -820,48 +820,48 @@ TextureAsset GameWorldUiView::getPlayerPortraitTextureAsset(bool isMale, int rac
820820

821821
if (isMale)
822822
{
823-
return TextureAsset(std::string(characterRaceDefinition.maleGameUiHeadsFilename), portraitID);
823+
return TextureAsset(characterRaceDefinition.maleGameUiHeadsFilename, portraitID);
824824
}
825825
else
826826
{
827-
return TextureAsset(std::string(characterRaceDefinition.femaleGameUiHeadsFilename), portraitID);
827+
return TextureAsset(characterRaceDefinition.femaleGameUiHeadsFilename, portraitID);
828828
}
829829
}
830830

831831
TextureAsset GameWorldUiView::getNoMagicTextureAsset()
832832
{
833-
return TextureAsset(std::string(ArenaTextureName::NoSpell));
833+
return TextureAsset(ArenaTextureName::NoSpell);
834834
}
835835

836836
TextureAsset GameWorldUiView::getWeaponAnimTextureAsset(const std::string &weaponFilename, int index)
837837
{
838838
// @todo: this is obsoleted by WeaponAnimationDefinition
839-
return TextureAsset(std::string(weaponFilename), index);
839+
return TextureAsset(weaponFilename, index);
840840
}
841841

842842
TextureAsset GameWorldUiView::getCompassFrameTextureAsset()
843843
{
844-
return TextureAsset(std::string(ArenaTextureName::CompassFrame));
844+
return TextureAsset(ArenaTextureName::CompassFrame);
845845
}
846846

847847
TextureAsset GameWorldUiView::getCompassSliderTextureAsset()
848848
{
849-
return TextureAsset(std::string(ArenaTextureName::CompassSlider));
849+
return TextureAsset(ArenaTextureName::CompassSlider);
850850
}
851851

852852
TextureAsset GameWorldUiView::getArrowCursorTextureAsset(int cursorIndex)
853853
{
854-
return TextureAsset(std::string(ArenaTextureName::ArrowCursors), cursorIndex);
854+
return TextureAsset(ArenaTextureName::ArrowCursors, cursorIndex);
855855
}
856856

857857
TextureAsset GameWorldUiView::getKeyTextureAsset(int keyIndex)
858858
{
859-
return TextureAsset(std::string(ArenaTextureName::DoorKeys), keyIndex);
859+
return TextureAsset(ArenaTextureName::DoorKeys, keyIndex);
860860
}
861861

862862
TextureAsset GameWorldUiView::getContainerInventoryTextureAsset()
863863
{
864-
return TextureAsset(std::string(ArenaTextureName::ContainerInventory));
864+
return TextureAsset(ArenaTextureName::ContainerInventory);
865865
}
866866

867867
UiTextureID GameWorldUiView::allocStatusBarsTexture(TextureManager &textureManager, Renderer &renderer)

0 commit comments

Comments
 (0)