#pragma once #include //#include //#include #include #include #include "RefCounted.h" #include "IntrusivePtr.h" #include "SGameSceneActor.h" // fw decl class K3DTexture; class SGameManager; class KDeviceManager; class KTextureManager; class SSoundManager; class SGameMilesSoundMgr; class KNX3Manager; class KFileManager; class KViewportObject; namespace rp { class SGameSceneManager; class SGameSceneActor; class SGameScene : public mixin::ref_counted { public: /// 생성자 SGameScene( SGameSceneManager& sceneMgr, SGameScene* parent = 0, const char* sceneName = "" ); /// 소멸자 virtual ~SGameScene(); /// 씬 메니저 획득 SGameSceneManager& getSceneManager() { return mSceneMgr; } /// 씬 이름 획득 const char* getName() const { return mSceneName.c_str(); } /// 부모 씬 획득 SGameScene* getParent() { return mParent; } /// 씬 등록 콜백 virtual void onEnter() {} /// 씬 해제 콜백 virtual void onLeave() {} /// 씬 활성화 콜백 virtual void onActivate() {} /// 씬 비활성화 콜백 virtual void onDeactivate() {} /// 씬 틱 콜백 virtual void onTick(); /// 씬 렌더 콜백 virtual void onRender( KViewportObject* viewport ) {} // Set whether the scene operates (Enable/Disable) virtual void activate( bool activity = true ); /// 씬 동작 여부 확인 virtual bool isActivated() const { return mIsActivated; } /// 씬 로컬 투명도 설정 virtual void setLocalVisibility( float visibility ) { mLocalVisibility = visibility; } /// 씬 로컬 투명도 획득 virtual float getLocalVisibility() const { return mLocalVisibility; } /// 씬 월드 투명도 획득 virtual float getWorldVisibility() const { return mWorldVisibility; } /// 씬 완전 투명 여부 확인 virtual bool isVisible() const { return getWorldVisibility() > 0.f; } /// 씬 투명도 갱신 virtual void updateVisibility(); /// 씬 액터 등록 void registerActor( SGameSceneActor& actor ); /// 씬 화면 획득 virtual K3DTexture* getRenderTarget() { return NULL; } virtual void play( bool play = true ) {}; virtual int getWidth() const { return 0; } virtual int getHeight() const { return 0; } virtual bool isImageReady() const { return false; } virtual void SetAdditiveRenderMode(bool /*useAdditive*/) {} protected: /// 씬 관리자 SGameSceneManager& mSceneMgr; /// 씬 이름 std::string mSceneName; /// 부모 씬 SGameScene* mParent; /// 씬 활성화 여부 bool mIsActivated; /// 씬 로컬 투명도 float mLocalVisibility; /// 씬 월드 투명도 float mWorldVisibility; /// 씬 액터 컨테이너 타입 typedef std::vector< SGameSceneActorIPtr > actor_vector_t; /// 씬 엑터 컨테이너 actor_vector_t mActors; }; typedef intrusive_ptr< SGameScene > SGameSceneIPtr; }