mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-23 21:29:13 +02:00
Moved CBattleRenderer into a separate file
This commit is contained in:
parent
1b4c5be4de
commit
2c05f588fd
@ -11,6 +11,7 @@ set(client_SRCS
|
|||||||
battle/CBattleInterface.cpp
|
battle/CBattleInterface.cpp
|
||||||
battle/CBattleObstacleController.cpp
|
battle/CBattleObstacleController.cpp
|
||||||
battle/CBattleProjectileController.cpp
|
battle/CBattleProjectileController.cpp
|
||||||
|
battle/CBattleRenderer.cpp
|
||||||
battle/CBattleSiegeController.cpp
|
battle/CBattleSiegeController.cpp
|
||||||
battle/CBattleStacksController.cpp
|
battle/CBattleStacksController.cpp
|
||||||
battle/CCreatureAnimation.cpp
|
battle/CCreatureAnimation.cpp
|
||||||
@ -93,6 +94,7 @@ set(client_HEADERS
|
|||||||
battle/CBattleInterface.h
|
battle/CBattleInterface.h
|
||||||
battle/CBattleObstacleController.h
|
battle/CBattleObstacleController.h
|
||||||
battle/CBattleProjectileController.h
|
battle/CBattleProjectileController.h
|
||||||
|
battle/CBattleRenderer.h
|
||||||
battle/CBattleSiegeController.h
|
battle/CBattleSiegeController.h
|
||||||
battle/CBattleStacksController.h
|
battle/CBattleStacksController.h
|
||||||
battle/CCreatureAnimation.h
|
battle/CCreatureAnimation.h
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "CBattleInterfaceClasses.h"
|
#include "CBattleInterfaceClasses.h"
|
||||||
#include "CBattleFieldController.h"
|
#include "CBattleFieldController.h"
|
||||||
#include "CBattleStacksController.h"
|
#include "CBattleStacksController.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "../CMusicHandler.h"
|
#include "../CMusicHandler.h"
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
@ -122,11 +123,11 @@ void CBattleEffectsController::startAction(const BattleAction* action)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleEffectsController::collectRenderableObjects(CBattleFieldRenderer & renderer)
|
void CBattleEffectsController::collectRenderableObjects(CBattleRenderer & renderer)
|
||||||
{
|
{
|
||||||
for (auto & elem : battleEffects)
|
for (auto & elem : battleEffects)
|
||||||
{
|
{
|
||||||
renderer.insert( EBattleFieldLayer::EFFECTS, elem.position, [&elem](CBattleFieldRenderer::RendererPtr canvas)
|
renderer.insert( EBattleFieldLayer::EFFECTS, elem.position, [&elem](CBattleRenderer::RendererPtr canvas)
|
||||||
{
|
{
|
||||||
int currentFrame = static_cast<int>(floor(elem.currentFrame));
|
int currentFrame = static_cast<int>(floor(elem.currentFrame));
|
||||||
currentFrame %= elem.animation->size();
|
currentFrame %= elem.animation->size();
|
||||||
|
@ -23,7 +23,7 @@ struct SDL_Surface;
|
|||||||
class CAnimation;
|
class CAnimation;
|
||||||
class CCanvas;
|
class CCanvas;
|
||||||
class CBattleInterface;
|
class CBattleInterface;
|
||||||
class CBattleFieldRenderer;
|
class CBattleRenderer;
|
||||||
class CPointEffectAnimation;
|
class CPointEffectAnimation;
|
||||||
|
|
||||||
namespace EBattleEffect
|
namespace EBattleEffect
|
||||||
@ -78,7 +78,7 @@ public:
|
|||||||
|
|
||||||
void battleTriggerEffect(const BattleTriggerEffect & bte);
|
void battleTriggerEffect(const BattleTriggerEffect & bte);
|
||||||
|
|
||||||
void collectRenderableObjects(CBattleFieldRenderer & renderer);
|
void collectRenderableObjects(CBattleRenderer & renderer);
|
||||||
|
|
||||||
friend class CPointEffectAnimation;
|
friend class CPointEffectAnimation;
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "CBattleStacksController.h"
|
#include "CBattleStacksController.h"
|
||||||
#include "CBattleObstacleController.h"
|
#include "CBattleObstacleController.h"
|
||||||
#include "CBattleProjectileController.h"
|
#include "CBattleProjectileController.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
#include "../CPlayerInterface.h"
|
#include "../CPlayerInterface.h"
|
||||||
@ -92,7 +93,7 @@ void CBattleFieldController::renderBattlefield(std::shared_ptr<CCanvas> canvas)
|
|||||||
{
|
{
|
||||||
showBackground(canvas);
|
showBackground(canvas);
|
||||||
|
|
||||||
CBattleFieldRenderer renderer(owner);
|
CBattleRenderer renderer(owner);
|
||||||
|
|
||||||
renderer.execute(canvas);
|
renderer.execute(canvas);
|
||||||
|
|
||||||
@ -631,62 +632,3 @@ bool CBattleFieldController::stackCountOutsideHex(const BattleHex & number) cons
|
|||||||
{
|
{
|
||||||
return stackCountOutsideHexes[number];
|
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);
|
|
||||||
}
|
|
||||||
|
@ -27,45 +27,6 @@ class CCanvas;
|
|||||||
class IImage;
|
class IImage;
|
||||||
class CBattleInterface;
|
class CBattleInterface;
|
||||||
|
|
||||||
enum class EBattleFieldLayer {
|
|
||||||
// confirmed ordering requirements:
|
|
||||||
OBSTACLES = 0,
|
|
||||||
CORPSES = 0,
|
|
||||||
WALLS = 1,
|
|
||||||
HEROES = 1,
|
|
||||||
STACKS = 1, // after corpses, obstacles
|
|
||||||
BATTLEMENTS = 2, // after stacks
|
|
||||||
STACK_AMOUNTS = 2, // after stacks, obstacles, corpses
|
|
||||||
EFFECTS = 3, // after obstacles, battlements
|
|
||||||
};
|
|
||||||
|
|
||||||
class CBattleFieldRenderer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using RendererPtr = std::shared_ptr<CCanvas>;
|
|
||||||
using RenderFunctor = std::function<void(RendererPtr)>;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CBattleInterface * owner;
|
|
||||||
|
|
||||||
struct RenderableInstance
|
|
||||||
{
|
|
||||||
RenderFunctor functor;
|
|
||||||
EBattleFieldLayer layer;
|
|
||||||
BattleHex tile;
|
|
||||||
};
|
|
||||||
std::vector<RenderableInstance> objects;
|
|
||||||
|
|
||||||
void collectObjects();
|
|
||||||
void sortObjects();
|
|
||||||
void renderObjects(RendererPtr targetCanvas);
|
|
||||||
public:
|
|
||||||
CBattleFieldRenderer(CBattleInterface * owner);
|
|
||||||
|
|
||||||
void insert(EBattleFieldLayer layer, BattleHex tile, RenderFunctor functor);
|
|
||||||
void execute(RendererPtr targetCanvas);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CBattleFieldController : public CIntObject
|
class CBattleFieldController : public CIntObject
|
||||||
{
|
{
|
||||||
CBattleInterface * owner;
|
CBattleInterface * owner;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "CBattleFieldController.h"
|
#include "CBattleFieldController.h"
|
||||||
#include "CBattleControlPanel.h"
|
#include "CBattleControlPanel.h"
|
||||||
#include "CBattleStacksController.h"
|
#include "CBattleStacksController.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
#include "../CMessage.h"
|
#include "../CMessage.h"
|
||||||
@ -913,18 +914,18 @@ void CBattleInterface::show(SDL_Surface *to)
|
|||||||
//activateStack();
|
//activateStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleInterface::collectRenderableObjects(CBattleFieldRenderer & renderer)
|
void CBattleInterface::collectRenderableObjects(CBattleRenderer & renderer)
|
||||||
{
|
{
|
||||||
if (attackingHero)
|
if (attackingHero)
|
||||||
{
|
{
|
||||||
renderer.insert(EBattleFieldLayer::HEROES, BattleHex(0),[this](CBattleFieldRenderer::RendererPtr canvas)
|
renderer.insert(EBattleFieldLayer::HEROES, BattleHex(0),[this](CBattleRenderer::RendererPtr canvas)
|
||||||
{
|
{
|
||||||
attackingHero->show(canvas->getSurface());
|
attackingHero->show(canvas->getSurface());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (defendingHero)
|
if (defendingHero)
|
||||||
{
|
{
|
||||||
renderer.insert(EBattleFieldLayer::HEROES, BattleHex(GameConstants::BFIELD_WIDTH-1),[this](CBattleFieldRenderer::RendererPtr canvas)
|
renderer.insert(EBattleFieldLayer::HEROES, BattleHex(GameConstants::BFIELD_WIDTH-1),[this](CBattleRenderer::RendererPtr canvas)
|
||||||
{
|
{
|
||||||
defendingHero->show(canvas->getSurface());
|
defendingHero->show(canvas->getSurface());
|
||||||
});
|
});
|
||||||
|
@ -47,7 +47,7 @@ class CBattleProjectileController;
|
|||||||
class CBattleSiegeController;
|
class CBattleSiegeController;
|
||||||
class CBattleObstacleController;
|
class CBattleObstacleController;
|
||||||
class CBattleFieldController;
|
class CBattleFieldController;
|
||||||
class CBattleFieldRenderer;
|
class CBattleRenderer;
|
||||||
class CBattleControlPanel;
|
class CBattleControlPanel;
|
||||||
class CBattleStacksController;
|
class CBattleStacksController;
|
||||||
class CBattleActionsController;
|
class CBattleActionsController;
|
||||||
@ -143,7 +143,7 @@ public:
|
|||||||
void show(SDL_Surface *to) override;
|
void show(SDL_Surface *to) override;
|
||||||
void showAll(SDL_Surface *to) override;
|
void showAll(SDL_Surface *to) override;
|
||||||
|
|
||||||
void collectRenderableObjects(CBattleFieldRenderer & renderer);
|
void collectRenderableObjects(CBattleRenderer & renderer);
|
||||||
|
|
||||||
//call-ins
|
//call-ins
|
||||||
void startAction(const BattleAction* action);
|
void startAction(const BattleAction* action);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "CBattleFieldController.h"
|
#include "CBattleFieldController.h"
|
||||||
#include "CBattleAnimations.h"
|
#include "CBattleAnimations.h"
|
||||||
#include "CBattleStacksController.h"
|
#include "CBattleStacksController.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "../CPlayerInterface.h"
|
#include "../CPlayerInterface.h"
|
||||||
#include "../gui/CAnimation.h"
|
#include "../gui/CAnimation.h"
|
||||||
@ -126,7 +127,7 @@ void CBattleObstacleController::showAbsoluteObstacles(std::shared_ptr<CCanvas> c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleObstacleController::collectRenderableObjects(CBattleFieldRenderer & renderer)
|
void CBattleObstacleController::collectRenderableObjects(CBattleRenderer & renderer)
|
||||||
{
|
{
|
||||||
for (auto obstacle : owner->curInt->cb->battleGetAllObstacles())
|
for (auto obstacle : owner->curInt->cb->battleGetAllObstacles())
|
||||||
{
|
{
|
||||||
@ -136,7 +137,7 @@ void CBattleObstacleController::collectRenderableObjects(CBattleFieldRenderer &
|
|||||||
if (obstacle->obstacleType == CObstacleInstance::MOAT)
|
if (obstacle->obstacleType == CObstacleInstance::MOAT)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
renderer.insert(EBattleFieldLayer::OBSTACLES, obstacle->pos, [this, obstacle]( CBattleFieldRenderer::RendererPtr canvas ){
|
renderer.insert(EBattleFieldLayer::OBSTACLES, obstacle->pos, [this, obstacle]( CBattleRenderer::RendererPtr canvas ){
|
||||||
auto img = getObstacleImage(*obstacle);
|
auto img = getObstacleImage(*obstacle);
|
||||||
if(img)
|
if(img)
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ class IImage;
|
|||||||
class CCanvas;
|
class CCanvas;
|
||||||
class CAnimation;
|
class CAnimation;
|
||||||
class CBattleInterface;
|
class CBattleInterface;
|
||||||
class CBattleFieldRenderer;
|
class CBattleRenderer;
|
||||||
struct Point;
|
struct Point;
|
||||||
|
|
||||||
class CBattleObstacleController
|
class CBattleObstacleController
|
||||||
@ -48,5 +48,5 @@ public:
|
|||||||
void showObstacles(SDL_Surface *to, std::vector<std::shared_ptr<const CObstacleInstance>> &obstacles);
|
void showObstacles(SDL_Surface *to, std::vector<std::shared_ptr<const CObstacleInstance>> &obstacles);
|
||||||
void showAbsoluteObstacles(std::shared_ptr<CCanvas> canvas, const Point & offset);
|
void showAbsoluteObstacles(std::shared_ptr<CCanvas> canvas, const Point & offset);
|
||||||
|
|
||||||
void collectRenderableObjects(CBattleFieldRenderer & renderer);
|
void collectRenderableObjects(CBattleRenderer & renderer);
|
||||||
};
|
};
|
||||||
|
77
client/battle/CBattleRenderer.cpp
Normal file
77
client/battle/CBattleRenderer.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* CBattleFieldController.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 "CBattleRenderer.h"
|
||||||
|
|
||||||
|
#include "CBattleInterface.h"
|
||||||
|
|
||||||
|
#include "CBattleEffectsController.h"
|
||||||
|
#include "CBattleSiegeController.h"
|
||||||
|
#include "CBattleStacksController.h"
|
||||||
|
#include "CBattleObstacleController.h"
|
||||||
|
|
||||||
|
void CBattleRenderer::collectObjects()
|
||||||
|
{
|
||||||
|
owner->collectRenderableObjects(*this);
|
||||||
|
owner->effectsController->collectRenderableObjects(*this);
|
||||||
|
owner->obstacleController->collectRenderableObjects(*this);
|
||||||
|
owner->siegeController->collectRenderableObjects(*this);
|
||||||
|
owner->stacksController->collectRenderableObjects(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBattleRenderer::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 CBattleRenderer::renderObjects(CBattleRenderer::RendererPtr targetCanvas)
|
||||||
|
{
|
||||||
|
for (auto const & object : objects)
|
||||||
|
object.functor(targetCanvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
CBattleRenderer::CBattleRenderer(CBattleInterface * owner):
|
||||||
|
owner(owner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBattleRenderer::insert(EBattleFieldLayer layer, BattleHex tile, CBattleRenderer::RenderFunctor functor)
|
||||||
|
{
|
||||||
|
objects.push_back({ functor, layer, tile });
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBattleRenderer::execute(CBattleRenderer::RendererPtr targetCanvas)
|
||||||
|
{
|
||||||
|
collectObjects();
|
||||||
|
sortObjects();
|
||||||
|
renderObjects(targetCanvas);
|
||||||
|
}
|
66
client/battle/CBattleRenderer.h
Normal file
66
client/battle/CBattleRenderer.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* CBattleFieldController.h, 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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../lib/battle/BattleHex.h"
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
//class CStack;
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
|
||||||
|
//struct SDL_Surface;
|
||||||
|
//struct Rect;
|
||||||
|
//struct Point;
|
||||||
|
//
|
||||||
|
//class CClickableHex;
|
||||||
|
class CCanvas;
|
||||||
|
//class IImage;
|
||||||
|
class CBattleInterface;
|
||||||
|
|
||||||
|
enum class EBattleFieldLayer {
|
||||||
|
// confirmed ordering requirements:
|
||||||
|
OBSTACLES = 0,
|
||||||
|
CORPSES = 0,
|
||||||
|
WALLS = 1,
|
||||||
|
HEROES = 1,
|
||||||
|
STACKS = 1, // after corpses, obstacles
|
||||||
|
BATTLEMENTS = 2, // after stacks
|
||||||
|
STACK_AMOUNTS = 2, // after stacks, obstacles, corpses
|
||||||
|
EFFECTS = 3, // after obstacles, battlements
|
||||||
|
};
|
||||||
|
|
||||||
|
class CBattleRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using RendererPtr = std::shared_ptr<CCanvas>;
|
||||||
|
using RenderFunctor = std::function<void(RendererPtr)>;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CBattleInterface * owner;
|
||||||
|
|
||||||
|
struct RenderableInstance
|
||||||
|
{
|
||||||
|
RenderFunctor functor;
|
||||||
|
EBattleFieldLayer layer;
|
||||||
|
BattleHex tile;
|
||||||
|
};
|
||||||
|
std::vector<RenderableInstance> objects;
|
||||||
|
|
||||||
|
void collectObjects();
|
||||||
|
void sortObjects();
|
||||||
|
void renderObjects(RendererPtr targetCanvas);
|
||||||
|
public:
|
||||||
|
CBattleRenderer(CBattleInterface * owner);
|
||||||
|
|
||||||
|
void insert(EBattleFieldLayer layer, BattleHex tile, RenderFunctor functor);
|
||||||
|
void execute(RendererPtr targetCanvas);
|
||||||
|
};
|
@ -15,6 +15,7 @@
|
|||||||
#include "CBattleInterfaceClasses.h"
|
#include "CBattleInterfaceClasses.h"
|
||||||
#include "CBattleStacksController.h"
|
#include "CBattleStacksController.h"
|
||||||
#include "CBattleFieldController.h"
|
#include "CBattleFieldController.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "../CMusicHandler.h"
|
#include "../CMusicHandler.h"
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
@ -280,7 +281,7 @@ const CStack * CBattleSiegeController::getTurretStack(EWallVisual::EWallVisual w
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleSiegeController::collectRenderableObjects(CBattleFieldRenderer & renderer)
|
void CBattleSiegeController::collectRenderableObjects(CBattleRenderer & renderer)
|
||||||
{
|
{
|
||||||
for (int i = EWallVisual::WALL_FIRST; i <= EWallVisual::WALL_LAST; ++i)
|
for (int i = EWallVisual::WALL_FIRST; i <= EWallVisual::WALL_LAST; ++i)
|
||||||
{
|
{
|
||||||
@ -296,14 +297,14 @@ void CBattleSiegeController::collectRenderableObjects(CBattleFieldRenderer & ren
|
|||||||
wallPiece == EWallVisual::BOTTOM_BATTLEMENT ||
|
wallPiece == EWallVisual::BOTTOM_BATTLEMENT ||
|
||||||
wallPiece == EWallVisual::UPPER_BATTLEMENT)
|
wallPiece == EWallVisual::UPPER_BATTLEMENT)
|
||||||
{
|
{
|
||||||
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleFieldRenderer::RendererPtr canvas){
|
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleRenderer::RendererPtr canvas){
|
||||||
owner->stacksController->showStack(canvas, getTurretStack(wallPiece));
|
owner->stacksController->showStack(canvas, getTurretStack(wallPiece));
|
||||||
});
|
});
|
||||||
renderer.insert( EBattleFieldLayer::BATTLEMENTS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleFieldRenderer::RendererPtr canvas){
|
renderer.insert( EBattleFieldLayer::BATTLEMENTS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleRenderer::RendererPtr canvas){
|
||||||
showWallPiece(canvas, wallPiece, owner->pos.topLeft());
|
showWallPiece(canvas, wallPiece, owner->pos.topLeft());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleFieldRenderer::RendererPtr canvas){
|
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](CBattleRenderer::RendererPtr canvas){
|
||||||
showWallPiece(canvas, wallPiece, owner->pos.topLeft());
|
showWallPiece(canvas, wallPiece, owner->pos.topLeft());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ struct Point;
|
|||||||
struct SDL_Surface;
|
struct SDL_Surface;
|
||||||
class CCanvas;
|
class CCanvas;
|
||||||
class CBattleInterface;
|
class CBattleInterface;
|
||||||
class CBattleFieldRenderer;
|
class CBattleRenderer;
|
||||||
class IImage;
|
class IImage;
|
||||||
|
|
||||||
namespace EWallVisual
|
namespace EWallVisual
|
||||||
@ -99,7 +99,7 @@ public:
|
|||||||
|
|
||||||
/// call-ins from other battle controllers
|
/// call-ins from other battle controllers
|
||||||
void showAbsoluteObstacles(std::shared_ptr<CCanvas> canvas, const Point & offset);
|
void showAbsoluteObstacles(std::shared_ptr<CCanvas> canvas, const Point & offset);
|
||||||
void collectRenderableObjects(CBattleFieldRenderer & renderer);
|
void collectRenderableObjects(CBattleRenderer & renderer);
|
||||||
|
|
||||||
/// queries from other battle controllers
|
/// queries from other battle controllers
|
||||||
bool isAttackableByCatapult(BattleHex hex) const;
|
bool isAttackableByCatapult(BattleHex hex) const;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "CBattleEffectsController.h"
|
#include "CBattleEffectsController.h"
|
||||||
#include "CBattleProjectileController.h"
|
#include "CBattleProjectileController.h"
|
||||||
#include "CBattleControlPanel.h"
|
#include "CBattleControlPanel.h"
|
||||||
|
#include "CBattleRenderer.h"
|
||||||
|
|
||||||
#include "CCreatureAnimation.h"
|
#include "CCreatureAnimation.h"
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ BattleHex CBattleStacksController::getStackCurrentPosition(const CStack * stack)
|
|||||||
return stack->getPosition();
|
return stack->getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleStacksController::collectRenderableObjects(CBattleFieldRenderer & renderer)
|
void CBattleStacksController::collectRenderableObjects(CBattleRenderer & renderer)
|
||||||
{
|
{
|
||||||
auto stacks = owner->curInt->cb->battleGetAllStacks(false);
|
auto stacks = owner->curInt->cb->battleGetAllStacks(false);
|
||||||
|
|
||||||
@ -132,13 +133,13 @@ void CBattleStacksController::collectRenderableObjects(CBattleFieldRenderer & re
|
|||||||
auto layer = stackAnimation[stack->ID]->isDead() ? EBattleFieldLayer::CORPSES : EBattleFieldLayer::STACKS;
|
auto layer = stackAnimation[stack->ID]->isDead() ? EBattleFieldLayer::CORPSES : EBattleFieldLayer::STACKS;
|
||||||
auto location = getStackCurrentPosition(stack);
|
auto location = getStackCurrentPosition(stack);
|
||||||
|
|
||||||
renderer.insert(layer, location, [this, stack]( CBattleFieldRenderer::RendererPtr renderer ){
|
renderer.insert(layer, location, [this, stack]( CBattleRenderer::RendererPtr renderer ){
|
||||||
showStack(renderer, stack);
|
showStack(renderer, stack);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (stackNeedsAmountBox(stack))
|
if (stackNeedsAmountBox(stack))
|
||||||
{
|
{
|
||||||
renderer.insert(EBattleFieldLayer::STACK_AMOUNTS, location, [this, stack]( CBattleFieldRenderer::RendererPtr renderer ){
|
renderer.insert(EBattleFieldLayer::STACK_AMOUNTS, location, [this, stack]( CBattleRenderer::RendererPtr renderer ){
|
||||||
showStackAmountBox(renderer, stack);
|
showStackAmountBox(renderer, stack);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ class CBattleInterface;
|
|||||||
class CBattleAnimation;
|
class CBattleAnimation;
|
||||||
class CCreatureAnimation;
|
class CCreatureAnimation;
|
||||||
class CBattleAnimation;
|
class CBattleAnimation;
|
||||||
class CBattleFieldRenderer;
|
class CBattleRenderer;
|
||||||
class IImage;
|
class IImage;
|
||||||
|
|
||||||
class CBattleStacksController
|
class CBattleStacksController
|
||||||
@ -89,7 +89,7 @@ public:
|
|||||||
void showAliveStack(std::shared_ptr<CCanvas> canvas, const CStack * stack);
|
void showAliveStack(std::shared_ptr<CCanvas> canvas, const CStack * stack);
|
||||||
void showStack(std::shared_ptr<CCanvas> canvas, const CStack * stack);
|
void showStack(std::shared_ptr<CCanvas> canvas, const CStack * stack);
|
||||||
|
|
||||||
void collectRenderableObjects(CBattleFieldRenderer & renderer);
|
void collectRenderableObjects(CBattleRenderer & renderer);
|
||||||
|
|
||||||
void addNewAnim(CBattleAnimation *anim); //adds new anim to pendingAnims
|
void addNewAnim(CBattleAnimation *anim); //adds new anim to pendingAnims
|
||||||
void updateBattleAnimations();
|
void updateBattleAnimations();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user