text: #pragma once
  
  #include <memory>
  #include <string>
  
  #include "json/json.h"
  using JSON = nlohmann::json;
  
  #include "soloud_wavstream.h"
  
  #include "common/CommonResources.h"
  #include "common/GUI.h"
  #include "gameplay/GUIResults.h"
  #include "gameplay/PlayScreen.h"
  #include "gameplay/PlayScreenHelpers.h"
  
  using namespace std::string_literals;
  
  class PlayScreenSprint final: public PlayScreen {
  	private:
  		StageBackgroundSet background;
  		SoLoud::Queue musicFeed;
  		SoLoud::WavStream musicBegin, musicLoop;
  		bool playMusicImmediately = false;
  		SoundBankMultiple moveSounds, rotateSounds, fallSounds, clearSounds;
  		SoundBankSingle
  			countdownSound{"Countdown"s},
  			endSound{"Done"s};
  		std::shared_ptr<GUIResults> resultsScreen;
  		long endAnimationTime = 0;
  		void loadSoundBank(SoundBankMultiple &soundBank, const JSON &data);
  	public:
  		PlayScreenSprint(
  			const std::shared_ptr<GUI> &parent,
  			CommonResources &commonResources,
  			const std::string &fileName
  		);
  		virtual ~PlayScreenSprint() override = default;
  		virtual void start() override;
  		virtual void reset() override;
  		virtual float getFadeAlpha() override;
  		virtual void playMoveSound() override;
  		virtual void playRotateSound() override;
  		virtual void playFallSound() override;
  		virtual void playClearSound() override;
  		virtual void init() override;
  		virtual void render(const long timePassed) override;
  		virtual void renderOverlay(const long timePassed) override;
  		virtual void onKeyPressed(const int key) override;
  		virtual void notify() override;
  
  		void onLineClear(const long lines);
  		void onGameOver();
  };