mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	class CArtifactsOfHeroMain : public CKeyShortcut
This commit is contained in:
		| @@ -314,20 +314,12 @@ CKeyShortcut::CKeyShortcut(EShortcut key) | ||||
| { | ||||
| } | ||||
|  | ||||
| CKeyShortcut::CKeyShortcut(const EShortcut & key, const KeyPressedFunctor & keyPressedCallback) | ||||
| 	: CKeyShortcut(key) | ||||
| { | ||||
| 	this->keyPressedCallback = keyPressedCallback; | ||||
| } | ||||
|  | ||||
| void CKeyShortcut::keyPressed(EShortcut key) | ||||
| { | ||||
| 	if( assignedKey == key && assignedKey != EShortcut::NONE && !shortcutPressed) | ||||
| 	{ | ||||
| 		shortcutPressed = true; | ||||
| 		clickPressed(GH.getCursorPosition()); | ||||
| 		if(keyPressedCallback) | ||||
| 			keyPressedCallback(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -134,18 +134,12 @@ public: | ||||
| class CKeyShortcut : public virtual CIntObject | ||||
| { | ||||
| public: | ||||
| 	using KeyPressedFunctor = std::function<void()>; | ||||
|  | ||||
| 	bool shortcutPressed; | ||||
| 	EShortcut assignedKey; | ||||
| 	CKeyShortcut(); | ||||
| 	CKeyShortcut(EShortcut key); | ||||
| 	CKeyShortcut(const EShortcut & key, const KeyPressedFunctor & keyPressedCallback); | ||||
| 	void keyPressed(EShortcut key) override; | ||||
| 	void keyReleased(EShortcut key) override; | ||||
|  | ||||
| private: | ||||
| 	bool shortcutPressed; | ||||
| 	KeyPressedFunctor keyPressedCallback; | ||||
| }; | ||||
|  | ||||
| class WindowBase : public CIntObject | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
|  | ||||
| class CButton; | ||||
|  | ||||
| class CArtifactsOfHeroBase : public CIntObject | ||||
| class CArtifactsOfHeroBase : virtual public CIntObject | ||||
| { | ||||
| protected: | ||||
| 	using ArtPlacePtr = std::shared_ptr<CHeroArtPlace>; | ||||
|   | ||||
| @@ -35,15 +35,56 @@ CArtifactsOfHeroMain::~CArtifactsOfHeroMain() | ||||
|  | ||||
| void CArtifactsOfHeroMain::enableArtifactsCostumeSwitcher() | ||||
| { | ||||
| 	size_t costumeIdx = 0; | ||||
| 	for(const auto & hotkey : costumesSwitcherHotkeys) | ||||
| 	addUsedEvents(AEventsReceiver::KEYBOARD); | ||||
| } | ||||
|  | ||||
| void CArtifactsOfHeroMain::keyPressed(EShortcut key) | ||||
| { | ||||
| 	if(!shortcutPressed) | ||||
| 	{ | ||||
| 		auto keyProc = costumesSwitcherProcessors.emplace_back(std::make_shared<CKeyShortcut>(hotkey, | ||||
| 			[this, costumeIdx]() | ||||
| 			{ | ||||
| 				LOCPLINT->cb->manageHeroCostume(getHero()->id, costumeIdx, GH.isKeyboardCtrlDown()); | ||||
| 			})); | ||||
| 		keyProc->addUsedEvents(AEventsReceiver::KEYBOARD); | ||||
| 		costumeIdx++; | ||||
| 		uint32_t costumeIdx; | ||||
| 		switch(key) | ||||
| 		{ | ||||
| 		case EShortcut::HERO_COSTUME_0: | ||||
| 			costumeIdx = 0; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_1: | ||||
| 			costumeIdx = 1; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_2: | ||||
| 			costumeIdx = 2; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_3: | ||||
| 			costumeIdx = 3; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_4: | ||||
| 			costumeIdx = 4; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_5: | ||||
| 			costumeIdx = 5; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_6: | ||||
| 			costumeIdx = 6; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_7: | ||||
| 			costumeIdx = 7; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_8: | ||||
| 			costumeIdx = 8; | ||||
| 			break; | ||||
| 		case EShortcut::HERO_COSTUME_9: | ||||
| 			costumeIdx = 9; | ||||
| 			break; | ||||
| 		default: | ||||
| 			return; | ||||
| 		} | ||||
| 		shortcutPressed = true; | ||||
| 		LOCPLINT->cb->manageHeroCostume(getHero()->id, costumeIdx, GH.isKeyboardCtrlDown()); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void CArtifactsOfHeroMain::keyReleased(EShortcut key) | ||||
| { | ||||
| 	if(vstd::contains(costumesSwitcherHotkeys, key)) | ||||
| 		shortcutPressed = false; | ||||
| } | ||||
|   | ||||
| @@ -13,12 +13,14 @@ | ||||
|  | ||||
| #include "../gui/Shortcut.h" | ||||
|  | ||||
| class CArtifactsOfHeroMain : public CArtifactsOfHeroBase | ||||
| class CArtifactsOfHeroMain : public CArtifactsOfHeroBase, public CKeyShortcut | ||||
| { | ||||
| public: | ||||
| 	CArtifactsOfHeroMain(const Point & position); | ||||
| 	~CArtifactsOfHeroMain() override; | ||||
| 	void enableArtifactsCostumeSwitcher(); | ||||
| 	void keyPressed(EShortcut key) override; | ||||
| 	void keyReleased(EShortcut key) override; | ||||
|  | ||||
| private: | ||||
| 	const std::vector<EShortcut> costumesSwitcherHotkeys = | ||||
| @@ -34,5 +36,4 @@ private: | ||||
| 		EShortcut::HERO_COSTUME_8, | ||||
| 		EShortcut::HERO_COSTUME_9 | ||||
| 	}; | ||||
| 	std::vector<std::shared_ptr<CKeyShortcut>> costumesSwitcherProcessors; | ||||
| }; | ||||
|   | ||||
| @@ -343,7 +343,7 @@ void CWindowWithArtifacts::deactivate() | ||||
| 	CWindowObject::deactivate(); | ||||
| } | ||||
|  | ||||
| void CWindowWithArtifacts::enableArtifactsCostumeSwitcher() | ||||
| void CWindowWithArtifacts::enableArtifactsCostumeSwitcher() const | ||||
| { | ||||
| 	for(auto artSet : artSets) | ||||
| 		std::visit( | ||||
|   | ||||
| @@ -42,7 +42,7 @@ public: | ||||
| 	void gestureArtPlaceHero(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition); | ||||
| 	void activate() override; | ||||
| 	void deactivate() override; | ||||
| 	void enableArtifactsCostumeSwitcher(); | ||||
| 	void enableArtifactsCostumeSwitcher() const; | ||||
|  | ||||
| 	virtual void artifactRemoved(const ArtifactLocation & artLoc); | ||||
| 	virtual void artifactMoved(const ArtifactLocation & srcLoc, const ArtifactLocation & destLoc, bool withRedraw); | ||||
|   | ||||
| @@ -249,7 +249,7 @@ class DLL_LINKAGE CArtifactFittingSet : public CArtifactSet | ||||
| { | ||||
| public: | ||||
| 	CArtifactFittingSet(ArtBearer::ArtBearer Bearer); | ||||
| 	CArtifactFittingSet(const CArtifactSet & artSet); | ||||
| 	explicit CArtifactFittingSet(const CArtifactSet & artSet); | ||||
| 	ArtBearer::ArtBearer bearerType() const override; | ||||
|  | ||||
| protected: | ||||
|   | ||||
| @@ -1078,7 +1078,7 @@ void ChangeArtifactsCostume::applyGs(CGameState * gs) const | ||||
| 	if(const auto & costume = allCostumes.find(costumeIdx); costume != allCostumes.end()) | ||||
| 		costume->second = costumeSet; | ||||
| 	else | ||||
| 		allCostumes.emplace(costumeIdx, costumeSet); | ||||
| 		allCostumes.try_emplace(costumeIdx, costumeSet); | ||||
| } | ||||
|  | ||||
| void PlayerEndsGame::applyGs(CGameState * gs) const | ||||
|   | ||||
| @@ -1291,14 +1291,14 @@ struct DLL_LINKAGE ChangeObjectVisitors : public CPackForClient | ||||
| struct DLL_LINKAGE ChangeArtifactsCostume : public CPackForClient | ||||
| { | ||||
| 	std::map<ArtifactPosition, ArtifactID> costumeSet; | ||||
| 	size_t costumeIdx = 0; | ||||
| 	uint32_t costumeIdx = 0; | ||||
| 	const PlayerColor player = PlayerColor::NEUTRAL; | ||||
|  | ||||
| 	void applyGs(CGameState * gs) const; | ||||
| 	void visitTyped(ICPackVisitor & visitor) override; | ||||
|  | ||||
| 	ChangeArtifactsCostume() = default; | ||||
| 	ChangeArtifactsCostume(const PlayerColor & player, const size_t costumeIdx) | ||||
| 	ChangeArtifactsCostume(const PlayerColor & player, const uint32_t costumeIdx) | ||||
| 		: costumeIdx(costumeIdx) | ||||
| 		, player(player) | ||||
| 	{ | ||||
|   | ||||
| @@ -432,7 +432,7 @@ struct DLL_LINKAGE ManageBackpackArtifacts : public CPackForServer | ||||
| struct DLL_LINKAGE ManageEquippedArtifacts : public CPackForServer | ||||
| { | ||||
| 	ManageEquippedArtifacts() = default; | ||||
| 	ManageEquippedArtifacts(const ObjectInstanceID & artHolder, const size_t costumeIdx, bool saveCostume = false) | ||||
| 	ManageEquippedArtifacts(const ObjectInstanceID & artHolder, const uint32_t costumeIdx, bool saveCostume = false) | ||||
| 		: artHolder(artHolder) | ||||
| 		, costumeIdx(costumeIdx) | ||||
| 		, saveCostume(saveCostume) | ||||
| @@ -440,7 +440,7 @@ struct DLL_LINKAGE ManageEquippedArtifacts : public CPackForServer | ||||
| 	} | ||||
|  | ||||
| 	ObjectInstanceID artHolder; | ||||
| 	size_t costumeIdx; | ||||
| 	uint32_t costumeIdx; | ||||
| 	bool saveCostume; | ||||
|  | ||||
| 	void visitTyped(ICPackVisitor & visitor) override; | ||||
|   | ||||
| @@ -2892,7 +2892,7 @@ bool CGameHandler::scrollBackpackArtifacts(const PlayerColor & player, const Obj | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| bool CGameHandler::saveArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, size_t costumeIdx) | ||||
| bool CGameHandler::saveArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, uint32_t costumeIdx) | ||||
| { | ||||
| 	auto artSet = getArtSet(heroID); | ||||
| 	COMPLAIN_RET_FALSE_IF(artSet == nullptr, "saveArtifactsCostume: wrong hero's ID"); | ||||
| @@ -2908,7 +2908,7 @@ bool CGameHandler::saveArtifactsCostume(const PlayerColor & player, const Object | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| bool CGameHandler::switchArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, size_t costumeIdx) | ||||
| bool CGameHandler::switchArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, uint32_t costumeIdx) | ||||
| { | ||||
| 	const auto artSet = getArtSet(heroID); | ||||
| 	COMPLAIN_RET_FALSE_IF(artSet == nullptr, "switchArtifactsCostume: wrong hero's ID"); | ||||
|   | ||||
| @@ -130,8 +130,8 @@ public: | ||||
| 	bool moveArtifact(const PlayerColor & player, const ArtifactLocation & src, const ArtifactLocation & dst) override; | ||||
| 	bool bulkMoveArtifacts(const PlayerColor & player, ObjectInstanceID srcId, ObjectInstanceID dstId, bool swap, bool equipped, bool backpack); | ||||
| 	bool scrollBackpackArtifacts(const PlayerColor & player, const ObjectInstanceID heroID, bool left); | ||||
| 	bool saveArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, size_t costumeIdx); | ||||
| 	bool switchArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, size_t costumeIdx); | ||||
| 	bool saveArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, uint32_t costumeIdx); | ||||
| 	bool switchArtifactsCostume(const PlayerColor & player, const ObjectInstanceID heroID, uint32_t costumeIdx); | ||||
| 	bool eraseArtifactByClient(const ArtifactLocation & al); | ||||
| 	void synchronizeArtifactHandlerLists(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user