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 {
184 const char* node_type_name()
const override {
189 std::set<NodeParam> node_params()
const override {
190 return std::set<NodeParam>();
194 virtual void on_load() = 0;
195 virtual void on_unload() {}
196 virtual void on_activate() {}
197 virtual void on_deactivate() {}
200 void on_fixed_update(
float step)
override;
202 void register_builtin_nodes();
203 std::unordered_map<size_t, std::shared_ptr<Service>> services_;
205 virtual void on_pre_load() {}
206 virtual void on_post_unload() {}
208 bool is_loaded_ =
false;
209 bool is_active_ =
false;
210 bool unload_on_deactivate_ =
true;
224 std::vector<any> load_args;
226 void on_clean_up()
override {
233 void clean_up_destroyed_objects();
235 std::list<StageNode*> queued_for_clean_up_;
236 std::set<StageNode*> stray_nodes_;
242 bool on_create(
Params)
override final {
248 const std::size_t)
override final {
253 const AABB& aabb()
const override final {
260 std::size_t load_arg_count()
const;
263 T get_load_arg(
int i) {
264 return any_cast<T>(load_args[i]);
268 S_DEFINE_PROPERTY(window, &Scene::window_);
269 S_DEFINE_PROPERTY(app, &Scene::app_);
270 S_DEFINE_PROPERTY(input, &Scene::input_);
271 S_DEFINE_PROPERTY(scenes, &Scene::scene_manager_);
272 S_DEFINE_PROPERTY(compositor, &Scene::compositor_);
273 S_DEFINE_PROPERTY(lighting, &Scene::lighting_);
274 S_DEFINE_PROPERTY(assets, &Scene::assets_);