SleepState.cpp 2.6 KB

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