Files
2026-06-01 12:46:52 +02:00

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;
}