1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-23 00:28:08 +02:00
Files
.github
AI
CI
Mods
android
client
clientapp
cmake_modules
config
debian
docs
include
ios
launcher
lib
battle
bonuses
campaign
constants
entities
events
filesystem
gameState
json
logging
mapObjectConstructors
mapObjects
mapping
CDrawRoadsOperation.cpp
CDrawRoadsOperation.h
CMap.cpp
CMap.h
CMapDefines.h
CMapEditManager.cpp
CMapEditManager.h
CMapHeader.cpp
CMapHeader.h
CMapInfo.cpp
CMapInfo.h
CMapOperation.cpp
CMapOperation.h
CMapService.cpp
CMapService.h
MapEditUtils.cpp
MapEditUtils.h
MapFeaturesH3M.cpp
MapFeaturesH3M.h
MapFormat.h
MapFormatH3M.cpp
MapFormatH3M.h
MapFormatJson.cpp
MapFormatJson.h
MapIdentifiersH3M.cpp
MapIdentifiersH3M.h
MapReaderH3M.cpp
MapReaderH3M.h
ObstacleProxy.cpp
ObstacleProxy.h
minizip
modding
network
networkPacks
pathfinder
rewardable
rmg
serializer
spells
texts
vstd
AI_Base.h
ArtifactUtils.cpp
ArtifactUtils.h
BasicTypes.cpp
BattleFieldHandler.cpp
BattleFieldHandler.h
CAndroidVMHelper.cpp
CAndroidVMHelper.h
CArtHandler.cpp
CArtHandler.h
CArtifactInstance.cpp
CArtifactInstance.h
CBonusTypeHandler.cpp
CBonusTypeHandler.h
CConfigHandler.cpp
CConfigHandler.h
CConsoleHandler.cpp
CConsoleHandler.h
CCreatureHandler.cpp
CCreatureHandler.h
CCreatureSet.cpp
CCreatureSet.h
CGameInfoCallback.cpp
CGameInfoCallback.h
CGameInterface.cpp
CGameInterface.h
CHeroHandler.cpp
CHeroHandler.h
CMakeLists.txt
CPlayerState.cpp
CPlayerState.h
CRandomGenerator.cpp
CRandomGenerator.h
CScriptingModule.cpp
CScriptingModule.h
CSkillHandler.cpp
CSkillHandler.h
CSoundBase.h
CStack.cpp
CStack.h
CStopWatch.h
CThreadHelper.cpp
CThreadHelper.h
Color.h
ConstTransitivePtr.h
ExceptionsCommon.h
ExtraOptionsInfo.cpp
ExtraOptionsInfo.h
FunctionList.h
GameCallbackHolder.h
GameConstants.h
GameSettings.cpp
GameSettings.h
IBonusTypeHandler.h
IGameCallback.cpp
IGameCallback.h
IGameEventsReceiver.h
IHandlerBase.cpp
IHandlerBase.h
LoadProgress.cpp
LoadProgress.h
LogicalExpression.cpp
LogicalExpression.h
ObstacleHandler.cpp
ObstacleHandler.h
Point.h
Rect.cpp
Rect.h
ResourceSet.cpp
ResourceSet.h
RiverHandler.cpp
RiverHandler.h
RoadHandler.cpp
RoadHandler.h
ScopeGuard.h
ScriptHandler.cpp
ScriptHandler.h
StartInfo.cpp
StartInfo.h
StdInc.cpp
StdInc.h
TerrainHandler.cpp
TerrainHandler.h
TurnTimerInfo.cpp
TurnTimerInfo.h
UnlockGuard.h
VCMIDirs.cpp
VCMIDirs.h
VCMI_Lib.cpp
VCMI_Lib.h
int3.h
vcmi_endian.h
lobby
mapeditor
osx
rpm
scripting
scripts
server
serverapp
test
win
xcode
.gitattributes
.gitignore
.gitmodules
.travis.yml
AUTHORS.h
CCallback.cpp
CCallback.h
CMakeLists.txt
CMakePresets.json
ChangeLog.md
Global.h
Version.cpp.in
Version.h
conanfile.py
fuzzylite.pc.in
license.txt
vcmibuilder
vcmi/lib/mapping/CDrawRoadsOperation.h

99 lines
2.7 KiB
C++
Raw Normal View History

/*
* CDrawRoadsOperation.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 "CMapOperation.h"
VCMI_LIB_NAMESPACE_BEGIN
struct TerrainTile;
class CDrawLinesOperation : public CMapOperation
{
public:
void execute() override;
void undo() override;
void redo() override;
protected:
struct LinePattern
{
std::string data[9];
std::pair<int, int> roadMapping;
std::pair<int, int> riverMapping;
bool hasHFlip;
bool hasVFlip;
};
struct ValidationResult
{
ValidationResult(bool result): result(result), flip(0){};
bool result;
int flip;
};
2023-02-11 19:30:06 +03:00
CDrawLinesOperation(CMap * map, CTerrainSelection terrainSel, vstd::RNG * gen);
2023-02-11 19:30:06 +03:00
virtual void executeTile(TerrainTile & tile) = 0;
virtual bool canApplyPattern(const CDrawLinesOperation::LinePattern & pattern) const = 0;
virtual bool needUpdateTile(const TerrainTile & tile) const = 0;
virtual bool tileHasSomething(const int3 & pos) const = 0;
virtual void updateTile(TerrainTile & tile, const CDrawLinesOperation::LinePattern & pattern, const int flip) = 0;
static const std::vector<LinePattern> patterns;
void flipPattern(LinePattern & pattern, int flip) const;
void updateTiles(std::set<int3> & invalidated);
ValidationResult validateTile(const LinePattern & pattern, const int3 & pos);
CTerrainSelection terrainSel;
vstd::RNG * gen;
};
class CDrawRoadsOperation : public CDrawLinesOperation
{
public:
CDrawRoadsOperation(CMap * map, const CTerrainSelection & terrainSel, RoadId roadType, vstd::RNG * gen);
std::string getLabel() const override;
protected:
void executeTile(TerrainTile & tile) override;
bool canApplyPattern(const CDrawLinesOperation::LinePattern & pattern) const override;
bool needUpdateTile(const TerrainTile & tile) const override;
bool tileHasSomething(const int3 & pos) const override;
void updateTile(TerrainTile & tile, const CDrawLinesOperation::LinePattern & pattern, const int flip) override;
private:
2022-09-29 11:44:46 +02:00
RoadId roadType;
};
class CDrawRiversOperation : public CDrawLinesOperation
{
public:
CDrawRiversOperation(CMap * map, const CTerrainSelection & terrainSel, RiverId roadType, vstd::RNG * gen);
std::string getLabel() const override;
protected:
void executeTile(TerrainTile & tile) override;
bool canApplyPattern(const CDrawLinesOperation::LinePattern & pattern) const override;
bool needUpdateTile(const TerrainTile & tile) const override;
bool tileHasSomething(const int3 & pos) const override;
void updateTile(TerrainTile & tile, const CDrawLinesOperation::LinePattern & pattern, const int flip) override;
private:
2022-09-29 11:44:46 +02:00
RiverId riverType;
};
VCMI_LIB_NAMESPACE_END