Ver Fonte

Add hotkey to track human player hero in MP. Fixed broken 'toggle grid'
hotkey

Ivan Savenko há 1 ano atrás
pai
commit
dd9e002031

+ 14 - 0
client/adventureMap/AdventureMapShortcuts.cpp

@@ -64,6 +64,8 @@ std::vector<AdventureMapShortcutState> AdventureMapShortcuts::getShortcuts()
 		{ EShortcut::ADVENTURE_TOGGLE_MAP_LEVEL, optionCanToggleLevel(), [this]() { this->switchMapLevel(); } },
 		{ EShortcut::ADVENTURE_QUEST_LOG,        optionCanViewQuests(),  [this]() { this->showQuestlog(); } },
 		{ EShortcut::ADVENTURE_TOGGLE_SLEEP,     optionHeroSelected(),   [this]() { this->toggleSleepWake(); } },
+		{ EShortcut::ADVENTURE_TOGGLE_GRID,      optionInMapView(),      [this]() { this->toggleGrid(); } },
+		{ EShortcut::ADVENTURE_TRACK_HERO,       optionInMapView(),      [this]() { this->toggleTrackHero(); } },
 		{ EShortcut::ADVENTURE_SET_HERO_ASLEEP,  optionHeroAwake(),      [this]() { this->setHeroSleeping(); } },
 		{ EShortcut::ADVENTURE_SET_HERO_AWAKE,   optionHeroSleeping(),   [this]() { this->setHeroAwake(); } },
 		{ EShortcut::ADVENTURE_MOVE_HERO,        optionHeroCanMove(),    [this]() { this->moveHeroAlongPath(); } },
@@ -143,6 +145,18 @@ void AdventureMapShortcuts::showQuestlog()
 	LOCPLINT->showQuestLog();
 }
 
+void AdventureMapShortcuts::toggleTrackHero()
+{
+	Settings s = settings.write["session"];
+	s["adventureTrackHero"].Bool() = !settings["session"]["adventureTrackHero"].Bool();
+}
+
+void AdventureMapShortcuts::toggleGrid()
+{
+	Settings s = settings.write["gameTweaks"];
+	s["showGrid"].Bool() = !settings["gameTweaks"]["showGrid"].Bool();
+}
+
 void AdventureMapShortcuts::toggleSleepWake()
 {
 	if (!optionHeroSelected())

+ 2 - 0
client/adventureMap/AdventureMapShortcuts.h

@@ -40,6 +40,8 @@ class AdventureMapShortcuts
 	void worldViewScale4x();
 	void switchMapLevel();
 	void showQuestlog();
+	void toggleTrackHero();
+	void toggleGrid();
 	void toggleSleepWake();
 	void setHeroSleeping();
 	void setHeroAwake();

+ 16 - 23
client/eventsSDL/InputSourceKeyboard.cpp

@@ -15,6 +15,7 @@
 #include "../CPlayerInterface.h"
 #include "../gui/CGuiHandler.h"
 #include "../gui/EventDispatcher.h"
+#include "../gui/Shortcut.h"
 #include "../gui/ShortcutHandler.h"
 #include "../CServerHandler.h"
 #include "../globalLobby/GlobalLobbyClient.h"
@@ -57,37 +58,29 @@ void InputSourceKeyboard::handleEventKeyDown(const SDL_KeyboardEvent & key)
 			return; // ignore periodic event resends
 	}
 
+	auto shortcutsVector = GH.shortcuts().translateKeycode(keyName);
 
-	if(key.keysym.sym == SDLK_TAB && isKeyboardCtrlDown())
-	{
+	if (vstd::contains(shortcutsVector, EShortcut::LOBBY_ACTIVATE_INTERFACE))
 		CSH->getGlobalLobby().activateInterface();
+
+	if (vstd::contains(shortcutsVector, EShortcut::SPECTATE_TRACK_HERO))
+	{
+		Settings s = settings.write["session"];
+		s["spectate-ignore-hero"].Bool() = !settings["session"]["spectate-ignore-hero"].Bool();
 	}
 
-	if(key.keysym.sym >= SDLK_F1 && key.keysym.sym <= SDLK_F15 && settings["session"]["spectate"].Bool())
+	if (vstd::contains(shortcutsVector, EShortcut::SPECTATE_SKIP_BATTLE))
 	{
-		//TODO: we need some central place for all interface-independent hotkeys
 		Settings s = settings.write["session"];
-		switch(key.keysym.sym)
-		{
-			case SDLK_F6:
-				s["spectate-ignore-hero"].Bool() = !settings["session"]["spectate-ignore-hero"].Bool();
-				break;
-
-			case SDLK_F7:
-				s["spectate-skip-battle"].Bool() = !settings["session"]["spectate-skip-battle"].Bool();
-				break;
-
-			case SDLK_F8:
-				s["spectate-skip-battle-result"].Bool() = !settings["session"]["spectate-skip-battle-result"].Bool();
-				break;
-
-			default:
-				break;
-		}
-		return;
+		s["spectate-skip-battle"].Bool() = !settings["session"]["spectate-skip-battle"].Bool();
+	}
+
+	if (vstd::contains(shortcutsVector, EShortcut::SPECTATE_SKIP_BATTLE_RESULT))
+	{
+		Settings s = settings.write["session"];
+		s["spectate-skip-battle-result"].Bool() = !settings["session"]["spectate-skip-battle-result"].Bool();
 	}
 
-	auto shortcutsVector = GH.shortcuts().translateKeycode(keyName);
 	GH.events().dispatchShortcutPressed(shortcutsVector);
 }
 

