mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Support rewardable objects
This commit is contained in:
		
				
					committed by
					
						 Andrii Danylchenko
						Andrii Danylchenko
					
				
			
			
				
	
			
			
			
						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(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user