#pragma once #include "SGameScene.h" #include "KResource.h" #include "KPrimitiveSprite.h" #include class QJTVObj; namespace rp { /// QJTV 씬 class SGameQjtvScene : public SGameScene { public: /// QJTV 씬 옵션 enum OPTION { FULL = 1 << 0, ///< 풀스크린 CENTER = 1 << 1, ///< 렌더 타겟 중앙에 위치 SCREENCENTER = 1 << 2, ///< 화면 중앙에 위치 ALPHA = 1 << 3, ///< 알파값 사용 REPEAT = 1 << 4, ///< 반복 재생 }; /// 생성자 SGameQjtvScene( SGameSceneManager& sceneMgr , SGameScene* parent , const char* sceneName , const char* jtvFile , const char* soundFile , const K3DVector& position = K3DVector( 0.f, 0.f, 0.1f ) , const KColor& bgColor = KColor( 0xff000000 ) , DWORD option = CENTER | ALPHA | REPEAT , int fixedFps = 24 , bool registerSelf = true , KViewportObject* viewport = 0 , const K3DVector2& size = K3DVector2(-1.f, -1.f) ); /// 소멸자 virtual ~SGameQjtvScene(); /// 씬 등록 콜백 virtual void onEnter(); /// 씬 해제 콜백 virtual void onLeave(); /// 씬 활성화 콜백 virtual void onActivate(); /// 씬 비활성화 콜백 virtual void onDeactivate(); /// 씬 틱 콜백 virtual void onTick(); /// 신 렌더 콜백 virtual void onRender( KViewportObject* viewport ); /// QJTV 렌더타겟 텍스쳐 획득 K3DTexture* getRenderTarget() { return mRenderTarget; } /// 이미지 폭 획득 int getWidth() const { return mImageWidth; } /// 이미지 높이 획득 int getHeight() const { return mImageHeight; } /// 그려질 이미지 준비 여부 확인 bool isImageReady() const { return mIsImageReady; } /// 플레이 여부 설정 void play( bool play = true ); protected: std::string mQjtvFile; std::string mSoundFile; QJTVObj* mQjtv; trf::MetaData mQjtvTml; unsigned int mFrame; int mImageWidth; int mImageHeight; DWORD mRefreshTime; DWORD mBeginTime; KColor mBgColor; DWORD mOption; int mFixedFps; bool mIsImageReady; bool mIsPlaying; bool mRegisterSelf; K3DVector mPosition; K3DVector2 mSize; K3DMatrix mWorld; K3DTextureSPtr mRenderTarget; KResSpriteSPtr mSprite; KSpritePrimitive mPrimitive; KViewportObject* mViewport; bool _needToFillRenderTarget() const; bool _fillRenderTarget( K3DTexture* texture, BYTE* image, int width, int height ); }; }