mirror of
https://github.com/vcmi/vcmi.git
synced 2025-05-13 22:06:58 +02:00
Possibility to set hero patrol radius in map editor
This commit is contained in:
parent
3a45e6dae1
commit
a9e04428c8
@ -1749,21 +1749,20 @@ void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
CArmedInstance::serializeJsonOptions(handler);
|
||||
|
||||
{
|
||||
static constexpr int NO_PATROLING = -1;
|
||||
int rawPatrolRadius = NO_PATROLING;
|
||||
int 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 = (rawPatrolRadius > NO_PATROLLING) ? rawPatrolRadius : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 constexpr int NO_PATROLLING = -1;
|
||||
|
||||
//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,7 +100,7 @@ public:
|
||||
|
||||
struct DLL_LINKAGE Patrol
|
||||
{
|
||||
Patrol(){patrolling=false;initialPos=int3();patrolRadius=-1;};
|
||||
Patrol(){patrolling=false;initialPos=int3();patrolRadius=NO_PATROLLING;};
|
||||
bool patrolling;
|
||||
int3 initialPos;
|
||||
ui32 patrolRadius;
|
||||
|
@ -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("%1 tile(s)").arg(i), QVariant::fromValue(i) });
|
||||
auto patrolRadiusText = o->patrol.patrolling ? QObject::tr("%1 tile(s)").arg(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")
|
||||
{
|
||||
o->patrol.patrolRadius = value.toInt();
|
||||
if(o->patrol.patrolRadius != CGHeroInstance::NO_PATROLLING)
|
||||
o->patrol.patrolling = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Inspector::setProperty(CGShipyard * o, const QString & key, const QVariant & value)
|
||||
|
Loading…
x
Reference in New Issue
Block a user