Explorar o código

Fix corrupted image of university

Ivan Savenko hai 8 meses
pai
achega
05e8542a79
Modificáronse 3 ficheiros con 17 adicións e 6 borrados
  1. 13 3
      client/widgets/Images.cpp
  2. 2 1
      client/widgets/Images.h
  3. 2 2
      client/windows/GUIClasses.cpp

+ 13 - 3
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<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),

+ 2 - 1
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:

+ 2 - 2
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<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();
 	}