Initial engine repository
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#pragma once
|
||||
|
||||
#include <frostbite2D/2d/actor.h>
|
||||
#include <frostbite2D/event/event.h>
|
||||
#include <frostbite2D/graphics/render_style.h>
|
||||
#include <vector>
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
class Scene : public Actor {
|
||||
public:
|
||||
Scene();
|
||||
virtual ~Scene();
|
||||
|
||||
virtual void onEnter();
|
||||
virtual void onExit();
|
||||
|
||||
void Update(float deltaTime) override;
|
||||
void Render() override;
|
||||
|
||||
bool OnEvent(const Event& event) override;
|
||||
/**
|
||||
* @brief 为当前场景指定渲染风格预设
|
||||
*/
|
||||
void SetRenderStyleProfile(RenderStyleProfileId profile);
|
||||
/**
|
||||
* @brief 清除场景级渲染风格覆盖,回退到应用默认值
|
||||
*/
|
||||
void ClearRenderStyleProfileOverride();
|
||||
bool HasRenderStyleProfileOverride() const { return hasRenderStyleProfileOverride_; }
|
||||
/**
|
||||
* @brief 解析当前场景最终应使用的渲染风格
|
||||
*/
|
||||
RenderStyleProfileId ResolveRenderStyleProfile(
|
||||
RenderStyleProfileId defaultProfile) const;
|
||||
|
||||
static Scene* GetCurrent();
|
||||
|
||||
private:
|
||||
bool dispatchToChildren(const Event& event);
|
||||
|
||||
static Scene* current_;
|
||||
bool hasRenderStyleProfileOverride_ = false;
|
||||
RenderStyleProfileId renderStyleProfileOverride_ = RenderStyleProfileId::Hybrid2D;
|
||||
|
||||
friend class SceneManager;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
#pragma once
|
||||
|
||||
#include <frostbite2D/event/event.h>
|
||||
#include <frostbite2D/types/type_alias.h>
|
||||
#include <vector>
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
class Scene;
|
||||
class UIScene;
|
||||
|
||||
class SceneManager {
|
||||
public:
|
||||
static SceneManager& get();
|
||||
|
||||
SceneManager(const SceneManager&) = delete;
|
||||
SceneManager& operator=(const SceneManager&) = delete;
|
||||
|
||||
void PushScene(Ptr<Scene> scene);
|
||||
void PopScene();
|
||||
void ReplaceScene(Ptr<Scene> scene);
|
||||
|
||||
void PushUIScene(Ptr<UIScene> scene);
|
||||
void PopUIScene();
|
||||
void ReplaceUIScene(Ptr<UIScene> scene);
|
||||
bool RemoveUIScene(UIScene* scene);
|
||||
void ClearUIScenes();
|
||||
void ClearAll();
|
||||
|
||||
void Update(float deltaTime);
|
||||
void UpdateUI(float deltaTime);
|
||||
void Render();
|
||||
|
||||
bool DispatchEvent(const Event& event);
|
||||
bool DispatchUIEvent(const Event& event);
|
||||
|
||||
Scene* GetCurrentScene() const;
|
||||
UIScene* GetCurrentUIScene() const;
|
||||
bool HasActiveScene() const;
|
||||
bool HasActiveUIScene() const;
|
||||
|
||||
private:
|
||||
SceneManager() = default;
|
||||
|
||||
std::vector<Ptr<Scene>> sceneStack_;
|
||||
std::vector<Ptr<UIScene>> uiSceneStack_;
|
||||
};
|
||||
|
||||
} // namespace frostbite2D
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include <frostbite2D/graphics/camera.h>
|
||||
#include <frostbite2D/scene/scene.h>
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
class UIScene : public Scene {
|
||||
public:
|
||||
UIScene();
|
||||
~UIScene() override = default;
|
||||
|
||||
Camera* GetCamera() { return &camera_; }
|
||||
const Camera* GetCamera() const { return &camera_; }
|
||||
|
||||
private:
|
||||
Camera camera_;
|
||||
};
|
||||
|
||||
} // namespace frostbite2D
|
||||
Reference in New Issue
Block a user