mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Next batch of siege fixes
This commit is contained in:
		| @@ -77,6 +77,10 @@ CBattleFieldController::CBattleFieldController(CBattleInterface * owner): | ||||
| 		hex->myInterface = owner; | ||||
| 		bfield.push_back(hex); | ||||
| 	} | ||||
|  | ||||
| 	auto accessibility = owner->curInt->cb->getAccesibility(); | ||||
| 	for(int i = 0; i < accessibility.size(); i++) | ||||
| 		stackCountOutsideHexes[i] = (accessibility[i] == EAccessibility::ACCESSIBLE); | ||||
| } | ||||
|  | ||||
| void CBattleFieldController::showBackgroundImage(std::shared_ptr<CCanvas> canvas) | ||||
|   | ||||
| @@ -91,7 +91,7 @@ std::string CBattleSiegeController::getWallPieceImageName(EWallVisual::EWallVisu | ||||
| 		return prefix + "WA5.BMP"; | ||||
| 	case EWallVisual::MOAT: | ||||
| 		return prefix + "MOAT.BMP"; | ||||
| 	case EWallVisual::BACKGROUND_MOAT: | ||||
| 	case EWallVisual::MOAT_BANK: | ||||
| 		return prefix + "MLIP.BMP"; | ||||
| 	case EWallVisual::KEEP_BATTLEMENT: | ||||
| 		return prefix + "MANC.BMP"; | ||||
| @@ -124,19 +124,15 @@ bool CBattleSiegeController::getWallPieceExistance(EWallVisual::EWallVisual what | ||||
| 	//FIXME: use this instead of buildings test? | ||||
| 	//ui8 siegeLevel = owner->curInt->cb->battleGetSiegeLevel(); | ||||
|  | ||||
| 	bool isMoat = (what == EWallVisual::BACKGROUND_MOAT || what == EWallVisual::MOAT); | ||||
| 	bool isKeep = what == EWallVisual::KEEP_BATTLEMENT; | ||||
| 	bool isTower = (what == EWallVisual::UPPER_BATTLEMENT || what == EWallVisual::BOTTOM_BATTLEMENT); | ||||
|  | ||||
| 	bool hasMoat = town->hasBuilt(BuildingID::CITADEL) && town->town->faction->index != ETownType::TOWER; | ||||
| 	bool hasKeep = town->hasBuilt(BuildingID::CITADEL); | ||||
| 	bool hasTower = town->hasBuilt(BuildingID::CASTLE); | ||||
|  | ||||
| 	if ( isMoat ) return hasMoat; | ||||
| 	if ( isKeep ) return hasKeep; | ||||
| 	if ( isTower ) return hasTower; | ||||
|  | ||||
| 	return true; | ||||
| 	switch (what) | ||||
| 	{ | ||||
| 	case EWallVisual::MOAT:              return town->hasBuilt(BuildingID::CITADEL) && town->town->faction->index != ETownType::TOWER; | ||||
| 	case EWallVisual::MOAT_BANK:         return town->hasBuilt(BuildingID::CITADEL) && town->town->faction->index != ETownType::TOWER && town->town->faction->index != ETownType::NECROPOLIS; | ||||
| 	case EWallVisual::KEEP_BATTLEMENT:   return town->hasBuilt(BuildingID::CITADEL); | ||||
| 	case EWallVisual::UPPER_BATTLEMENT:  return town->hasBuilt(BuildingID::CASTLE); | ||||
| 	case EWallVisual::BOTTOM_BATTLEMENT: return town->hasBuilt(BuildingID::CASTLE); | ||||
| 	default:                             return true; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| BattleHex CBattleSiegeController::getWallPiecePosition(EWallVisual::EWallVisual what) const | ||||
| @@ -256,8 +252,8 @@ void CBattleSiegeController::showAbsoluteObstacles(std::shared_ptr<CCanvas> canv | ||||
| 	if (getWallPieceExistance(EWallVisual::MOAT)) | ||||
| 		showWallPiece(canvas, EWallVisual::MOAT, owner->pos.topLeft()); | ||||
|  | ||||
| 	if (getWallPieceExistance(EWallVisual::BACKGROUND_MOAT)) | ||||
| 		showWallPiece(canvas, EWallVisual::BACKGROUND_MOAT, owner->pos.topLeft()); | ||||
| 	if (getWallPieceExistance(EWallVisual::MOAT_BANK)) | ||||
| 		showWallPiece(canvas, EWallVisual::MOAT_BANK, owner->pos.topLeft()); | ||||
| } | ||||
|  | ||||
| void CBattleSiegeController::showBattlefieldObjects(std::shared_ptr<CCanvas> canvas, const BattleHex & location ) | ||||
|   | ||||
| @@ -41,7 +41,7 @@ namespace EWallVisual | ||||
| 		BOTTOM_STATIC_WALL, | ||||
| 		UPPER_STATIC_WALL, | ||||
| 		MOAT, | ||||
| 		BACKGROUND_MOAT, | ||||
| 		MOAT_BANK, | ||||
| 		KEEP_BATTLEMENT, | ||||
| 		BOTTOM_BATTLEMENT, | ||||
| 		UPPER_BATTLEMENT, | ||||
|   | ||||
| @@ -498,8 +498,8 @@ void CBattleStacksController::startAction(const BattleAction* action) | ||||
| 		if (creAnims[action->stackNumber]->framesInGroup(CCreatureAnim::MOVE_START)) | ||||
| 			addNewAnim(new CMovementStartAnimation(owner, stack)); | ||||
|  | ||||
| 		if(shouldRotate(stack, stack->getPosition(), actionTarget.at(0).hexValue)) | ||||
| 			addNewAnim(new CReverseAnimation(owner, stack, stack->getPosition(), true)); | ||||
| 		//if(shouldRotate(stack, stack->getPosition(), actionTarget.at(0).hexValue)) | ||||
| 		//	addNewAnim(new CReverseAnimation(owner, stack, stack->getPosition(), true)); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -314,7 +314,7 @@ void CCreatureAnimation::nextFrame(std::shared_ptr<CCanvas> canvas, bool facingR | ||||
|  | ||||
| 		image->setBorderPallete(borderPallete); | ||||
|  | ||||
| 		canvas->draw(image, pos.topLeft()); | ||||
| 		canvas->draw(image, pos.topLeft(), Rect(0, 0, pos.w, pos.h)); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -92,8 +92,8 @@ public: | ||||
| 	// Keep the original palette, in order to do color switching operation | ||||
| 	void savePalette(); | ||||
|  | ||||
| 	void draw(SDL_Surface * where, int posX=0, int posY=0, Rect *src=nullptr, ui8 alpha=255) const override; | ||||
| 	void draw(SDL_Surface * where, SDL_Rect * dest, SDL_Rect * src, ui8 alpha=255) const override; | ||||
| 	void draw(SDL_Surface * where, int posX=0, int posY=0, const Rect *src=nullptr, ui8 alpha=255) const override; | ||||
| 	void draw(SDL_Surface * where, const SDL_Rect * dest, const SDL_Rect * src, ui8 alpha=255) const override; | ||||
| 	std::shared_ptr<IImage> scaleFast(float scale) const override; | ||||
| 	void exportBitmap(const boost::filesystem::path & path) const override; | ||||
| 	void playerColored(PlayerColor player) override; | ||||
| @@ -647,7 +647,7 @@ SDLImage::SDLImage(std::string filename) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void SDLImage::draw(SDL_Surface *where, int posX, int posY, Rect *src, ui8 alpha) const | ||||
| void SDLImage::draw(SDL_Surface *where, int posX, int posY, const Rect *src, ui8 alpha) const | ||||
| { | ||||
| 	if(!surf) | ||||
| 		return; | ||||
| @@ -657,7 +657,7 @@ void SDLImage::draw(SDL_Surface *where, int posX, int posY, Rect *src, ui8 alpha | ||||
| 	draw(where, &destRect, src); | ||||
| } | ||||
|  | ||||
| void SDLImage::draw(SDL_Surface* where, SDL_Rect* dest, SDL_Rect* src, ui8 alpha) const | ||||
| void SDLImage::draw(SDL_Surface* where, const SDL_Rect* dest, const SDL_Rect* src, ui8 alpha) const | ||||
| { | ||||
| 	if (!surf) | ||||
| 		return; | ||||
|   | ||||
| @@ -40,8 +40,8 @@ public: | ||||
| 	using BorderPallete = std::array<SDL_Color, 3>; | ||||
|  | ||||
| 	//draws image on surface "where" at position | ||||
| 	virtual void draw(SDL_Surface * where, int posX = 0, int posY = 0, Rect * src = nullptr, ui8 alpha = 255) const=0; | ||||
| 	virtual void draw(SDL_Surface * where, SDL_Rect * dest, SDL_Rect * src, ui8 alpha = 255) const = 0; | ||||
| 	virtual void draw(SDL_Surface * where, int posX = 0, int posY = 0, const Rect * src = nullptr, ui8 alpha = 255) const=0; | ||||
| 	virtual void draw(SDL_Surface * where, const SDL_Rect * dest, const SDL_Rect * src, ui8 alpha = 255) const = 0; | ||||
|  | ||||
| 	virtual std::shared_ptr<IImage> scaleFast(float scale) const = 0; | ||||
|  | ||||
|   | ||||
| @@ -37,6 +37,11 @@ void CCanvas::draw(std::shared_ptr<IImage> image, const Point & pos) | ||||
| 	image->draw(surface, pos.x, pos.y); | ||||
| } | ||||
|  | ||||
| void CCanvas::draw(std::shared_ptr<IImage> image, const Point & pos, const Rect & sourceRect) | ||||
| { | ||||
| 	image->draw(surface, pos.x, pos.y, &sourceRect); | ||||
| } | ||||
|  | ||||
| void CCanvas::draw(std::shared_ptr<CCanvas> image, const Point & pos) | ||||
| { | ||||
| 	blitAt(image->surface, pos.x, pos.y, surface); | ||||
|   | ||||
| @@ -30,9 +30,12 @@ public: | ||||
|  | ||||
| 	~CCanvas(); | ||||
|  | ||||
| 	/// renders image onto this canvas | ||||
| 	/// renders image onto this canvas at specified position | ||||
| 	void draw(std::shared_ptr<IImage> image, const Point & pos); | ||||
|  | ||||
| 	/// renders section of image bounded by sourceRect at specified position | ||||
| 	void draw(std::shared_ptr<IImage> image, const Point & pos, const Rect & sourceRect); | ||||
|  | ||||
| 	/// renders another canvas onto this canvas | ||||
| 	void draw(std::shared_ptr<CCanvas> image, const Point & pos); | ||||
|  | ||||
|   | ||||
| @@ -222,7 +222,7 @@ | ||||
| 				}, | ||||
| 				"moat" : | ||||
| 				{ | ||||
| 					"bank" : { "x" : 406, "y" : 77 }, | ||||
| 					"bank" : { "x" : -1, "y" : -1 }, // Should not be present | ||||
| 					"moat" : { "x" : 406, "y" : 77 } | ||||
| 				}, | ||||
| 				"static" : | ||||
|   | ||||
		Reference in New Issue
	
	Block a user