From 05e8542a799f78094766bdf7a67df7837a1cf168 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 20 Feb 2025 13:09:38 +0000 Subject: [PATCH] Fix corrupted image of university --- client/widgets/Images.cpp | 16 +++++++++++++--- client/widgets/Images.h | 3 ++- client/windows/GUIClasses.cpp | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/client/widgets/Images.cpp b/client/widgets/Images.cpp index 4757e5736..35dc4ded4 100644 --- a/client/widgets/Images.cpp +++ b/client/widgets/Images.cpp @@ -32,6 +32,16 @@ #include "../../lib/texts/CGeneralTextHandler.h" //for Unicode related stuff #include "../../lib/CRandomGenerator.h" +static EImageBlitMode getModeForFlags( uint8_t flags) +{ + if (flags & CCreatureAnim::CREATURE_MODE) + return EImageBlitMode::WITH_SHADOW_AND_SELECTION; + if (flags & CCreatureAnim::MAP_OBJECT_MODE) + return EImageBlitMode::WITH_SHADOW; + + return EImageBlitMode::COLORKEY; +} + CPicture::CPicture(std::shared_ptr image, const Point & position) : bg(image) , needRefresh(false) @@ -195,12 +205,12 @@ CAnimImage::CAnimImage(const AnimationPath & name, size_t Frame, size_t Group, i { pos.x += x; pos.y += y; - anim = GH.renderHandler().loadAnimation(name, (Flags & CCreatureAnim::CREATURE_MODE) ? EImageBlitMode::WITH_SHADOW_AND_SELECTION: EImageBlitMode::COLORKEY); + anim = GH.renderHandler().loadAnimation(name, getModeForFlags(Flags)); init(); } CAnimImage::CAnimImage(const AnimationPath & name, size_t Frame, Rect targetPos, size_t Group, ui8 Flags): - anim(GH.renderHandler().loadAnimation(name, (Flags & CCreatureAnim::CREATURE_MODE) ? EImageBlitMode::WITH_SHADOW_AND_SELECTION : EImageBlitMode::COLORKEY)), + anim(GH.renderHandler().loadAnimation(name, getModeForFlags(Flags))), frame(Frame), group(Group), flags(Flags), @@ -318,7 +328,7 @@ bool CAnimImage::isPlayerColored() const } CShowableAnim::CShowableAnim(int x, int y, const AnimationPath & name, ui8 Flags, ui32 frameTime, size_t Group, uint8_t alpha): - anim(GH.renderHandler().loadAnimation(name, (Flags & CREATURE_MODE) ? EImageBlitMode::WITH_SHADOW_AND_SELECTION : EImageBlitMode::COLORKEY)), + anim(GH.renderHandler().loadAnimation(name, getModeForFlags(Flags))), group(Group), frame(0), first(0), diff --git a/client/widgets/Images.h b/client/widgets/Images.h index 123bf3dac..6f4a9c950 100644 --- a/client/widgets/Images.h +++ b/client/widgets/Images.h @@ -151,7 +151,8 @@ public: BASE=1, //base frame will be blitted before current one HORIZONTAL_FLIP=2, //TODO: will be displayed rotated VERTICAL_FLIP=4, //TODO: will be displayed rotated - CREATURE_MODE=8, // use alpha channel for images with palette. Required for creatures in battle and map objects + CREATURE_MODE=8, // use alpha channel for images with palette. Required for creatures in battle + MAP_OBJECT_MODE=16, // use alpha channel for images with palette. Required for map objects PLAY_ONCE=32 //play animation only once and stop at last frame }; protected: diff --git a/client/windows/GUIClasses.cpp b/client/windows/GUIClasses.cpp index 52e283c74..d9c5a204d 100644 --- a/client/windows/GUIClasses.cpp +++ b/client/windows/GUIClasses.cpp @@ -749,7 +749,7 @@ CShipyardWindow::CShipyardWindow(const TResources & cost, int state, BoatId boat AnimationPath boatFilename = boatConstructor->getBoatAnimationName(); Point waterCenter = Point(bgWater->pos.x+bgWater->pos.w/2, bgWater->pos.y+bgWater->pos.h/2); - bgShip = std::make_shared(120, 96, boatFilename, CShowableAnim::CREATURE_MODE, 100, 7); + bgShip = std::make_shared(120, 96, boatFilename, CShowableAnim::MAP_OBJECT_MODE, 100, 7); bgShip->center(waterCenter); bgWater->needRefresh = true; } @@ -953,7 +953,7 @@ CUniversityWindow::CUniversityWindow(const CGHeroInstance * _hero, BuildingID bu } else if(auto uni = dynamic_cast(_market); uni->appearance) { - titlePic = std::make_shared(uni->appearance->animationFile, 0, 0, 0, 0, CShowableAnim::CREATURE_MODE); + titlePic = std::make_shared(uni->appearance->animationFile, 0, 0, 0, 0, CShowableAnim::MAP_OBJECT_MODE); titleStr = uni->getObjectName(); speechStr = uni->getSpeechTranslated(); }