| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 
							- /*
 
-  * BattleFieldController.cpp, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- #include "StdInc.h"
 
- #include "BattleRenderer.h"
 
- #include "BattleInterface.h"
 
- #include "BattleInterfaceClasses.h"
 
- #include "BattleEffectsController.h"
 
- #include "BattleWindow.h"
 
- #include "BattleSiegeController.h"
 
- #include "BattleStacksController.h"
 
- #include "BattleObstacleController.h"
 
- #include "BattleOverlayLogVisualizer.h"
 
- void BattleRenderer::collectObjects()
 
- {
 
- 	owner.effectsController->collectRenderableObjects(*this);
 
- 	owner.obstacleController->collectRenderableObjects(*this);
 
- 	owner.stacksController->collectRenderableObjects(*this);
 
- 	if (owner.siegeController)
 
- 		owner.siegeController->collectRenderableObjects(*this);
 
- 	if (owner.defendingHero)
 
- 		owner.defendingHero->collectRenderableObjects(*this);
 
- 	if (owner.attackingHero)
 
- 		owner.attackingHero->collectRenderableObjects(*this);
 
- }
 
- void BattleRenderer::sortObjects()
 
- {
 
- 	auto getRow = [](const RenderableInstance & object) -> int
 
- 	{
 
- 		if (object.tile.isValid())
 
- 			return object.tile.getY();
 
- 		if ( object.tile == BattleHex::HEX_BEFORE_ALL )
 
- 			return -1;
 
- 		assert( object.tile == BattleHex::HEX_AFTER_ALL || object.tile == BattleHex::INVALID);
 
- 		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 BattleRenderer::renderObjects(BattleRenderer::RendererRef targetCanvas)
 
- {
 
- 	for (auto const & object : objects)
 
- 		object.functor(targetCanvas);
 
- }
 
- BattleRenderer::BattleRenderer(BattleInterface & owner):
 
- 	owner(owner)
 
- {
 
- }
 
- void BattleRenderer::insert(EBattleFieldLayer layer, const BattleHex & tile, BattleRenderer::RenderFunctor functor)
 
- {
 
- 	objects.push_back({functor, layer, tile});
 
- }
 
- void BattleRenderer::execute(BattleRenderer::RendererRef targetCanvas)
 
- {
 
- 	collectObjects();
 
- 	sortObjects();
 
- 	renderObjects(targetCanvas);
 
- 	BattleOverlayLogVisualizer r(targetCanvas, owner);
 
- 	logVisual->visualize(r);
 
- }
 
 
  |