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

Add constructor for boat

This commit is contained in:
nordsoft 2023-04-18 17:27:39 +04:00
parent ed798b06da
commit d83566bc74
5 changed files with 42 additions and 1 deletions

View File

@ -39,6 +39,7 @@ CObjectClassesHandler::CObjectClassesHandler()
SET_HANDLER_CLASS("hero", CHeroInstanceConstructor);
SET_HANDLER_CLASS("town", CTownInstanceConstructor);
SET_HANDLER_CLASS("bank", CBankInstanceConstructor);
SET_HANDLER_CLASS("boat", BoatInstanceConstructor);
SET_HANDLER_CLASS("static", CObstacleConstructor);
SET_HANDLER_CLASS("", CObstacleConstructor);
@ -54,7 +55,6 @@ CObjectClassesHandler::CObjectClassesHandler()
SET_HANDLER("cartographer", CCartographer);
SET_HANDLER("artifact", CGArtifact);
SET_HANDLER("blackMarket", CGBlackMarket);
SET_HANDLER("boat", CGBoat);
SET_HANDLER("borderGate", CGBorderGate);
SET_HANDLER("borderGuard", CGBorderGuard);
SET_HANDLER("monster", CGCreature);

View File

@ -257,6 +257,26 @@ std::vector<const CCreature *> CDwellingInstanceConstructor::getProducedCreature
return creatures;
}
void BoatInstanceConstructor::initTypeData(const JsonNode & input)
{
layer = EPathfindingLayer::EEPathfindingLayer::SAIL;
if(input["layer"].String() == "land")
layer = EPathfindingLayer::EEPathfindingLayer::LAND;
if(input["layer"].String() == "air")
layer = EPathfindingLayer::EEPathfindingLayer::AIR;
if(input["layer"].String() == "water")
layer = EPathfindingLayer::EEPathfindingLayer::WATER;
if(input["layer"].String() == "sail")
layer = EPathfindingLayer::EEPathfindingLayer::SAIL;
}
CGObjectInstance * BoatInstanceConstructor::create(std::shared_ptr<const ObjectTemplate> tmpl) const
{
CGBoat * boat = createTyped(tmpl);
boat->layer = layer;
return boat;
}
bool CBankInstanceConstructor::hasNameTextID() const
{
return true;

View File

@ -140,6 +140,22 @@ public:
}
};
class BoatInstanceConstructor : public CDefaultObjectTypeHandler<CGBoat>
{
protected:
void initTypeData(const JsonNode & config) override;
EPathfindingLayer::EEPathfindingLayer layer;
public:
CGObjectInstance * create(std::shared_ptr<const ObjectTemplate> tmpl = nullptr) const override;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & static_cast<CDefaultObjectTypeHandler<CGBoat>&>(*this);
}
};
struct BankConfig
{
ui32 value = 0; //overall value of given things

View File

@ -419,6 +419,8 @@ class DLL_LINKAGE CGBoat : public CGObjectInstance
public:
ui8 direction;
const CGHeroInstance *hero; //hero on board
EPathfindingLayer::EEPathfindingLayer layer;
void initObj(CRandomGenerator & rand) override;
@ -426,12 +428,14 @@ public:
{
hero = nullptr;
direction = 4;
layer = EPathfindingLayer::EEPathfindingLayer::SAIL;
}
template <typename Handler> void serialize(Handler &h, const int version)
{
h & static_cast<CGObjectInstance&>(*this);
h & direction;
h & hero;
h & layer;
}
};

View File

@ -88,6 +88,7 @@ void registerTypesMapObjectTypes(Serializer &s)
s.template registerType<AObjectTypeHandler, CTownInstanceConstructor>();
s.template registerType<AObjectTypeHandler, CDwellingInstanceConstructor>();
s.template registerType<AObjectTypeHandler, CBankInstanceConstructor>();
s.template registerType<AObjectTypeHandler, BoatInstanceConstructor>();
s.template registerType<AObjectTypeHandler, CObstacleConstructor>();
#define REGISTER_GENERIC_HANDLER(TYPENAME) s.template registerType<AObjectTypeHandler, CDefaultObjectTypeHandler<TYPENAME> >()