TitleState.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include "TitleState.hpp"
  2. #include <TweenEngine/Tween.h>
  3. #include <cpp3ds/Window/Window.hpp>
  4. #include <cpp3ds/System/I18n.hpp>
  5. #include <cpp3ds/System/Service.hpp>
  6. #include <cpp3ds/System/Sleep.hpp>
  7. #include <cpp3ds/System/FileSystem.hpp>
  8. #include "../Config.hpp"
  9. #include "../Notification.hpp"
  10. #include "../Theme.hpp"
  11. #include "../Util.hpp"
  12. #include "../AssetManager.hpp"
  13. #ifndef EMULATION
  14. #include "../MCU/Mcu.hpp"
  15. #endif
  16. using namespace TweenEngine;
  17. using namespace util3ds;
  18. namespace FreeShop {
  19. TitleState::TitleState(StateStack& stack, Context& context, StateCallback callback)
  20. : State(stack, context, callback)
  21. {
  22. std::string path = cpp3ds::FileSystem::getFilePath(FREESHOP_DIR "/theme/texts.json");
  23. if (pathExists(path.c_str(), false)) {
  24. if (Theme::loadFromFile()) {
  25. Theme::isTextThemed = true;
  26. //Load differents colors
  27. std::string freTextValue = Theme::get("freText").GetString();
  28. std::string versionTextValue = Theme::get("versionText").GetString();
  29. //Set the colors
  30. int R, G, B;
  31. hexToRGB(freTextValue, &R, &G, &B);
  32. Theme::freText = cpp3ds::Color(R, G, B);
  33. hexToRGB(versionTextValue, &R, &G, &B);
  34. Theme::versionText = cpp3ds::Color(R, G, B);
  35. }
  36. }
  37. m_textVersion.setString(FREESHOP_VERSION);
  38. m_textVersion.setCharacterSize(12);
  39. if (Theme::isTextThemed)
  40. m_textVersion.setFillColor(Theme::versionText);
  41. else if (Config::get(Config::DarkTheme).GetBool())
  42. m_textVersion.setFillColor(cpp3ds::Color(176, 176, 176));
  43. else
  44. m_textVersion.setFillColor(cpp3ds::Color::White);
  45. m_textVersion.setOutlineColor(cpp3ds::Color(0, 0, 0, 100));
  46. m_textVersion.setOutlineThickness(1.f);
  47. m_textVersion.setPosition(318.f - m_textVersion.getLocalBounds().width, 222.f);
  48. m_textFree.setString("fre");
  49. if (Theme::isTextThemed)
  50. m_textFree.setFillColor(cpp3ds::Color(Theme::freText.r, Theme::freText.g, Theme::freText.b, 0));
  51. else if (Config::get(Config::DarkTheme).GetBool())
  52. m_textFree.setFillColor(cpp3ds::Color(98, 98, 98, 0));
  53. else
  54. m_textFree.setFillColor(cpp3ds::Color(255, 255, 255, 0));
  55. m_textFree.setCharacterSize(75);
  56. m_textFree.setPosition(23, 64);
  57. m_textFree.setFont(AssetManager<cpp3ds::Font>::get("fonts/prod-sans.ttf"));
  58. if (fopen(FREESHOP_DIR "/theme/images/eshop.png", "rb"))
  59. m_textureEshop.loadFromFile(FREESHOP_DIR "/theme/images/eshop.png");
  60. else
  61. m_textureEshop.loadFromFile("images/eshop.png");
  62. m_spriteEshop.setTexture(m_textureEshop, true);
  63. m_spriteEshop.setColor(cpp3ds::Color(0xf4, 0x6c, 0x26, 0x00));
  64. m_spriteEshop.setPosition(390.f - m_spriteEshop.getLocalBounds().width, 40.f);
  65. if (fopen(FREESHOP_DIR "/theme/images/bag.png", "rb"))
  66. m_textureBag.loadFromFile(FREESHOP_DIR "/theme/images/bag.png");
  67. else
  68. m_textureBag.loadFromFile("images/bag.png");
  69. //if(Config::get(Config::DownloadTitleKeys).GetBool()) {
  70. m_AP_Texture.loadFromFile("images/AP.png");
  71. //}
  72. m_spriteBag.setTexture(m_textureBag, true);
  73. m_spriteBag.setColor(cpp3ds::Color(0xf4, 0x6c, 0x26, 0x00));
  74. m_spriteBag.setPosition(50.f, 50.f);
  75. m_spriteBag.setScale(0.4f, 0.4f);
  76. // Tween the bag
  77. Tween::to(m_spriteBag, TweenSprite::COLOR_ALPHA, 0.5f)
  78. .target(255.f)
  79. .delay(1.f)
  80. .start(m_manager);
  81. Tween::to(m_spriteBag, TweenSprite::POSITION_XY, 0.5f)
  82. .target(10.f, 30.f)
  83. .delay(1.f)
  84. .start(m_manager);
  85. Tween::to(m_spriteBag, TweenSprite::SCALE_XY, 0.5f)
  86. .target(1.f, 1.f)
  87. .delay(1.f)
  88. .start(m_manager);
  89. Tween::to(m_spriteBag, TweenSprite::COLOR_RGB, 1.f)
  90. .target(0, 0, 0)
  91. .delay(3.5f)
  92. .start(m_manager);
  93. // Tween the "fre" text
  94. Tween::to(m_textFree, TweenSprite::COLOR_ALPHA, 1.f)
  95. .target(255.f)
  96. .delay(3.5f)
  97. .start(m_manager);
  98. // Tween the logo after the bag
  99. Tween::to(m_spriteEshop, TweenSprite::POSITION_Y, 1.f)
  100. .targetRelative(30.f)
  101. .delay(1.5f)
  102. .start(m_manager);
  103. Tween::to(m_spriteEshop, TweenSprite::COLOR_ALPHA, 1.f)
  104. .target(255)
  105. .delay(1.5f)
  106. .start(m_manager);
  107. Tween::to(m_spriteEshop, TweenSprite::COLOR_RGB, 1.f)
  108. .target(0, 0, 0)
  109. .delay(3.5f)
  110. .start(m_manager);
  111. }
  112. TitleState::~TitleState()
  113. {
  114. }
  115. void TitleState::renderTopScreen(cpp3ds::Window& window)
  116. {
  117. window.draw(m_spriteEshop);
  118. window.draw(m_spriteBag);
  119. window.draw(m_textFree);
  120. }
  121. void TitleState::renderBottomScreen(cpp3ds::Window& window)
  122. {
  123. window.draw(m_textVersion);
  124. }
  125. bool TitleState::update(float delta)
  126. {
  127. m_manager.update(delta);
  128. return true;
  129. }
  130. bool TitleState::processEvent(const cpp3ds::Event& event)
  131. {
  132. return true;
  133. }
  134. } // namespace FreeShop