diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt index 10bb8d4..c6e7df9 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt @@ -7,7 +7,7 @@ import net.minecraft.util.Identifier */ abstract class ExecutableBlock(identifier: Identifier): ProgramBlock(identifier) { - open val executionFlow = ExecutionFlow(this) + abstract val executionFlow: ExecutionFlow abstract fun execute() diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt index 7ddf41e..f8aaee4 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutionFlow.kt @@ -3,14 +3,20 @@ package net.shadowfacts.asmr.program /** * @author shadowfacts */ -open class ExecutionFlow(val block: ExecutableBlock) { +interface ExecutionFlow { + val block: ExecutableBlock - open var next: ExecutableBlock? = null - open var prev: ExecutableBlock? = null + val next: ExecutableBlock? + val prev: ExecutableBlock? +} +class DirectExecutionFlow(override val block: ExecutableBlock): ExecutionFlow { + override var next: ExecutableBlock? = null + override var prev: ExecutableBlock? = null fun link(next: ExecutableBlock) { this.next = next - next.executionFlow.prev = block + (next.executionFlow as? DirectExecutionFlow)?.let { + it.prev = block + } } - -} \ No newline at end of file +} 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 4aeceed..a00cf3a 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt @@ -19,6 +19,8 @@ class PrintBlock( override val inputs: Array> = arrayOf(input) override val outputs: Array> = arrayOf() + override val executionFlow = DirectExecutionFlow(this) + override fun execute() { println(input.value) } 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 33fdac3..daecfe0 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt @@ -2,9 +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.* /** * @author shadowfacts @@ -16,6 +14,8 @@ class StartBlock: ExecutableBlock( override val inputs: Array> = arrayOf() override val outputs: Array> = arrayOf() + override val executionFlow = DirectExecutionFlow(this) + override fun execute() { } diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/math/BinaryOperatorBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/math/BinaryOperatorBlock.kt index 3e7a487..42e75c6 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/math/BinaryOperatorBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/math/BinaryOperatorBlock.kt @@ -2,10 +2,7 @@ package net.shadowfacts.asmr.program.blocks.math 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 java.lang.RuntimeException /** @@ -32,6 +29,8 @@ class BinaryOperatorBlock( override val inputs: Array> = arrayOf(left, right) override val outputs: Array> = arrayOf(output) + override val executionFlow = DirectExecutionFlow(this) + override fun execute() { if (type == ProgramType.INT) { val left = left.value as Int