Skip to content

Commit 2cf54a3

Browse files
committed
fixed editor app reload
1 parent bd6187c commit 2cf54a3

6 files changed

Lines changed: 19 additions & 8 deletions

File tree

kool-core/src/commonMain/kotlin/de/fabmax/kool/editor/model/NodeModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ abstract class NodeModel(val nodeData: SceneNodeData) {
119119
it.destroyComponent()
120120
check(!it.isCreated) { "Component not destroyed: $it" }
121121
}
122+
components.clear()
122123
onNodeUpdate.clear()
123124
drawNode.release()
124125
drawNode.parent?.removeNode(drawNode)

kool-core/src/commonMain/kotlin/de/fabmax/kool/editor/model/SceneModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ class SceneModel(sceneData: SceneNodeData, val project: EditorProject) : NodeMod
9595
}
9696

9797
private fun disposeCreatedScene() {
98-
nodeModels.values.forEach { it.destroyComponents() }
98+
nodeModels.values.forEach {
99+
it.destroyComponents()
100+
project.entities -= it
101+
}
102+
nodeModels.clear()
99103
nodesToNodeModels.clear()
100104

101105
drawNode.release()

kool-core/src/commonMain/kotlin/de/fabmax/kool/pipeline/ao/AoPipeline.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ abstract class AoPipeline : BaseReleasable() {
9191
depthPass = NormalLinearDepthMapPass(drawNode, mapWidth, mapHeight)
9292
depthPass.camera = proxyCamera
9393
depthPass.isUpdateDrawNode = false
94+
depthPass.isReleaseDrawNode = false
9495
depthPass.onBeforeCollectDrawCommands += { ev ->
9596
proxyCamera.sync(ev)
9697
}

kool-core/src/commonMain/kotlin/de/fabmax/kool/scene/Node.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,13 @@ open class Node(name: String? = null) : BaseReleasable() {
324324
return null
325325
}
326326

327+
fun traverse(block: (Node) -> Unit) {
328+
block(this)
329+
children.forEach {
330+
it.traverse(block)
331+
}
332+
}
333+
327334
open fun collectTag(result: MutableList<Node>, tag: String, value: String? = null) {
328335
if (tags.hasTag(tag, value)) {
329336
result += this

kool-core/src/commonMain/kotlin/de/fabmax/kool/scene/Scene.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ open class Scene(name: String? = null) : Node(name) {
115115
super.release()
116116

117117
mainRenderPass.renderPass.release()
118+
offscreenPasses.update()
118119
for (i in offscreenPasses.indices) {
119120
offscreenPasses[i].release()
120121
}

kool-editor/src/commonMain/kotlin/de/fabmax/kool/editor/KoolEditor.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,9 @@ class KoolEditor(val ctx: KoolContext, val paths: ProjectPaths) {
272272
editorCameraTransform.addNode(editorOverlay.camera)
273273

274274
// dispose old scene + objects
275-
EditorState.projectModel.getCreatedScenes().map { it.drawNode }.let { oldScenes ->
276-
ctx.scenes -= oldScenes.toSet()
277-
oldScenes.forEach {
278-
it.removeOffscreenPass(selectionOverlay.selectionPass)
279-
it.release()
280-
}
275+
EditorState.projectModel.getCreatedScenes().forEach { sceneModel ->
276+
ctx.scenes -= sceneModel.drawNode
277+
sceneModel.drawNode.removeOffscreenPass(selectionOverlay.selectionPass)
281278
}
282279
EditorState.loadedApp.value?.app?.onDispose(ctx)
283280
selectionOverlay.selectionPass.disposePipelines(ctx)
@@ -288,7 +285,7 @@ class KoolEditor(val ctx: KoolContext, val paths: ProjectPaths) {
288285
// add scene objects from new app
289286
EditorState.projectModel.getCreatedScenes().let { newScenes ->
290287
if (newScenes.size != 1) {
291-
logW { "Unusual number of scene, currently only single scene setups are supported" }
288+
logW { "Unsupported number of scene, currently only single scene setups are supported" }
292289
}
293290
newScenes.firstOrNull()?.let { sceneModel ->
294291
val scene = sceneModel.drawNode

0 commit comments

Comments
 (0)