| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * BattleObstacleController.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/GameConstants.h"
- #include "../../lib/battle/BattleHex.h"
- #include "../../lib/filesystem/ResourcePath.h"
- VCMI_LIB_NAMESPACE_BEGIN
- struct CatapultAttack;
- class CCreature;
- class CStack;
- class CGTownInstance;
- class Point;
- VCMI_LIB_NAMESPACE_END
- class Canvas;
- class BattleInterface;
- class BattleRenderer;
- class IImage;
- namespace EWallVisual
- {
- enum EWallVisual
- {
- BACKGROUND,
- BACKGROUND_WALL,
- KEEP,
- BOTTOM_TOWER,
- BOTTOM_WALL,
- WALL_BELLOW_GATE,
- WALL_OVER_GATE,
- UPPER_WALL,
- UPPER_TOWER,
- GATE,
- GATE_ARCH,
- BOTTOM_STATIC_WALL,
- UPPER_STATIC_WALL,
- MOAT,
- MOAT_BANK,
- KEEP_BATTLEMENT,
- BOTTOM_BATTLEMENT,
- UPPER_BATTLEMENT,
- CREATURE_KEEP,
- CREATURE_BOTTOM_TOWER,
- CREATURE_UPPER_TOWER,
- WALL_FIRST = BACKGROUND_WALL,
- WALL_LAST = UPPER_BATTLEMENT,
- // these entries are mapped to EWallPart enum
- DESTRUCTIBLE_FIRST = KEEP,
- DESTRUCTIBLE_LAST = GATE,
- };
- }
- class BattleSiegeController
- {
- BattleInterface & owner;
- /// besieged town
- const CGTownInstance *town;
- /// sections of castle walls, in their currently visible state
- std::array<std::shared_ptr<IImage>, EWallVisual::WALL_LAST + 1> wallPieceImages;
- /// return URI for image for a wall piece
- ImagePath getWallPieceImageName(EWallVisual::EWallVisual what, EWallState state) const;
- /// returns BattleHex to which chosen wall piece is bound
- BattleHex getWallPiecePosition(EWallVisual::EWallVisual what) const;
- /// returns true if chosen wall piece should be present in current battle
- bool getWallPieceExistence(EWallVisual::EWallVisual what) const;
- void showWallPiece(Canvas & canvas, EWallVisual::EWallVisual what);
- BattleHex getTurretBattleHex(EWallVisual::EWallVisual wallPiece) const;
- const CStack * getTurretStack(EWallVisual::EWallVisual wallPiece) const;
- public:
- BattleSiegeController(BattleInterface & owner, const CGTownInstance *siegeTown);
- /// call-ins from server
- void gateStateChanged(const EGateState state);
- void stackIsCatapulting(const CatapultAttack & ca);
- /// call-ins from other battle controllers
- void showAbsoluteObstacles(Canvas & canvas);
- void collectRenderableObjects(BattleRenderer & renderer);
- /// queries from other battle controllers
- bool isAttackableByCatapult(BattleHex hex) const;
- ImagePath getBattleBackgroundName() const;
- const CCreature *getTurretCreature() const;
- Point getTurretCreaturePosition( BattleHex position ) const;
- const CGTownInstance *getSiegedTown() const;
- };
|