1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

Minor changes

This commit is contained in:
nordsoft 2023-04-19 02:11:24 +04:00
parent 22da7a931d
commit 008db447e7
5 changed files with 34 additions and 4 deletions

View File

@ -122,6 +122,8 @@
"layer" : "sail",
"actualAnimation" : "AB01_.def",
"overlayAnimation" : "ABM01_.def",
"onboardAssaultAllowed" : true,
"onboardVisitAllowed" : true,
"flagAnimations" : ["ABF01L", "ABF01G", "ABF01R", "ABF01D", "ABF01B", "ABF01P", "ABF01W", "ABF01K"]
},
"good" :
@ -131,6 +133,8 @@
"layer" : "sail",
"actualAnimation" : "AB02_.def",
"overlayAnimation" : "ABM02_.def",
"onboardAssaultAllowed" : true,
"onboardVisitAllowed" : true,
"flagAnimations" : ["ABF02L", "ABF02G", "ABF02R", "ABF02D", "ABF02B", "ABF02P", "ABF02W", "ABF02K"]
},
"neutral" : {
@ -139,6 +143,8 @@
"layer" : "sail",
"actualAnimation" : "AB03_.def",
"overlayAnimation" : "ABM03_.def",
"onboardAssaultAllowed" : true,
"onboardVisitAllowed" : true,
"flagAnimations" : ["ABF03L", "ABF03G", "ABF03R", "ABF03D", "ABF03B", "ABF03P", "ABF03W", "ABF03K"]
},
}

View File

@ -264,6 +264,8 @@ void BoatInstanceConstructor::initTypeData(const JsonNode & input)
int pos = vstd::find_pos(NPathfindingLayer::names, input["layer"].String());
if(pos != -1)
layer = EPathfindingLayer(pos);
onboardAssaultAllowed = input["onboardAssaultAllowed"].Bool();
onboardVisitAllowed = input["onboardVisitAllowed"].Bool();
actualAnimation = input["actualAnimation"].String();
overlayAnimation = input["overlayAnimation"].String();
for(int i = 0; i < flagAnimations.size() && i < input["flagAnimations"].Vector().size(); ++i)

View File

@ -147,6 +147,8 @@ protected:
std::vector<Bonus> bonuses;
EPathfindingLayer layer;
bool onboardAssaultAllowed; //if true, hero can attack units from transport
bool onboardVisitAllowed; //if true, hero can visit objects from transport
std::string actualAnimation; //for OH3 boats those have actual animations
std::string overlayAnimation; //waves animations
@ -159,6 +161,13 @@ public:
template <typename Handler> void serialize(Handler &h, const int version)
{
h & static_cast<CDefaultObjectTypeHandler<CGBoat>&>(*this);
h & layer;
h & onboardAssaultAllowed;
h & onboardVisitAllowed;
h & bonuses;
h & actualAnimation;
h & overlayAnimation;
h & flagAnimations;
}
};

View File

@ -419,7 +419,8 @@ class DLL_LINKAGE CGBoat : public CGObjectInstance, public CBonusSystemNode
public:
ui8 direction;
const CGHeroInstance *hero; //hero on board
bool onboardAssaultAllowed; //if true, hero can attack units from transport
bool onboardVisitAllowed; //if true, hero can visit objects from transport
EPathfindingLayer::EEPathfindingLayer layer;
//animation filenames. If empty - animations won't be used
@ -442,6 +443,8 @@ public:
h & direction;
h & hero;
h & layer;
h & onboardAssaultAllowed;
h & onboardVisitAllowed;
h & actualAnimation;
h & overlayAnimation;
h & flagAnimations;

View File

@ -2364,10 +2364,16 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
{
for (CGObjectInstance *obj : t.visitableObjects)
{
if (obj != h && obj->blockVisit && !obj->passableFor(h->tempOwner))
if(h->boat && !obj->blockVisit && !h->boat->onboardVisitAllowed)
return doMove(TryMoveHero::SUCCESS, this->IGNORE_GUARDS, DONT_VISIT_DEST, REMAINING_ON_TILE);
if (obj != h && obj->blockVisit && !obj->passableFor(h->tempOwner))
{
return doMove(TryMoveHero::BLOCKING_VISIT, this->IGNORE_GUARDS, VISIT_DEST, REMAINING_ON_TILE);
//this-> is needed for MVS2010 to recognize scope (?)
EVisitDest visitDest = VISIT_DEST;
if(h->boat && !h->boat->onboardVisitAllowed)
visitDest = DONT_VISIT_DEST;
return doMove(TryMoveHero::BLOCKING_VISIT, this->IGNORE_GUARDS, visitDest, REMAINING_ON_TILE);
}
}
return false;
@ -2406,6 +2412,7 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
return true;
}
//still here? it is standard movement!
{
tmh.movePoints = (int)h->movement >= cost
@ -2428,6 +2435,9 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
else if (blockingVisit())
return true;
if(h->boat && !h->boat->onboardAssaultAllowed)
lookForGuards = IGNORE_GUARDS;
doMove(TryMoveHero::SUCCESS, lookForGuards, visitDest, LEAVING_TILE);
return true;
}