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.
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"
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
,
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())
73 if (feature
== sequence
[m_state
])
82 if (m_state
>= sequence
.size())
90 bool CJoystickEasterEgg::IsCapturing()
92 // Capture input when finished with arrows (2 x up/down/left/right)
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();
104 gui
->GetAudioManager().PlayWindowSound(WINDOW_DIALOG_KAI_TOAST
, sound
);
106 //! @todo Shake screen