diff --git a/src/main/kotlin/net/shadowfacts/asmr/manager/ManagerBlockEntity.kt b/src/main/kotlin/net/shadowfacts/asmr/manager/ManagerBlockEntity.kt index eb0dfab..cb5902d 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/manager/ManagerBlockEntity.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/manager/ManagerBlockEntity.kt @@ -34,8 +34,8 @@ class ManagerBlockEntity: BlockEntity(ASMR.managerEntityType) { it.position = Point(240.0, 0.0) } - program.startBlock.nextExecutableBlock = divide - divide.nextExecutableBlock = print + program.startBlock.linkNext(divide) + divide.linkNext(print) } fun activate() { diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt index c2a5298..c01213c 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt @@ -1,14 +1,17 @@ package net.shadowfacts.asmr.program -import net.shadowfacts.cacao.geometry.Point - /** * @author shadowfacts */ abstract class ExecutableBlock: ProgramBlock() { - var nextExecutableBlock: ExecutableBlock? = null + open val executionFlow = ExecutionFlow() abstract fun execute() + fun linkNext(next: ExecutableBlock) { + executionFlow.next = next + next.executionFlow.prev = this + } + } \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt new file mode 100644 index 0000000..932c2df --- /dev/null +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt @@ -0,0 +1,11 @@ +package net.shadowfacts.asmr.program + +/** + * @author shadowfacts + */ +open class ExecutionFlow { + + open var next: ExecutableBlock? = null + open var prev: ExecutableBlock? = null + +} \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/Program.kt b/src/main/kotlin/net/shadowfacts/asmr/program/Program.kt index 93d3c9c..c5ac8ea 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/Program.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/Program.kt @@ -14,11 +14,11 @@ class Program { val blocks = mutableListOf() fun execute() { - var currentBlock: ExecutableBlock? = startBlock.nextExecutableBlock + var currentBlock: ExecutableBlock? = startBlock.executionFlow.next while (currentBlock != null) { currentBlock.execute() - currentBlock = currentBlock.nextExecutableBlock + currentBlock = currentBlock.executionFlow.next } } diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt index 9acf0ef..e48d696 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt @@ -2,10 +2,7 @@ package net.shadowfacts.asmr.program.blocks import net.minecraft.util.Identifier import net.shadowfacts.asmr.ASMR -import net.shadowfacts.asmr.program.ExecutableBlock -import net.shadowfacts.asmr.program.ProgramBlockInput -import net.shadowfacts.asmr.program.ProgramBlockOutput -import net.shadowfacts.asmr.program.ProgramType +import net.shadowfacts.asmr.program.* import net.shadowfacts.cacao.geometry.Point /** diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt index 7df2e60..8f60fe1 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt @@ -1,18 +1,18 @@ package net.shadowfacts.asmr.program.blocks import net.shadowfacts.asmr.program.ExecutableBlock -import net.shadowfacts.asmr.program.ProgramBlock import net.shadowfacts.asmr.program.ProgramBlockInput import net.shadowfacts.asmr.program.ProgramBlockOutput /** * @author shadowfacts */ -class StartBlock: ProgramBlock() { +class StartBlock: ExecutableBlock() { override val inputs: Array> = arrayOf() override val outputs: Array> = arrayOf() - var nextExecutableBlock: ExecutableBlock? = null + override fun execute() { + } } \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt index 3540c0b..d1fc21f 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt @@ -43,9 +43,9 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri val titleStack = addArrangedSubview(StackView(Axis.HORIZONTAL, Distribution.CENTER)) val title = titleStack.addArrangedSubview(Label(block.javaClass.simpleName)) if (block is ExecutableBlock) { - val incomingTexture = executionFlowInactiveTexture + val incomingTexture = if (block.executionFlow.prev == null) executionFlowInactiveTexture else executionFlowActiveTexture incomingExecution = titleStack.addArrangedSubview(TextureView(incomingTexture), index = 0) - val outgoingTexture = if (block.nextExecutableBlock == null) executionFlowInactiveTexture else executionFlowActiveTexture + val outgoingTexture = if (block.executionFlow.next == null) executionFlowInactiveTexture else executionFlowActiveTexture outgoingExeuction = titleStack.addArrangedSubview(TextureView(outgoingTexture)) } diff --git a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramCanvasView.kt b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramCanvasView.kt index f767bac..4547f68 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramCanvasView.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramCanvasView.kt @@ -31,7 +31,7 @@ class ProgramCanvasView(val program: Program): View() { for ((block, view) in blocks) { - (block as? ExecutableBlock)?.nextExecutableBlock?.let { next -> + (block as? ExecutableBlock)?.executionFlow?.next?.let { next -> blocks[next]?.let { nextView -> val outgoing = view.outgoingExeuction!! val incoming = nextView.incomingExecution!! diff --git a/src/main/resources/assets/asmr/textures/gui/programmer/execution_flow.png b/src/main/resources/assets/asmr/textures/gui/programmer/execution_flow.png index 49edb93..61a9449 100644 Binary files a/src/main/resources/assets/asmr/textures/gui/programmer/execution_flow.png and b/src/main/resources/assets/asmr/textures/gui/programmer/execution_flow.png differ diff --git a/src/test/kotlin/net/shadowfacts/asmr/program/ProgramTests.kt b/src/test/kotlin/net/shadowfacts/asmr/program/ProgramTests.kt index e8df0e0..1c723fe 100644 --- a/src/test/kotlin/net/shadowfacts/asmr/program/ProgramTests.kt +++ b/src/test/kotlin/net/shadowfacts/asmr/program/ProgramTests.kt @@ -20,7 +20,7 @@ class ProgramTests { it.right.source = two.output } - program.startBlock.nextExecutableBlock = multiply + program.startBlock.linkNext(multiply) program.execute()