|  | @@ -18,6 +18,7 @@
 | 
	
		
			
				|  |  |  #include "CBattleStacksController.h"
 | 
	
		
			
				|  |  |  #include "CBattleObstacleController.h"
 | 
	
		
			
				|  |  |  #include "CBattleProjectileController.h"
 | 
	
		
			
				|  |  | +#include "CBattleRenderer.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include "../CGameInfo.h"
 | 
	
		
			
				|  |  |  #include "../CPlayerInterface.h"
 | 
	
	
		
			
				|  | @@ -92,7 +93,7 @@ void CBattleFieldController::renderBattlefield(std::shared_ptr<CCanvas> canvas)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	showBackground(canvas);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	CBattleFieldRenderer renderer(owner);
 | 
	
		
			
				|  |  | +	CBattleRenderer renderer(owner);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	renderer.execute(canvas);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -631,62 +632,3 @@ bool CBattleFieldController::stackCountOutsideHex(const BattleHex & number) cons
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	return stackCountOutsideHexes[number];
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void CBattleFieldRenderer::collectObjects()
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	owner->collectRenderableObjects(*this);
 | 
	
		
			
				|  |  | -	owner->effectsController->collectRenderableObjects(*this);
 | 
	
		
			
				|  |  | -	owner->obstacleController->collectRenderableObjects(*this);
 | 
	
		
			
				|  |  | -	owner->siegeController->collectRenderableObjects(*this);
 | 
	
		
			
				|  |  | -	owner->stacksController->collectRenderableObjects(*this);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void CBattleFieldRenderer::sortObjects()
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	auto getRow = [](const RenderableInstance & object) -> int
 | 
	
		
			
				|  |  | -	{
 | 
	
		
			
				|  |  | -		if (object.tile.isValid())
 | 
	
		
			
				|  |  | -			return object.tile.getY();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ( object.tile == BattleHex::HEX_BEFORE_ALL )
 | 
	
		
			
				|  |  | -			return -1;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ( object.tile == BattleHex::HEX_AFTER_ALL )
 | 
	
		
			
				|  |  | -			return GameConstants::BFIELD_HEIGHT;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ( object.tile == BattleHex::INVALID )
 | 
	
		
			
				|  |  | -			return GameConstants::BFIELD_HEIGHT;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		assert(0);
 | 
	
		
			
				|  |  | -		return GameConstants::BFIELD_HEIGHT;
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	std::stable_sort(objects.begin(), objects.end(), [&](const RenderableInstance & left, const RenderableInstance & right){
 | 
	
		
			
				|  |  | -		if ( getRow(left) != getRow(right))
 | 
	
		
			
				|  |  | -			return getRow(left) < getRow(right);
 | 
	
		
			
				|  |  | -		return left.layer < right.layer;
 | 
	
		
			
				|  |  | -	});
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void CBattleFieldRenderer::renderObjects(CBattleFieldRenderer::RendererPtr targetCanvas)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	for (auto const & object : objects)
 | 
	
		
			
				|  |  | -		object.functor(targetCanvas);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -CBattleFieldRenderer::CBattleFieldRenderer(CBattleInterface * owner):
 | 
	
		
			
				|  |  | -	owner(owner)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void CBattleFieldRenderer::insert(EBattleFieldLayer layer, BattleHex tile, CBattleFieldRenderer::RenderFunctor functor)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	objects.push_back({ functor, layer, tile });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void CBattleFieldRenderer::execute(CBattleFieldRenderer::RendererPtr targetCanvas)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	collectObjects();
 | 
	
		
			
				|  |  | -	sortObjects();
 | 
	
		
			
				|  |  | -	renderObjects(targetCanvas);
 | 
	
		
			
				|  |  | -}
 |