Extra2D/include/scene/scene.h

123 lines
2.4 KiB
C
Raw Permalink Normal View History

#pragma once
#include <scene/node.h>
#include <types/ptr/intrusive_ptr.h>
#include <string>
#include <vector>
namespace extra2d {
// 前向声明
class CameraComponent;
/**
* @brief
*
*
*/
class Scene : public RefCounted {
public:
/**
* @brief
*/
Scene();
/**
* @brief
*/
~Scene() override;
// 禁止拷贝
Scene(const Scene&) = delete;
Scene& operator=(const Scene&) = delete;
// ========================================
// 节点管理
// ========================================
/**
* @brief
* @param node
*/
void addChild(Ptr<Node> node);
/**
* @brief
* @param node
*/
void removeChild(Node* node);
/**
* @brief
*/
void removeAllChildren();
/**
* @brief
* @return
*/
const std::vector<Ptr<Node>>& getChildren() const { return rootNodes_; }
/**
* @brief
* @param name
* @return nullptr
*/
Node* findNode(const std::string& name);
/**
* @brief
* @param tag
* @return nullptr
*/
Node* findNodeByTag(int32 tag);
// ========================================
// 相机管理
// ========================================
/**
* @brief
* @param camera
*/
void setMainCamera(CameraComponent* camera);
/**
* @brief
* @return
*/
CameraComponent* getMainCamera() const { return mainCamera_; }
// ========================================
// 生命周期
// ========================================
/**
* @brief
*/
virtual void onEnter();
/**
* @brief 退
*/
virtual void onExit();
/**
* @brief
* @param dt
*/
virtual void update(float dt);
/**
* @brief
*/
virtual void render();
protected:
std::vector<Ptr<Node>> rootNodes_;
CameraComponent* mainCamera_ = nullptr;
bool entered_ = false;
};
} // namespace extra2d