|
|
@@ -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);
|
|
|
-}
|