42 #include "../utils/unicode.h"
44 #include "../generic/managed.h"
45 #include "../generic/property.h"
46 #include "../interfaces/nameable.h"
47 #include "../interfaces/updateable.h"
48 #include "../interfaces.h"
49 #include "../stage_manager.h"
50 #include "../generic/any/any.h"
71 typedef std::shared_ptr<SceneBase> ptr;
79 void _call_activate();
80 void _call_deactivate();
82 bool is_loaded()
const {
return is_loaded_; }
83 bool is_active()
const {
return is_active_; }
85 const std::string name()
const {
89 void set_name(
const std::string& name) {
97 bool destroy_on_unload()
const {
return destroy_on_unload_; }
98 void set_destroy_on_unload(
bool v) {
99 destroy_on_unload_ = v;
104 bool unload_on_deactivate()
const {
return unload_on_deactivate_; }
105 void set_unload_on_deactivate(
bool v) {
106 unload_on_deactivate_ = v;
110 virtual void load() = 0;
111 virtual void unload() {}
112 virtual void activate() {}
113 virtual void deactivate() {}
116 void link_pipeline(
const std::string& name);
117 void unlink_pipeline(
const std::string& name);
121 void _update_thunk(
float dt)
override;
122 void _fixed_update_thunk(
float dt)
override;
124 std::set<std::string> linked_pipelines_;
126 virtual void pre_load() {}
127 virtual void post_unload() {}
129 bool is_loaded_ =
false;
130 bool is_active_ =
false;
131 bool unload_on_deactivate_ =
true;
135 bool destroy_on_unload_ =
true;
145 std::vector<any> load_args;
149 std::size_t load_arg_count()
const;
152 T get_load_arg(
int i) {
153 return any_cast<T>(load_args[i]);
157 S_DEFINE_PROPERTY(window, &SceneBase::window_);
158 S_DEFINE_PROPERTY(app, &SceneBase::app_);
159 S_DEFINE_PROPERTY(input, &SceneBase::input_);
160 S_DEFINE_PROPERTY(scenes, &SceneBase::scene_manager_);
161 S_DEFINE_PROPERTY(compositor, &SceneBase::compositor_);
170 void clean_up()
override {