1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Map objects now use shared_ptr (game)

This commit is contained in:
Ivan Savenko
2025-03-13 19:42:18 +00:00
parent 2ca1748e96
commit 0ada2a5ebd
49 changed files with 487 additions and 613 deletions

View File

@@ -116,7 +116,7 @@ public:
/// Creates object and set up core properties (like ID/subID). Object is NOT initialized
/// to allow creating objects before game start (e.g. map loading)
virtual CGObjectInstance * create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const = 0;
virtual std::shared_ptr<CGObjectInstance> create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const = 0;
/// Configures object properties. Should be re-entrable, resetting state of the object if necessarily
/// This should set remaining properties, including randomized or depending on map

View File

@@ -27,16 +27,16 @@ class CDefaultObjectTypeHandler : public AObjectTypeHandler
randomizeObject(castedObject, rng);
}
CGObjectInstance * create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const final
std::shared_ptr<CGObjectInstance> create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const final
{
ObjectType * result = createObject(cb);
auto result = createObject(cb);
preInitObject(result);
preInitObject(result.get());
if(tmpl)
result->appearance = tmpl;
initializeObject(result);
initializeObject(result.get());
return result;
}
@@ -44,9 +44,9 @@ class CDefaultObjectTypeHandler : public AObjectTypeHandler
protected:
virtual void initializeObject(ObjectType * object) const {}
virtual void randomizeObject(ObjectType * object, vstd::RNG & rng) const {}
virtual ObjectType * createObject(IGameCallback * cb) const
virtual std::shared_ptr<ObjectType> createObject(IGameCallback * cb) const
{
return new ObjectType(cb);
return std::make_shared<ObjectType>(cb);
}
};

View File

@@ -37,10 +37,10 @@ bool CRewardableConstructor::hasNameTextID() const
return !objectInfo.getParameters()["name"].isNull();
}
CGObjectInstance * CRewardableConstructor::create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const
std::shared_ptr<CGObjectInstance> CRewardableConstructor::create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const
{
auto * ret = new CRewardableObject(cb);
preInitObject(ret);
auto ret = std::make_shared<CRewardableObject>(cb);
preInitObject(ret.get());
ret->appearance = tmpl;
ret->blockVisit = blockVisit;
return ret;

View File

@@ -25,7 +25,7 @@ class DLL_LINKAGE CRewardableConstructor : public AObjectTypeHandler
public:
bool hasNameTextID() const override;
CGObjectInstance * create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl = nullptr) const override;
std::shared_ptr<CGObjectInstance> create(IGameCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl = nullptr) const override;
void configureObject(CGObjectInstance * object, vstd::RNG & rng) const override;

View File

@@ -320,7 +320,7 @@ bool MarketInstanceConstructor::hasDescription() const
return !descriptionTextID.empty();
}
CGMarket * MarketInstanceConstructor::createObject(IGameCallback * cb) const
std::shared_ptr<CGMarket> MarketInstanceConstructor::createObject(IGameCallback * cb) const
{
if(marketModes.size() == 1)
{
@@ -328,13 +328,13 @@ CGMarket * MarketInstanceConstructor::createObject(IGameCallback * cb) const
{
case EMarketMode::ARTIFACT_RESOURCE:
case EMarketMode::RESOURCE_ARTIFACT:
return new CGBlackMarket(cb);
return std::make_shared<CGBlackMarket>(cb);
case EMarketMode::RESOURCE_SKILL:
return new CGUniversity(cb);
return std::make_shared<CGUniversity>(cb);
}
}
return new CGMarket(cb);
return std::make_shared<CGMarket>(cb);
}
const std::set<EMarketMode> & MarketInstanceConstructor::availableModes() const

View File

@@ -137,7 +137,7 @@ class MarketInstanceConstructor : public CDefaultObjectTypeHandler<CGMarket>
void initTypeData(const JsonNode & config) override;
public:
CGMarket * createObject(IGameCallback * cb) const override;
std::shared_ptr<CGMarket> createObject(IGameCallback * cb) const override;
void randomizeObject(CGMarket * object, vstd::RNG & rng) const override;
const std::set<EMarketMode> & availableModes() const;