mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-13 11:40:38 +02:00
Support rewardable objects
This commit is contained in:
parent
5637cdbe3f
commit
7dc05d8e81
@ -111,16 +111,35 @@ void CRandomRewardObjectInfo::configureObject(CRewardableObject * object, CRando
|
||||
|
||||
info.message = loadMessage(reward["message"]);
|
||||
info.selectChance = JsonRandom::loadValue(reward["selectChance"], rng);
|
||||
|
||||
object->info.push_back(info);
|
||||
}
|
||||
|
||||
object->onSelect = loadMessage(parameters["onSelectMessage"]);
|
||||
object->onVisited = loadMessage(parameters["onVisitedMessage"]);
|
||||
object->onEmpty = loadMessage(parameters["onEmptyMessage"]);
|
||||
|
||||
//TODO: visitMode and selectMode
|
||||
|
||||
object->resetDuration = static_cast<ui16>(parameters["resetDuration"].Float());
|
||||
object->canRefuse = parameters["canRefuse"].Bool();
|
||||
|
||||
auto visitMode = parameters["visitMode"].String();
|
||||
for(int i = 0; Rewardable::VisitModeString.size(); ++i)
|
||||
{
|
||||
if(Rewardable::VisitModeString[i] == visitMode)
|
||||
{
|
||||
object->visitMode = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
auto selectMode = parameters["selectMode"].String();
|
||||
for(int i = 0; Rewardable::SelectModeString.size(); ++i)
|
||||
{
|
||||
if(Rewardable::SelectModeString[i] == selectMode)
|
||||
{
|
||||
object->selectMode = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CRandomRewardObjectInfo::givesResources() const
|
||||
@ -179,7 +198,6 @@ CRewardableConstructor::CRewardableConstructor()
|
||||
|
||||
void CRewardableConstructor::initTypeData(const JsonNode & config)
|
||||
{
|
||||
AObjectTypeHandler::init(config);
|
||||
objectInfo.init(config);
|
||||
}
|
||||
|
||||
|
@ -446,6 +446,11 @@ void CRewardableObject::newTurn(CRandomGenerator & rand) const
|
||||
triggerRewardReset();
|
||||
}
|
||||
|
||||
void CRewardableObject::initObj(CRandomGenerator & rand)
|
||||
{
|
||||
VLC->objtypeh->getHandlerFor(ID, subID)->configureObject(this, rand);
|
||||
}
|
||||
|
||||
CRewardableObject::CRewardableObject():
|
||||
selectMode(0),
|
||||
visitMode(0),
|
||||
|
@ -175,6 +175,12 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
namespace Rewardable
|
||||
{
|
||||
const std::array<std::string, 3> SelectModeString{"selectFirst", "selectPlayer", "selectRandom"};
|
||||
const std::array<std::string, 5> VisitModeString{"unlimited", "once", "hero", "bonus", "player"};
|
||||
}
|
||||
|
||||
/// Base class that can handle granting rewards to visiting heroes.
|
||||
/// Inherits from CArmedInstance for proper trasfer of armies
|
||||
class DLL_LINKAGE CRewardableObject : public CArmedInstance
|
||||
@ -256,6 +262,8 @@ public:
|
||||
|
||||
/// function that will be called once reward is fully granted to hero
|
||||
virtual void onRewardGiven(const CGHeroInstance * hero) const;
|
||||
|
||||
void initObj(CRandomGenerator & rand) override;
|
||||
|
||||
CRewardableObject();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user