SplashState.cxx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "SplashState.hxx"
  2. #include "AssetManager.hxx"
  3. #include "GameStateManager.hxx"
  4. using namespace std::chrono_literals;
  5. void SplashState::update(GameStateManager& gsm, std::chrono::milliseconds delta_time)
  6. {
  7. time_in_state_ += delta_time;
  8. auto const key_state = SDL_GetKeyboardState(nullptr);
  9. if (time_in_state_ > 13'000ms || key_state[SDL_SCANCODE_SPACE] || key_state[SDL_SCANCODE_RETURN])
  10. gsm.replace_state(GameStates::MainMenu);
  11. }
  12. void SplashState::render(SDLRenderer& renderer)
  13. {
  14. SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
  15. SDL_RenderClear(renderer);
  16. int w, h;
  17. SDL_GetRendererOutputSize(renderer, &w, &h);
  18. if (time_in_state_ >= 2'000ms && time_in_state_ < 4'000ms)
  19. {
  20. auto const progress = static_cast<float>(time_in_state_.count() - 2'000) / 2'000.0f;
  21. auto const alpha = static_cast<int>(std::lerp(SDL_ALPHA_TRANSPARENT, SDL_ALPHA_OPAQUE, progress));
  22. SDL_SetTextureAlphaMod(logo_, alpha);
  23. SDL_RenderCopy(renderer, logo_, nullptr, nullptr);
  24. }
  25. else if (time_in_state_ >= 4'000ms && time_in_state_ < 9'000ms)
  26. {
  27. SDL_SetTextureAlphaMod(logo_, SDL_ALPHA_OPAQUE);
  28. SDL_RenderCopy(renderer, logo_, nullptr, nullptr);
  29. }
  30. else if (time_in_state_ >= 9'000ms && time_in_state_ < 11'000ms)
  31. {
  32. auto const progress = static_cast<float>(time_in_state_.count() - 11'000) / 2'000.0f;
  33. auto const alpha = static_cast<int>(std::lerp(SDL_ALPHA_OPAQUE, SDL_ALPHA_TRANSPARENT, progress));
  34. SDL_SetTextureAlphaMod(logo_, alpha);
  35. SDL_RenderCopy(renderer, logo_, nullptr, nullptr);
  36. }
  37. SDL_RenderPresent(renderer);
  38. }
  39. void SplashState::on_enter()
  40. {
  41. time_in_state_ = 0ms;
  42. logo_ = AssetManager::instance().get_texture_asset("logo.jpg");
  43. SDL_SetTextureBlendMode(logo_, SDL_BLENDMODE_BLEND);
  44. }