4#include "hellfire/ecs/CameraComponent.h"
8#include "hellfire/assets/SceneAssetResolver.h"
9#include "hellfire/ecs/ComponentRegistration.h"
10#include "hellfire/serializers/SceneSerializer.h"
11#include "hellfire/utilities/ServiceLocator.h"
39 for (Scene *scene: scenes_) {
40 if (scene->get_source_filename() == filename) {
41 std::cout <<
"Scene already loaded: " << filename <<
"\n";
47 std::ifstream file(filename);
48 if (!file.is_open()) {
49 std::cerr <<
"Failed to open scene file: " << filename << std::endl;
56 std::cerr <<
"Failed to deserialize scene: " << filename << std::endl;
63 if (
auto* asset_manager = ServiceLocator::get_service<AssetManager>()) {
67 std::cerr <<
"Warning: No AssetManager available, assets not resolved for scene: "
68 << filename << std::endl;
72 if (
auto* asset_registry = ServiceLocator::get_service<AssetRegistry>()) {
73 if (
const auto scene_uuid = asset_registry->get_uuid_by_path(filename)) {
99 return get_scene_asset_id(active_scene_);
103 if (!scene)
return false;
106 if (filepath.empty()) {
107 std::cerr <<
"Scene has no source filename, use save_scene_as()" << std::endl;
116 if (!scene)
return false;
118 std::ofstream file(filename);
119 if (!file.is_open()) {
120 std::cerr <<
"Failed to open file for writing: " << filename << std::endl;
125 std::cerr <<
"Failed to serialize scene: " << filename << std::endl;
132 if (
auto* asset_registry = ServiceLocator::get_service<AssetRegistry>()) {
133 if (!asset_registry->get_uuid_by_path(filename)) {
134 AssetID new_id = asset_registry->register_asset(filename,
AssetType::SCENE);
139 std::cout <<
"Scene saved: " << filename << std::endl;
151 for (Scene* scene : scenes_) {
void resolve(Scene &scene)
void destroy_scene(Scene *scene)
CameraComponent * get_active_camera() const
void save_current_scene()
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
std::optional< AssetID > get_active_scene_asset_id() const
SceneActivatedCallback scene_activated_callback_
Scene * get_active_scene() const
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 update(float delta_time)
Manages a collection of entities and their hierarchical relationships.
Entity * find_entity_by_name(const std::string &name)
Finds an entity by its name.
Scene(std::string name="Unnamed")
Constructs a new Scene with an optional name.
void set_playing(bool active)
virtual void update(float delta_time)
Updates all entities in the scene.
void set_default_camera(EntityID camera_id)
Sets the default camera for the scene.
CameraComponent * get_default_camera() const
void set_source_filename(const std::filesystem::path &filename)
const std::filesystem::path & get_source_filename() const
void register_all_components()
static bool serialize(std::ostream &output, const Scene *scene)
static bool deserialize(std::istream &input, Scene *scene)