+ 7 - 0
client/gui/Shortcut.h

@@ -108,6 +108,7 @@ enum class EShortcut
 	ADVENTURE_VIEW_WORLD_X1,
 	ADVENTURE_VIEW_WORLD_X2,
 	ADVENTURE_VIEW_WORLD_X4,
+	ADVENTURE_TRACK_HERO,
 	ADVENTURE_TOGGLE_MAP_LEVEL,
 	ADVENTURE_KINGDOM_OVERVIEW,
 	ADVENTURE_QUEST_LOG,
@@ -145,6 +146,12 @@ enum class EShortcut
 	BATTLE_SELECT_ACTION, // Alternative actions toggle
 	BATTLE_TOGGLE_HEROES_STATS,
 
+	LOBBY_ACTIVATE_INTERFACE,
+
+	SPECTATE_TRACK_HERO,
+	SPECTATE_SKIP_BATTLE,
+	SPECTATE_SKIP_BATTLE_RESULT,
+
 	// Town screen
 	TOWN_OPEN_TAVERN,
 	TOWN_SWAP_ARMIES, // Swap garrisoned and visiting armies

+ 5 - 0
client/gui/ShortcutHandler.cpp

@@ -176,6 +176,7 @@ EShortcut ShortcutHandler::findShortcut(const std::string & identifier ) const
 		{"adventureViewWorld1",      EShortcut::ADVENTURE_VIEW_WORLD_X1   },
 		{"adventureViewWorld2",      EShortcut::ADVENTURE_VIEW_WORLD_X2   },
 		{"adventureViewWorld4",      EShortcut::ADVENTURE_VIEW_WORLD_X4   },
+		{"adventureTrackHero",       EShortcut::ADVENTURE_TRACK_HERO,     },
 		{"adventureToggleMapLevel",  EShortcut::ADVENTURE_TOGGLE_MAP_LEVEL},
 		{"adventureKingdomOverview", EShortcut::ADVENTURE_KINGDOM_OVERVIEW},
 		{"adventureQuestLog",        EShortcut::ADVENTURE_QUEST_LOG       },
@@ -200,6 +201,10 @@ EShortcut ShortcutHandler::findShortcut(const std::string & identifier ) const
 		{"battleTacticsNext",        EShortcut::BATTLE_TACTICS_NEXT       },
 		{"battleTacticsEnd",         EShortcut::BATTLE_TACTICS_END        },
 		{"battleSelectAction",       EShortcut::BATTLE_SELECT_ACTION      },
+		{"lobbyActivateInterface",   EShortcut::LOBBY_ACTIVATE_INTERFACE  },
+		{"spectateTrackHero",        EShortcut::SPECTATE_TRACK_HERO       },
+		{"spectateSkipBattle",       EShortcut::SPECTATE_SKIP_BATTLE      },
+		{"spectateSkipBattleResult", EShortcut::SPECTATE_SKIP_BATTLE_RESULT },
 		{"townOpenTavern",           EShortcut::TOWN_OPEN_TAVERN          },
 		{"townSwapArmies",           EShortcut::TOWN_SWAP_ARMIES          },
 		{"recruitmentMax",           EShortcut::RECRUITMENT_MAX           },

+ 2 - 2
client/mapView/MapViewController.cpp

@@ -302,7 +302,7 @@ bool MapViewController::isEventVisible(const CGObjectInstance * obj, const Playe
 	{
 		if (LOCPLINT->makingTurn)
 			return false;
-		if (LOCPLINT->cb->getStartInfo()->playerInfos.at(initiator).isControlledByHuman())
+		if (LOCPLINT->cb->getStartInfo()->playerInfos.at(initiator).isControlledByHuman() && !settings["session"]["adventureTrackHero"].Bool())
 			return false;
 	}
 
@@ -328,7 +328,7 @@ bool MapViewController::isEventVisible(const CGHeroInstance * obj, const int3 &
 	{
 		if (LOCPLINT->makingTurn)
 			return false;
-		if (LOCPLINT->cb->getStartInfo()->playerInfos.at(obj->getOwner()).isControlledByHuman())
+		if (LOCPLINT->cb->getStartInfo()->playerInfos.at(obj->getOwner()).isControlledByHuman() && !settings["session"]["adventureTrackHero"].Bool())
 			return false;
 	}