protected sealed override Error Import() { SceneContext = GetContext(); if (UsedExtension is not null) { typeof(SceneImportExtension <SceneBase, Context>) .GetProperty(nameof(SceneImportExtension <SceneBase, Context> .SceneContext)) ! .SetValue(UsedExtension, SceneContext); } ulong buildedSceneId; try { SceneBase sceneNode = BuildScene(); buildedSceneId = sceneNode.GetInstanceId(); UsedExtension?.OnSceneBuilt(sceneNode); } catch (Exception error) { GD.PushError(error.Message); return(Error.Bug); } SceneBase buildedScene = (GD.InstanceFromId(buildedSceneId) as SceneBase) !; foreach (Node child in buildedScene.GetChildren()) { SetOwnerRecursive(child, buildedScene); } var packedScene = new PackedScene(); packedScene.TakeOverPath(ImportContext.SavePath); if (packedScene.Pack(buildedScene) != Error.Ok) { return(Error.Failed); } return(ResourceSaver.Save($"{ImportContext.SavePath}.{GetSaveExtension()}", packedScene)); }