mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-15 11:46:56 +02:00
Fixed rendering priority of battlefield background obstacles
This commit is contained in:
parent
3f6cbc6312
commit
62a5eeebbc
@ -127,13 +127,26 @@ void BattleObstacleController::obstaclePlaced(const std::vector<std::shared_ptr<
|
|||||||
void BattleObstacleController::showAbsoluteObstacles(Canvas & canvas)
|
void BattleObstacleController::showAbsoluteObstacles(Canvas & canvas)
|
||||||
{
|
{
|
||||||
//Blit absolute obstacles
|
//Blit absolute obstacles
|
||||||
for(auto & oi : owner.curInt->cb->battleGetAllObstacles())
|
for(auto & obstacle : owner.curInt->cb->battleGetAllObstacles())
|
||||||
{
|
{
|
||||||
if(oi->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE)
|
if(obstacle->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE)
|
||||||
{
|
{
|
||||||
auto img = getObstacleImage(*oi);
|
auto img = getObstacleImage(*obstacle);
|
||||||
if(img)
|
if(img)
|
||||||
canvas.draw(img, Point(oi->getInfo().width, oi->getInfo().height));
|
canvas.draw(img, Point(obstacle->getInfo().width, obstacle->getInfo().height));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obstacle->obstacleType == CObstacleInstance::USUAL)
|
||||||
|
{
|
||||||
|
if (obstacle->getInfo().isForegroundObstacle)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto img = getObstacleImage(*obstacle);
|
||||||
|
if(img)
|
||||||
|
{
|
||||||
|
Point p = getObstaclePosition(img, *obstacle);
|
||||||
|
canvas.draw(img, p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,11 +161,10 @@ void BattleObstacleController::collectRenderableObjects(BattleRenderer & rendere
|
|||||||
if (obstacle->obstacleType == CObstacleInstance::MOAT)
|
if (obstacle->obstacleType == CObstacleInstance::MOAT)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool isForeground = obstacle->obstacleType == CObstacleInstance::USUAL && obstacle->getInfo().isForegroundObstacle;
|
if (obstacle->obstacleType == CObstacleInstance::USUAL && !obstacle->getInfo().isForegroundObstacle)
|
||||||
|
continue;
|
||||||
|
|
||||||
auto layer = isForeground ? EBattleFieldLayer::OBSTACLES_FG : EBattleFieldLayer::OBSTACLES_BG;
|
renderer.insert(EBattleFieldLayer::OBSTACLES, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
|
||||||
|
|
||||||
renderer.insert(layer, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
|
|
||||||
auto img = getObstacleImage(*obstacle);
|
auto img = getObstacleImage(*obstacle);
|
||||||
if(img)
|
if(img)
|
||||||
{
|
{
|
||||||
|
@ -16,12 +16,11 @@ class BattleInterface;
|
|||||||
|
|
||||||
enum class EBattleFieldLayer {
|
enum class EBattleFieldLayer {
|
||||||
// confirmed ordering requirements:
|
// confirmed ordering requirements:
|
||||||
OBSTACLES_BG = 0,
|
|
||||||
CORPSES = 0,
|
CORPSES = 0,
|
||||||
WALLS = 1,
|
WALLS = 1,
|
||||||
HEROES = 2,
|
HEROES = 2,
|
||||||
STACKS = 2, // after corpses, obstacles, walls
|
STACKS = 2, // after corpses, obstacles, walls
|
||||||
OBSTACLES_FG = 3, // after stacks
|
OBSTACLES = 3, // after stacks
|
||||||
STACK_AMOUNTS = 3, // after stacks, obstacles, corpses
|
STACK_AMOUNTS = 3, // after stacks, obstacles, corpses
|
||||||
EFFECTS = 4, // after obstacles, battlements
|
EFFECTS = 4, // after obstacles, battlements
|
||||||
};
|
};
|
||||||
|
@ -307,15 +307,13 @@ void BattleSiegeController::collectRenderableObjects(BattleRenderer & renderer)
|
|||||||
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
||||||
owner.stacksController->showStack(canvas, getTurretStack(wallPiece));
|
owner.stacksController->showStack(canvas, getTurretStack(wallPiece));
|
||||||
});
|
});
|
||||||
renderer.insert( EBattleFieldLayer::OBSTACLES_FG, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
renderer.insert( EBattleFieldLayer::OBSTACLES, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
||||||
showWallPiece(canvas, wallPiece);
|
showWallPiece(canvas, wallPiece);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
|
||||||
showWallPiece(canvas, wallPiece);
|
showWallPiece(canvas, wallPiece);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user