mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	| @@ -1092,7 +1092,16 @@ void CAdvMapInt::fshowQuestlog() | ||||
| } | ||||
| void CAdvMapInt::fsleepWake() | ||||
| { | ||||
| 	const CGHeroInstance *h = curHero(); | ||||
| 	if (!h) | ||||
| 		return; | ||||
| 	bool newSleep = !isHeroSleeping(h); | ||||
| 	setHeroSleeping(h, newSleep); | ||||
| 	updateSleepWake(h); | ||||
| 	if (newSleep) | ||||
| 		fnextHero(); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::fmoveHero() | ||||
| {	 | ||||
| 	const CGHeroInstance *h = curHero(); | ||||
| @@ -1136,7 +1145,7 @@ void CAdvMapInt::fnextHero() | ||||
| 		i++; | ||||
| 		if(i >= LOCPLINT->wanderingHeroes.size()) | ||||
| 			i = 0; | ||||
| 	} while (!LOCPLINT->wanderingHeroes[i]->movement && i!=start); | ||||
| 	} while ((!LOCPLINT->wanderingHeroes[i]->movement || isHeroSleeping(LOCPLINT->wanderingHeroes[i])) && i!=start); | ||||
| 	heroList.select(i); | ||||
| } | ||||
|  | ||||
| @@ -1144,10 +1153,26 @@ void CAdvMapInt::fendTurn() | ||||
| { | ||||
| 	if(!LOCPLINT->makingTurn) | ||||
| 		return; | ||||
| 	if(LOCPLINT->cingconsole->active) | ||||
| 		LOCPLINT->cingconsole->deactivate(); | ||||
| 	LOCPLINT->makingTurn = false; | ||||
| 	LOCPLINT->cb->endTurn(); | ||||
|  | ||||
| 	for (int i = 0; i < LOCPLINT->wanderingHeroes.size(); i++) | ||||
| 		if (!isHeroSleeping(LOCPLINT->wanderingHeroes[i]) && (LOCPLINT->wanderingHeroes[i]->movement > 0)) // some other minimal threshold probably? | ||||
| 		{ | ||||
| 			LOCPLINT->showYesNoDialog(CGI->generaltexth->allTexts[55], std::vector<SComponent*>(), boost::bind(&CAdvMapInt::endingTurn, this), 0, false); | ||||
| 			return; | ||||
| 		} | ||||
| 	endingTurn(); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::updateSleepWake(const CGHeroInstance *h) | ||||
| { | ||||
| 	sleepWake.block(!h); | ||||
| 	if (!h) | ||||
| 		return;	 | ||||
| 	bool state = isHeroSleeping(h); | ||||
| 	sleepWake.setIndex(state ? 1 : 0, true); | ||||
| 	sleepWake.assignedKeys.clear(); | ||||
| 	sleepWake.assignedKeys.insert(state ? SDLK_w : SDLK_z); | ||||
| 	sleepWake.update(); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::activate() | ||||
| @@ -1239,6 +1264,23 @@ void CAdvMapInt::showAll(SDL_Surface *to) | ||||
| 	infoBar.showAll(to); | ||||
| 	LOCPLINT->cingconsole->show(to); | ||||
| } | ||||
|  | ||||
| bool CAdvMapInt::isHeroSleeping(const CGHeroInstance *hero) | ||||
| { | ||||
| 	if (!hero) | ||||
| 		return false; | ||||
|  | ||||
| 	return vstd::contains(LOCPLINT->sleepingHeroes, hero); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::setHeroSleeping(const CGHeroInstance *hero, bool sleep) | ||||
| { | ||||
| 	if (sleep) | ||||
| 		LOCPLINT->sleepingHeroes += hero; | ||||
| 	else | ||||
| 		LOCPLINT->sleepingHeroes -= hero; | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::show(SDL_Surface *to) | ||||
| { | ||||
| 	if(state != INGAME) | ||||
| @@ -1506,6 +1548,8 @@ void CAdvMapInt::select(const CArmedInstance *sel, bool centerView /*= true*/) | ||||
| 	terrain.currentPath = NULL; | ||||
| 	if(sel->ID==TOWNI_TYPE) | ||||
| 	{ | ||||
| 		updateSleepWake(NULL); | ||||
|  | ||||
| 		int pos = vstd::findPos(LOCPLINT->towns,sel); | ||||
| 		townList.selected = pos; | ||||
| 		townList.fixPos(); | ||||
| @@ -1514,6 +1558,8 @@ void CAdvMapInt::select(const CArmedInstance *sel, bool centerView /*= true*/) | ||||
| 	{ | ||||
| 		const CGHeroInstance *h = static_cast<const CGHeroInstance*>(sel); | ||||
|  | ||||
| 		updateSleepWake(h); | ||||
|  | ||||
| 		if(LOCPLINT->getWHero(heroList.selected) != h) | ||||
| 		{ | ||||
| 			heroList.selected = heroList.getPosOfHero(h); | ||||
| @@ -1604,6 +1650,14 @@ void CAdvMapInt::startTurn() | ||||
| 	state = INGAME; | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::endingTurn() | ||||
| { | ||||
| 	if(LOCPLINT->cingconsole->active) | ||||
| 		LOCPLINT->cingconsole->deactivate(); | ||||
| 	LOCPLINT->makingTurn = false; | ||||
| 	LOCPLINT->cb->endTurn(); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::tileLClicked(const int3 &mp) | ||||
| { | ||||
| 	if(!LOCPLINT->cb->isVisible(mp) || !LOCPLINT->makingTurn) | ||||
|   | ||||
| @@ -233,9 +233,13 @@ public: | ||||
| 	void mouseMoved (const SDL_MouseMotionEvent & sEvent); | ||||
| 	bool isActive(); | ||||
|  | ||||
| 	bool isHeroSleeping(const CGHeroInstance *hero); | ||||
| 	void setHeroSleeping(const CGHeroInstance *hero, bool sleep); | ||||
|  | ||||
| 	void setPlayer(int Player); | ||||
| 	void startHotSeatWait(int Player); | ||||
| 	void startTurn(); | ||||
| 	void endingTurn(); | ||||
| 	void tileLClicked(const int3 &mp); | ||||
| 	void tileHovered(const int3 &tile); | ||||
| 	void tileRClicked(const int3 &mp); | ||||
| @@ -244,6 +248,7 @@ public: | ||||
| 	const CGHeroInstance * curHero() const; | ||||
| 	const CGTownInstance * curTown() const; | ||||
| 	const IShipyard * ourInaccessibleShipyard(const CGObjectInstance *obj) const; //checks if obj is our ashipyard and cursor is 0,0 -> returns shipyard or NULL else | ||||
| 	void updateSleepWake(const CGHeroInstance *h); //button update | ||||
| }; | ||||
|  | ||||
| extern CAdvMapInt *adventureInt; | ||||
|   | ||||
| @@ -1094,6 +1094,23 @@ template <typename Handler> void CPlayerInterface::serializeTempl( Handler &h, c | ||||
| 	h & playerID; | ||||
| 	h & sysOpts; | ||||
| 	h & spellbookSettings; | ||||
|  | ||||
| 	ui8 sleepingSize; | ||||
| 	if(h.saving) | ||||
| 		sleepingSize = sleepingHeroes.size(); | ||||
| 	h & sleepingSize; | ||||
| 	for (int i = 0; i < sleepingSize; i++) | ||||
| 	{ | ||||
| 		si32 hid; | ||||
| 		if (h.saving) | ||||
| 			hid = sleepingHeroes[i]->id; | ||||
| 		h &	hid; | ||||
| 		if (!h.saving) | ||||
| 		{ | ||||
| 			const CGHeroInstance *hero = cb->getHero(hid); | ||||
| 			sleepingHeroes += hero;	 | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void CPlayerInterface::serialize( COSer<CSaveFile> &h, const int version ) | ||||
| @@ -1115,6 +1132,15 @@ bool CPlayerInterface::moveHero( const CGHeroInstance *h, CGPath path ) | ||||
| 	if (!h) | ||||
| 		return false; //can't find hero | ||||
|  | ||||
| 	if (adventureInt && adventureInt->isHeroSleeping(h)) | ||||
| 	{ | ||||
| 		adventureInt->sleepWake.clickLeft(true, false); | ||||
| 		adventureInt->sleepWake.clickLeft(false, true); | ||||
| 		//could've just called  | ||||
| 		//adventureInt->fsleepWake(); | ||||
| 		//but no authentic button click/sound ;-) | ||||
| 	} | ||||
| 	 | ||||
| 	//evil... | ||||
| 	eventsM.unlock(); | ||||
| 	pim->unlock(); | ||||
|   | ||||
| @@ -141,6 +141,7 @@ public: | ||||
| 	std::vector<const CGHeroInstance *> wanderingHeroes; //our heroes on the adventure map (not the garrisoned ones) | ||||
| 	std::vector<const CGTownInstance *> towns; //our heroes on the adventure map (not the garrisoned ones) | ||||
| 	std::map<const CGHeroInstance *, CGPath> paths; //maps hero => selected path in adventure map | ||||
| 	std::vector<const CGHeroInstance *> sleepingHeroes;  | ||||
|  | ||||
| 	struct SpellbookLastSetting | ||||
| 	{ | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 679, "y": 196, "graphic": "IAM002.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 711, "y": 196, "graphic": "IAM010.DEF", "playerColoured": 1, "additionalDefs": [ "IAM003.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 679, "y": 228, "graphic": "IAM004.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 711, "y": 228, "graphic": "IAM005.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 711, "y": 228, "graphic": "IAM005.DEF", "playerColoured": 1, "additionalDefs":["IAM011.DEF"] }, | ||||
| 				"ButtonMoveHero": { "x": 679, "y": 260, "graphic": "IAM006.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 711, "y": 260, "graphic": "IAM007.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 679, "y": 292, "graphic": "IAM008.DEF", "playerColoured": 1 }, | ||||
| @@ -48,7 +48,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 903, "y": 196, "graphic": "IAM002.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 935, "y": 196, "graphic": "IAM010.DEF", "playerColoured": 1, "additionalDefs": [ "IAM003.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 903, "y": 228, "graphic": "IAM004.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 935, "y": 228, "graphic": "IAM005.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 935, "y": 228, "graphic": "IAM005.DEF", "playerColoured": 1, "additionalDefs":["IAM011.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 903, "y": 260, "graphic": "IAM006.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 935, "y": 260, "graphic": "IAM007.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 903, "y": 292, "graphic": "IAM008.DEF", "playerColoured": 1 }, | ||||
| @@ -76,7 +76,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 903, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 903, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 903, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 903, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 903, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"] }, | ||||
| 				"ButtonMoveHero": { "x": 903, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 903, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 903, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -103,7 +103,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1159, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 1159, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 1159, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1159, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1159, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 1159, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 1159, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 1159, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -131,7 +131,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1159, "y": 196, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 1159, "y": 228, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 1159, "y": 260, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1159, "y": 292, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1159, "y": 292, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 1159, "y": 324, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 1159, "y": 355, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 1159, "y": 388, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -159,7 +159,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1245, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 1245, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 1245, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1245, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1245, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 1245, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 1245, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 1245, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -187,7 +187,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1319, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 1319, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 1319, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1319, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1319, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 1319, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 1319, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 1319, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -215,7 +215,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1479, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonUnderground": { "x": 1479, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] }, | ||||
| 				"ButtonQuestLog": { "x": 1479, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1479, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSleepWake": { "x": 1479, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  }, | ||||
| 				"ButtonMoveHero": { "x": 1479, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonSpellbook": { "x": 1479, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 }, | ||||
| 				"ButtonAdvOptions": { "x": 1479, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 }, | ||||
| @@ -243,7 +243,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1559, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonUnderground": { "x": 1559, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": ["IAM003L.DEF" ] },  | ||||
| 				"ButtonQuestLog": { "x": 1559, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSleepWake": { "x": 1559, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSleepWake": { "x": 1559, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  },  | ||||
| 				"ButtonMoveHero": { "x": 1559, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSpellbook": { "x": 1559, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonAdvOptions": { "x": 1559, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 },  | ||||
| @@ -271,7 +271,7 @@ | ||||
| 				"ButtonKingdomOv": { "x": 1799, "y": 197, "graphic": "IAM002L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonUnderground": { "x": 1799, "y": 229, "graphic": "IAM010L.DEF", "playerColoured": 1, "additionalDefs": [ "IAM003L.DEF" ] },  | ||||
| 				"ButtonQuestLog": { "x": 1799, "y": 261, "graphic": "IAM004L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSleepWake": { "x": 1799, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSleepWake": { "x": 1799, "y": 293, "graphic": "IAM005L.DEF", "playerColoured": 1, "additionalDefs":["IAM011L.DEF"]  },  | ||||
| 				"ButtonMoveHero": { "x": 1799, "y": 326, "graphic": "IAM006L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonSpellbook": { "x": 1799, "y": 359, "graphic": "IAM007L.DEF", "playerColoured": 1 },  | ||||
| 				"ButtonAdvOptions": { "x": 1799, "y": 392, "graphic": "IAM008L.DEF", "playerColoured": 1 },  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user