Initial engine repository

This commit is contained in:
2026-06-08 19:58:35 +08:00
commit 7a925c3736
137 changed files with 162421 additions and 0 deletions
@@ -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