#ifndef _CCREDITS
#define _CCREDITS

#include "MetroidPrime/CIOWin.hpp"

#include "Kyoto/TToken.hpp"
#include "Kyoto/Math/CVector2i.hpp"

#include "rstl/single_ptr.hpp"

class CFinalInput;
class CStringTable;
class CRasterFont;
class CMoviePlayer;
class CStaticAudioPlayer;
class CGuiTextSupport;
class CVector3f;

class CCredits : public CIOWin {
public:
  CCredits();
  ~CCredits() override;

  EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) override;
  bool GetIsContinueDraw() const override;
  void Draw() const override;

  EMessageReturn Update(float, CArchitectureQueue& queue);
  EMessageReturn ProcessUserInput(const CFinalInput& input);

private:
  int x14_; // = 0;
  TLockedToken< CStringTable > x18_creditsTable;
  TLockedToken< CRasterFont > x20_creditsFont;
  rstl::single_ptr< CMoviePlayer > x28_moviePlayer;
  rstl::single_ptr< CStaticAudioPlayer > x2c_;
  rstl::vector< rstl::pair< rstl::single_ptr< CGuiTextSupport >, CVector2i > > x30_text;
  int x44_textSupport; // = 0;
  float x48_; // = 0.f;
  float x4c_; // = 0.f;
  float x50_; // = 8.f;
  float x54_;
  float x58_; // = 0.f;
  bool x5c_24_ : 1; // = false;
  bool x5c_25_ : 1; // = false;
  bool x5c_26_ : 1; // = false;
  bool x5c_27_ : 1; // = true;
  bool x5c_28_ : 1; // = false;

  void DrawVideo() const;
  void DrawText() const;
  static void DrawText(CGuiTextSupport&, const CVector3f& translation);
};

#endif // _CCREDITS
