132 lines
2.9 KiB
C++
132 lines
2.9 KiB
C++
#pragma once
|
|
|
|
#include <windows.h>
|
|
//#include <vector>
|
|
//#include <string>
|
|
#include <functional>
|
|
#include <algorithm>
|
|
#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;
|
|
|
|
} |