mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-23 22:37:55 +02:00
Add hotkey to track human player hero in MP. Fixed broken 'toggle grid'
hotkey
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -40,6 +40,8 @@ class AdventureMapShortcuts
|
||||
void worldViewScale4x();
|
||||
void switchMapLevel();
|
||||
void showQuestlog();
|
||||
void toggleTrackHero();
|
||||
void toggleGrid();
|
||||
void toggleSleepWake();
|
||||
void setHeroSleeping();
|
||||
void setHeroAwake();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
if(key.keysym.sym == SDLK_TAB && isKeyboardCtrlDown())
|
||||
{
|
||||
CSH->getGlobalLobby().activateInterface();
|
||||
}
|
||||
|
||||
if(key.keysym.sym >= SDLK_F1 && key.keysym.sym <= SDLK_F15 && settings["session"]["spectate"].Bool())
|
||||
{
|
||||
//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;
|
||||
}
|
||||
|
||||
auto shortcutsVector = GH.shortcuts().translateKeycode(keyName);
|
||||
|
||||
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 (vstd::contains(shortcutsVector, EShortcut::SPECTATE_SKIP_BATTLE))
|
||||
{
|
||||
Settings s = settings.write["session"];
|
||||
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();
|
||||
}
|
||||
|
||||
GH.events().dispatchShortcutPressed(shortcutsVector);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user