1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

Merge pull request #4837 from godric3/map-editor-set-hero-patrol-radius

Possibility to set hero patrol radius in map editor
This commit is contained in:
Ivan Savenko 2024-10-30 13:32:25 +02:00 committed by GitHub
commit 88a9890b56
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 9 deletions

View File

@ -49,6 +49,8 @@
VCMI_LIB_NAMESPACE_BEGIN
const ui32 CGHeroInstance::NO_PATROLLING = std::numeric_limits<ui32>::max();
void CGHeroPlaceholder::serializeJsonOptions(JsonSerializeFormat & handler)
{
serializeJsonOwner(handler);
@ -1749,21 +1751,20 @@ void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat & handler)
CArmedInstance::serializeJsonOptions(handler);
{
static constexpr int NO_PATROLING = -1;
int rawPatrolRadius = NO_PATROLING;
ui32 rawPatrolRadius = NO_PATROLLING;
if(handler.saving)
{
rawPatrolRadius = patrol.patrolling ? patrol.patrolRadius : NO_PATROLING;
rawPatrolRadius = patrol.patrolling ? patrol.patrolRadius : NO_PATROLLING;
}
handler.serializeInt("patrolRadius", rawPatrolRadius, NO_PATROLING);
handler.serializeInt("patrolRadius", rawPatrolRadius, NO_PATROLLING);
if(!handler.saving)
{
patrol.patrolling = (rawPatrolRadius > NO_PATROLING);
patrol.patrolling = (rawPatrolRadius != NO_PATROLLING);
patrol.initialPos = visitablePos();
patrol.patrolRadius = (rawPatrolRadius > NO_PATROLING) ? rawPatrolRadius : 0;
patrol.patrolRadius = patrol.patrolling ? rawPatrolRadius : 0;
}
}
}

View File

@ -92,6 +92,7 @@ public:
static constexpr si32 UNINITIALIZED_MANA = -1;
static constexpr ui32 UNINITIALIZED_MOVEMENT = -1;
static constexpr auto UNINITIALIZED_EXPERIENCE = std::numeric_limits<TExpType>::max();
static const ui32 NO_PATROLLING;
//std::vector<const CArtifact*> artifacts; //hero's artifacts from bag
//std::map<ui16, const CArtifact*> artifWorn; //map<position,artifact_id>; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5
@ -99,10 +100,9 @@ public:
struct DLL_LINKAGE Patrol
{
Patrol(){patrolling=false;initialPos=int3();patrolRadius=-1;};
bool patrolling;
bool patrolling{false};
int3 initialPos;
ui32 patrolRadius;
ui32 patrolRadius{NO_PATROLLING};
template <typename Handler> void serialize(Handler &h)
{
h & patrolling;

View File

@ -335,6 +335,15 @@ void Inspector::updateProperties(CGHeroInstance * o)
}
addProperty("Hero type", o->getHeroTypeID().hasValue() ? o->getHeroType()->getNameTranslated() : "", delegate, false);
}
{
const int maxRadius = 60;
auto * patrolDelegate = new InspectorDelegate;
patrolDelegate->options = { {QObject::tr("No patrol"), QVariant::fromValue(CGHeroInstance::NO_PATROLLING)} };
for(int i = 0; i <= maxRadius; ++i)
patrolDelegate->options.push_back({ QObject::tr("%n tile(s)", "", i), QVariant::fromValue(i)});
auto patrolRadiusText = o->patrol.patrolling ? QObject::tr("%n tile(s)", "", o->patrol.patrolRadius) : QObject::tr("No patrol");
addProperty("Patrol radius", patrolRadiusText, patrolDelegate, false);
}
}
void Inspector::updateProperties(CGTownInstance * o)
@ -711,6 +720,13 @@ void Inspector::setProperty(CGHeroInstance * o, const QString & key, const QVari
o->randomizeArmy(o->getHeroType()->heroClass->faction);
updateProperties(); //updating other properties after change
}
if(key == "Patrol radius")
{
auto radius = value.toInt();
o->patrol.patrolRadius = radius;
o->patrol.patrolling = radius != CGHeroInstance::NO_PATROLLING;
}
}
void Inspector::setProperty(CGShipyard * o, const QString & key, const QVariant & value)