Loading...
Searching...
No Matches
SceneManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <filesystem>
4#include <functional>
5#include <string>
6#include <vector>
7
8#include "hellfire/assets/AssetRegistry.h"
9
10
11// Forward declarations
12namespace hellfire {
13 class CameraComponent;
14 class Scene;
15 class Camera;
16 class ObjectDeserializer;
17 class ObjectSerializer;
18 using EntityID = uint32_t;
19}
20
21namespace hellfire {
23 public:
25 ~SceneManager();
26
28
29 void save_current_scene();
30
31 // Setup callback for when a scene is activated
32 using SceneActivatedCallback = std::function<void(Scene *)>;
33
34 void set_scene_activated_callback(SceneActivatedCallback callback) {
35 scene_activated_callback_ = callback;
36 }
37
38 // Scene creation and loading
40
41 Scene *load_scene(const std::filesystem::path &filename);
42
43 Scene *load_scene(AssetID asset_id, const std::filesystem::path &filename);
44
47
48 bool save_scene(Scene *scene);
49
50 void set_scene_asset_id(Scene* scene, AssetID id);
51
52 bool save_scene_as(const std::string &filename, Scene *scene) ;
53
54 // Scene management
55 void update(float delta_time);
56
57 void clear();
58
59 void destroy_scene(Scene *scene);
60
61 // Object management
62
63 Scene *create_scene(const std::string &name = "GameScene");
64
65 EntityID find_entity_by_name(const std::string &name);
66
67 // Accessor to objects
68 void set_active_camera(EntityID camera) const;
70
71 void set_active_scene(Scene *scene, bool should_play = true);
72
74
76 if (!active_scene_) return nullptr;
77
78 return active_scene_;
79 }
80
81 bool has_active_scene() const {
82 return active_scene_;
83 }
84
85 private:
89
90 // Helper methods
91 SceneActivatedCallback scene_activated_callback_;
92 };
93}
bool is_valid() const
Definition Shader.h:46
std::vector< std::unique_ptr< IApplicationPlugin > > plugins_
Definition Application.h:97
std::function< bool()> exit_condition_
Definition Application.h:93
AppInfo & get_window_info()
Definition Application.h:59
void on_mouse_move(float x, float y) override
void set_exit_condition(std::function< bool()> condition)
ShaderManager shader_manager_
std::unique_ptr< IWindow > window_
Definition Application.h:98
ShaderRegistry shader_registry_
bool call_plugins_until_consumed(Func &&func)
void on_render() override
std::unique_ptr< InputManager > input_manager_
Definition Application.h:99
Application(int width=800, int height=600, std::string title="hellfire Application")
void handle_cursor_warping(float x, float y) const
bool handle_first_mouse_movement(float x, float y)
void on_key_up(int key) override
void on_key_down(int key) override
void on_window_minimize(bool minimized) override
void register_plugin(std::unique_ptr< IApplicationPlugin > plugin)
Method for registering plugins.
Definition Application.h:61
Shader * ensure_fallback_shader()
void on_mouse_button(int button, bool pressed) override
void call_plugins(Func &&func)
uint32_t create_minimal_fallback_shader()
void on_window_resize(int width, int height) override
virtual bool on_mouse_move(float x, float y, float x_offset, float y_offset)
virtual bool on_mouse_button(int button, bool pressed)
virtual bool on_key_down(int key)
virtual Entity * get_render_camera_override()
virtual void on_initialize(Application &app)
virtual void on_window_resize(int width, int height)
virtual void on_key_up(int keycode)
Definition IWindow.h:31
virtual void on_mouse_move(float x, float y)
Definition IWindow.h:37
virtual void on_window_resize(int width, int height)
Definition IWindow.h:43
virtual ~IWindowEventHandler()=default
virtual void on_key_down(int keycode)
Definition IWindow.h:28
virtual void on_window_minimize(bool minimized)
Definition IWindow.h:46
virtual void on_mouse_button(int button, bool pressed)
Definition IWindow.h:34
virtual void on_render()
Definition IWindow.h:49
virtual void on_mouse_wheel(float delta)
Definition IWindow.h:40
virtual void set_event_handler(IWindowEventHandler *event_handler)=0
virtual bool is_key_pressed(int keycode) const =0
virtual bool should_close() const =0
WindowInfo window_info_
Definition IWindow.h:101
virtual glm::vec2 get_mouse_position() const =0
virtual ~IWindow()=default
virtual void set_size(int width, int height)=0
virtual void poll_events()=0
virtual glm::ivec2 get_framebuffer_size() const =0
virtual void set_title(const std::string &title)=0
virtual void swap_buffers()=0
virtual void enable_vsync(bool vsync)=0
virtual glm::ivec2 get_size() const =0
virtual void * get_native_handle()=0
virtual void warp_cursor(double x, double y)=0
virtual void destroy()=0
virtual void set_cursor_mode(CursorMode mode)=0
virtual bool create(int width, int height, const std::string &title)=0
virtual float get_elapsed_time()=0
virtual void wait_for_events()=0
virtual void make_current()=0
bool has_active_scene() const
void destroy_scene(Scene *scene)
CameraComponent * get_active_camera() const
bool save_scene(Scene *scene)
Scene * create_scene(const std::string &name="GameScene")
Scene * load_scene(const std::filesystem::path &filename)
std::optional< AssetID > get_scene_asset_id(Scene *scene) const
void set_active_camera(EntityID camera) const
void set_scene_asset_id(Scene *scene, AssetID id)
std::optional< AssetID > get_active_scene_asset_id() const
SceneActivatedCallback scene_activated_callback_
Scene * get_active_scene() const
void set_active_scene(Scene *scene, bool should_play=true)
bool save_scene_as(const std::string &filename, Scene *scene)
std::vector< Scene * > scenes_
std::vector< Scene * > get_scenes()
std::unordered_map< Scene *, AssetID > scene_asset_ids_
EntityID find_entity_by_name(const std::string &name)
std::vector< EntityID > get_camera_entities() const
Scene * load_scene(AssetID asset_id, const std::filesystem::path &filename)
void set_scene_activated_callback(SceneActivatedCallback callback)
void update(float delta_time)
Manages a collection of entities and their hierarchical relationships.
Definition Scene.h:24
@ HIDDEN
Definition IWindow.h:12
@ DISABLED
Definition IWindow.h:13
@ SHOWN
Definition IWindow.h:14
std::string title
Definition Application.h:40
static float delta_time
Definition Time.h:9
static void update()
Definition Time.h:20
static void init()
Definition Time.h:16
std::string title
Definition IWindow.h:20