| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /*
- * BattleFieldController.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"
- class Canvas;
- class BattleInterface;
- enum class EBattleFieldLayer {
- // confirmed ordering requirements:
- CORPSES = 0,
- WALLS = 1,
- HEROES = 2,
- STACKS = 2, // after corpses, obstacles, walls
- OBSTACLES = 3, // after stacks
- STACK_AMOUNTS = 3, // after stacks, obstacles, corpses
- EFFECTS = 4, // after obstacles, battlements
- };
- class BattleRenderer
- {
- public:
- using RendererRef = Canvas &;
- using RenderFunctor = std::function<void(RendererRef)>;
- private:
- BattleInterface & owner;
- struct RenderableInstance
- {
- RenderFunctor functor;
- EBattleFieldLayer layer;
- BattleHex tile;
- };
- std::vector<RenderableInstance> objects;
- void collectObjects();
- void sortObjects();
- void renderObjects(RendererRef targetCanvas);
- public:
- BattleRenderer(BattleInterface & owner);
- void insert(EBattleFieldLayer layer, const BattleHex & tile, RenderFunctor functor);
- void execute(RendererRef targetCanvas);
- };
|