コード例 #1
0
        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));
        }