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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user