SleepState.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "SleepState.hpp"
  2. #include "../Config.hpp"
  3. #include <cpp3ds/Window/Window.hpp>
  4. #include <cpp3ds/System/I18n.hpp>
  5. #include <TweenEngine/Tween.h>
  6. #ifndef EMULATION
  7. #include <3ds.h>
  8. #include "../MCU/Mcu.hpp"
  9. #endif
  10. namespace FreeShop {
  11. bool SleepState::isSleeping = false;
  12. cpp3ds::Clock SleepState::clock;
  13. SleepState::SleepState(StateStack& stack, Context& context, StateCallback callback)
  14. : State(stack, context, callback)
  15. , m_sleepEnding(false)
  16. {
  17. #ifndef EMULATION
  18. if (R_SUCCEEDED(gspLcdInit()))
  19. {
  20. if (Config::get(Config::SleepMode).GetBool())
  21. GSPLCD_PowerOffBacklight(GSPLCD_SCREEN_TOP);
  22. if (Config::get(Config::SleepModeBottom).GetBool())
  23. GSPLCD_PowerOffBacklight(GSPLCD_SCREEN_BOTTOM);
  24. gspLcdExit();
  25. }
  26. if (Config::get(Config::DimLEDs).GetBool()) {
  27. if (R_SUCCEEDED(MCU::getInstance().mcuInit())) {
  28. MCU::getInstance().dimLeds(0x09);
  29. MCU::getInstance().mcuExit();
  30. }
  31. }
  32. #endif
  33. isSleeping = true;
  34. m_overlay.setSize(cpp3ds::Vector2f(400.f, 240.f));
  35. m_overlay.setFillColor(cpp3ds::Color::Transparent);
  36. TweenEngine::Tween::to(m_overlay, util3ds::TweenRectangleShape::FILL_COLOR_ALPHA, 0.5f)
  37. .target(200.f)
  38. .start(m_tweenManager);
  39. }
  40. SleepState::~SleepState()
  41. {
  42. #ifndef EMULATION
  43. if (R_SUCCEEDED(gspLcdInit()))
  44. {
  45. GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTH);
  46. gspLcdExit();
  47. }
  48. if (Config::get(Config::DimLEDs).GetBool()) {
  49. if (R_SUCCEEDED(MCU::getInstance().mcuInit())) {
  50. MCU::getInstance().dimLeds(0xFF);
  51. MCU::getInstance().mcuExit();
  52. }
  53. }
  54. #endif
  55. isSleeping = false;
  56. }
  57. void SleepState::renderTopScreen(cpp3ds::Window& window)
  58. {
  59. window.draw(m_overlay);
  60. }
  61. void SleepState::renderBottomScreen(cpp3ds::Window& window)
  62. {
  63. window.draw(m_overlay);
  64. }
  65. bool SleepState::update(float delta)
  66. {
  67. if (!isSleeping)
  68. {
  69. requestStackPop();
  70. clock.restart();
  71. }
  72. m_tweenManager.update(delta);
  73. return true;
  74. }
  75. bool SleepState::processEvent(const cpp3ds::Event& event)
  76. {
  77. if (event.type == cpp3ds::Event::SliderVolumeChanged)
  78. return false;
  79. if (m_sleepEnding)
  80. return false;
  81. m_sleepEnding = true;
  82. TweenEngine::Tween::to(m_overlay, util3ds::TweenRectangleShape::FILL_COLOR_ALPHA, 0.5f)
  83. .target(0.f)
  84. .setCallback(TweenEngine::TweenCallback::COMPLETE, [&](TweenEngine::BaseTween* source) {
  85. requestStackPop();
  86. clock.restart();
  87. })
  88. .start(m_tweenManager);
  89. return true;
  90. }
  91. } // namespace FreeShop