Merge pull request #26386 from ksooo/guiinfo-fix-listitem-filenamenoextension
[xbmc.git] / xbmc / input / joysticks / JoystickEasterEgg.cpp
blobf5dfc19eb140b2826d311d49eb1d6b449ea1417f
1 /*
2 * Copyright (C) 2016-2024 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "JoystickEasterEgg.h"
11 #include "ServiceBroker.h"
12 #include "games/GameServices.h"
13 #include "games/GameSettings.h"
14 #include "games/controllers/ControllerIDs.h"
15 #include "games/controllers/DefaultController.h"
16 #include "guilib/GUIAudioManager.h"
17 #include "guilib/WindowIDs.h"
19 using namespace KODI;
20 using namespace JOYSTICK;
22 const std::map<std::string, std::vector<FeatureName>> CJoystickEasterEgg::m_sequence = {
24 GAME::DEFAULT_CONTROLLER_ID,
26 GAME::CDefaultController::FEATURE_UP,
27 GAME::CDefaultController::FEATURE_UP,
28 GAME::CDefaultController::FEATURE_DOWN,
29 GAME::CDefaultController::FEATURE_DOWN,
30 GAME::CDefaultController::FEATURE_LEFT,
31 GAME::CDefaultController::FEATURE_RIGHT,
32 GAME::CDefaultController::FEATURE_LEFT,
33 GAME::CDefaultController::FEATURE_RIGHT,
34 GAME::CDefaultController::FEATURE_B,
35 GAME::CDefaultController::FEATURE_A,
39 GAME::DEFAULT_REMOTE_ID,
41 "up",
42 "up",
43 "down",
44 "down",
45 "left",
46 "right",
47 "left",
48 "right",
49 "back",
50 "ok",
55 CJoystickEasterEgg::CJoystickEasterEgg(const std::string& controllerId)
56 : m_controllerId(controllerId)
60 bool CJoystickEasterEgg::OnButtonPress(const FeatureName& feature)
62 bool bHandled = false;
64 auto it = m_sequence.find(m_controllerId);
65 if (it != m_sequence.end())
67 const auto& sequence = it->second;
69 // Reset state if it previously finished
70 if (m_state >= sequence.size())
71 m_state = 0;
73 if (feature == sequence[m_state])
74 m_state++;
75 else
76 m_state = 0;
78 if (IsCapturing())
80 bHandled = true;
82 if (m_state >= sequence.size())
83 OnFinish();
87 return bHandled;
90 bool CJoystickEasterEgg::IsCapturing()
92 // Capture input when finished with arrows (2 x up/down/left/right)
93 return m_state > 8;
96 void CJoystickEasterEgg::OnFinish(void)
98 GAME::CGameSettings& gameSettings = CServiceBroker::GetGameServices().GameSettings();
99 gameSettings.ToggleGames();
101 WINDOW_SOUND sound = gameSettings.GamesEnabled() ? SOUND_INIT : SOUND_DEINIT;
102 CGUIComponent* gui = CServiceBroker::GetGUI();
103 if (gui)
104 gui->GetAudioManager().PlayWindowSound(WINDOW_DIALOG_KAI_TOAST, sound);
106 //! @todo Shake screen