1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-08 22:26:51 +02:00

Merge pull request #5454 from IvanSavenko/university_fix

Fix corrupted image of university
This commit is contained in:
Ivan Savenko
2025-02-20 15:43:58 +02:00
committed by GitHub
3 changed files with 17 additions and 6 deletions

View File

@@ -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<IImage> 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),

View File

@@ -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:

View File

@@ -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<CShowableAnim>(120, 96, boatFilename, CShowableAnim::CREATURE_MODE, 100, 7);
bgShip = std::make_shared<CShowableAnim>(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<const CGUniversity *>(_market); uni->appearance)
{
titlePic = std::make_shared<CAnimImage>(uni->appearance->animationFile, 0, 0, 0, 0, CShowableAnim::CREATURE_MODE);
titlePic = std::make_shared<CAnimImage>(uni->appearance->animationFile, 0, 0, 0, 0, CShowableAnim::MAP_OBJECT_MODE);
titleStr = uni->getObjectName();
speechStr = uni->getSpeechTranslated();
}