hydrate-editor 0.0.2

Game asset pipeline and authoring framework
Documentation
use hydrate_model::pipeline::{HydrateProjectConfiguration, ImportJobToQueue, ImporterRegistry};
use hydrate_model::{
    EditorModel, PathNode, PathNodeRoot, SchemaLinker, SchemaSet, SchemaSetBuilder,
};

pub struct DbState {
    pub project_configuration: HydrateProjectConfiguration,
    pub editor_model: EditorModel,
}

impl DbState {
    fn do_load(
        schema_set: SchemaSet,
        importer_registry: &ImporterRegistry,
        project_configuration: &HydrateProjectConfiguration,
        import_job_to_queue: &mut ImportJobToQueue,
    ) -> EditorModel {
        let mut editor_model = EditorModel::new(project_configuration.clone(), schema_set);
        for pair in &project_configuration.id_based_asset_sources {
            editor_model.add_file_system_id_based_asset_source(
                project_configuration,
                &pair.name,
                &pair.path,
                import_job_to_queue,
            );
        }
        for pair in &project_configuration.path_based_asset_sources {
            editor_model.add_file_system_path_based_data_source(
                project_configuration,
                &pair.name,
                &pair.path,
                importer_registry,
                import_job_to_queue,
            );
        }

        editor_model
    }

    #[profiling::function]
    pub fn load_schema(hydrate_project_configuration: &HydrateProjectConfiguration) -> SchemaSet {
        let mut linker = SchemaLinker::default();
        let mut schema_set = SchemaSetBuilder::default();

        PathNode::register_schema(&mut linker);
        PathNodeRoot::register_schema(&mut linker);
        for path in &hydrate_project_configuration.schema_def_paths {
            linker.add_source_dir(path, "**.json").unwrap();
        }
        schema_set.add_linked_types(linker).unwrap();

        schema_set.build()
    }

    #[profiling::function]
    pub fn load(
        schema_set: &SchemaSet,
        importer_registry: &ImporterRegistry,
        project_configuration: &HydrateProjectConfiguration,
        import_job_to_queue: &mut ImportJobToQueue,
    ) -> Self {
        let editor_model = Self::do_load(
            schema_set.clone(),
            importer_registry,
            &project_configuration,
            import_job_to_queue,
        );

        DbState {
            project_configuration: project_configuration.clone(),
            editor_model,
        }
    }

    pub fn save(&mut self) {
        self.editor_model.save_root_edit_context();
    }
}