Extra2D/include/scene/director.h

133 lines
2.5 KiB
C
Raw Permalink Normal View History

#pragma once
#include <scene/scene.h>
#include <types/ptr/intrusive_ptr.h>
#include <types/ptr/ref_counted.h>
#include <stack>
namespace extra2d {
// 前向声明
class CameraComponent;
/**
* @brief
*
*
*/
class Director : public RefCounted {
public:
/**
* @brief
*/
Director();
/**
* @brief
*/
~Director() override;
// 禁止拷贝
Director(const Director&) = delete;
Director& operator=(const Director&) = delete;
// ========================================
// 生命周期
// ========================================
/**
* @brief
* @return
*/
bool init();
/**
* @brief
*/
void shutdown();
// ========================================
// 场景管理
// ========================================
/**
* @brief
* @param scene
*/
void runScene(Ptr<Scene> scene);
/**
* @brief
* @param scene
*/
void replaceScene(Ptr<Scene> scene);
/**
* @brief
* @param scene
*/
void pushScene(Ptr<Scene> scene);
/**
* @brief
*/
void popScene();
/**
* @brief
*/
void end();
// ========================================
// 属性获取
// ========================================
/**
* @brief
* @return
*/
Scene* getRunningScene() const;
/**
* @brief
* @return
*/
CameraComponent* getMainCamera() const;
/**
* @brief
* @return
*/
bool isRunning() const { return running_; }
// ========================================
// 生命周期
// ========================================
/**
* @brief
* @param dt
*/
void update(float dt);
/**
* @brief
*/
void render();
/**
* @brief
* @param camera
*/
void setMainCamera(CameraComponent* camera) { mainCamera_ = camera; }
private:
Ptr<Scene> runningScene_;
std::stack<Ptr<Scene>> sceneStack_;
CameraComponent* mainCamera_ = nullptr;
bool running_ = false;
bool needEnd_ = false;
};
} // namespace extra2d