42 #include "../asset_manager.h"
43 #include "../compositor.h"
44 #include "../generic/any/any.h"
45 #include "../generic/managed.h"
46 #include "../generic/property.h"
47 #include "../interfaces.h"
48 #include "../interfaces/nameable.h"
49 #include "../interfaces/updateable.h"
50 #include "../nodes/stage_node_manager.h"
51 #include "../nodes/stage_node_watch_controller.h"
53 #include "../utils/unicode.h"
54 #include "simulant/utils/params.h"
80 return ambient_light_;
106 typedef std::shared_ptr<Scene> ptr;
117 bool is_loaded()
const {
120 bool is_active()
const {
124 const std::string name()
const {
128 void set_name(
const std::string& name) {
134 bool unload_on_deactivate()
const {
135 return unload_on_deactivate_;
137 void set_unload_on_deactivate(
bool v) {
138 unload_on_deactivate_ = v;
143 size_t info =
typeid(T).hash_code();
144 if(services_.count(info)) {
145 return static_cast<T*
>(services_.at(info).get());
148 auto service = std::make_shared<T>();
152 services_.insert(std::make_pair(info, service));
153 return service.get();
157 bool stop_service() {
158 size_t info =
typeid(T).hash_code();
159 auto it = services_.find(info);
160 if(it != services_.end()) {
170 T* find_service()
const {
171 auto info =
typeid(T).hash_code();
172 auto it = services_.find(info);
173 if(it != services_.end()) {
174 return static_cast<T*
>(it->second.get());
180 const std::set<StageNode*> stray_nodes()
const {
185 virtual void on_load() = 0;
186 virtual void on_unload() {}
187 virtual void on_activate() {}
188 virtual void on_deactivate() {}
191 void on_fixed_update(
float step)
override;
193 void register_builtin_nodes();
194 std::unordered_map<size_t, std::shared_ptr<Service>> services_;
196 virtual void on_pre_load() {}
197 virtual void on_post_unload() {}
199 bool is_loaded_ =
false;
200 bool is_active_ =
false;
201 bool unload_on_deactivate_ =
true;
215 std::vector<any> load_args;
217 void on_clean_up()
override {
224 void clean_up_destroyed_objects();
226 std::list<StageNode*> queued_for_clean_up_;
227 std::set<StageNode*> stray_nodes_;
233 bool on_create(
Params)
override final {
239 const std::size_t)
override final {
244 const AABB& aabb()
const override final {
251 std::size_t load_arg_count()
const;
254 T get_load_arg(
int i) {
255 return any_cast<T>(load_args[i]);
259 S_DEFINE_PROPERTY(window, &Scene::window_);
260 S_DEFINE_PROPERTY(app, &Scene::app_);
261 S_DEFINE_PROPERTY(input, &Scene::input_);
262 S_DEFINE_PROPERTY(scenes, &Scene::scene_manager_);
263 S_DEFINE_PROPERTY(compositor, &Scene::compositor_);
264 S_DEFINE_PROPERTY(lighting, &Scene::lighting_);
265 S_DEFINE_PROPERTY(assets, &Scene::assets_);