diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt index 00aa969..10bb8d4 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ExecutableBlock.kt @@ -1,9 +1,11 @@ package net.shadowfacts.asmr.program +import net.minecraft.util.Identifier + /** * @author shadowfacts */ -abstract class ExecutableBlock: ProgramBlock() { +abstract class ExecutableBlock(identifier: Identifier): ProgramBlock(identifier) { open val executionFlow = ExecutionFlow(this) diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlock.kt index a9c0e72..cf89242 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlock.kt @@ -1,15 +1,21 @@ package net.shadowfacts.asmr.program +import net.minecraft.util.Identifier +import net.minecraft.util.Language import net.shadowfacts.cacao.geometry.Point /** * @author shadowfacts */ -abstract class ProgramBlock { +abstract class ProgramBlock(val identifier: Identifier) { var position: Point = Point.ORIGIN abstract val inputs: Array> abstract val outputs: Array> + fun translateName(): String { + return Language.getInstance().translate("programblock.${identifier.namespace}.${identifier.path}") + } + } \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockInput.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockInput.kt index 8cbaa00..3916d1d 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockInput.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockInput.kt @@ -1,6 +1,7 @@ package net.shadowfacts.asmr.program import net.minecraft.util.Identifier +import net.minecraft.util.Language /** * @author shadowfacts @@ -26,4 +27,8 @@ class ProgramBlockInput( source?.unlink(to = this) } + fun translateName(): String { + return Language.getInstance().translate("programblock.param.${identifier.namespace}.${identifier.path}") + } + } diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockOutput.kt b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockOutput.kt index 4229dbe..19029f3 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockOutput.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/ProgramBlockOutput.kt @@ -1,6 +1,7 @@ package net.shadowfacts.asmr.program import net.minecraft.util.Identifier +import net.minecraft.util.Language /** * @author shadowfacts @@ -26,4 +27,8 @@ class ProgramBlockOutput( _destinations.remove(to) } + fun translateName(): String { + return Language.getInstance().translate("programblock.param.${identifier.namespace}.${identifier.path}") + } + } \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/ConstantBlock.kt b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/ConstantBlock.kt index 193cd27..9342f94 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/ConstantBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/ConstantBlock.kt @@ -13,9 +13,11 @@ import net.shadowfacts.asmr.program.ProgramType class ConstantBlock( val type: ProgramType, val value: Type -): ProgramBlock() { +): ProgramBlock( + Identifier(ASMR.modid, "constant") +) { - val output = ProgramBlockOutput(Identifier(ASMR.modid, "constant_output"), type, this).apply { + val output = ProgramBlockOutput(Identifier(ASMR.modid, "constant.output"), type, this).apply { value = this@ConstantBlock.value } 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 e48d696..4aeceed 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/PrintBlock.kt @@ -10,9 +10,11 @@ import net.shadowfacts.cacao.geometry.Point */ class PrintBlock( val type: ProgramType -): ExecutableBlock() { +): ExecutableBlock( + Identifier(ASMR.modid, "print") +) { - val input = ProgramBlockInput(Identifier(ASMR.modid, "print_input"), type, this) + val input = ProgramBlockInput(Identifier(ASMR.modid, "print.input"), type, this) override val inputs: Array> = arrayOf(input) override val outputs: Array> = arrayOf() 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 8f60fe1..33fdac3 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/program/blocks/StartBlock.kt @@ -1,5 +1,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 @@ -7,7 +9,9 @@ import net.shadowfacts.asmr.program.ProgramBlockOutput /** * @author shadowfacts */ -class StartBlock: ExecutableBlock() { +class StartBlock: ExecutableBlock( + Identifier(ASMR.modid, "start") +) { override val inputs: Array> = arrayOf() override val outputs: Array> = arrayOf() 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 98cf2b5..3e7a487 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 @@ -14,7 +14,9 @@ import java.lang.RuntimeException class BinaryOperatorBlock( val type: ProgramType, val operation: Operation -): ExecutableBlock() { +): ExecutableBlock( + Identifier(ASMR.modid, "binary_operator") +) { init { if (type != ProgramType.INT && type != ProgramType.FLOAT) { @@ -22,10 +24,10 @@ class BinaryOperatorBlock( } } - val left = ProgramBlockInput(Identifier(ASMR.modid, "left_operand"), type, this) - val right = ProgramBlockInput(Identifier(ASMR.modid, "right_operand"), type, this) + val left = ProgramBlockInput(Identifier(ASMR.modid, "binary_operator.left_operand"), type, this) + val right = ProgramBlockInput(Identifier(ASMR.modid, "binary_operator.right_operand"), type, this) - val output = ProgramBlockOutput(Identifier(ASMR.modid, "result"), type, this) + val output = ProgramBlockOutput(Identifier(ASMR.modid, "binary_operator.result"), type, this) override val inputs: Array> = arrayOf(left, right) override val outputs: Array> = arrayOf(output) diff --git a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt index 522fce8..4543786 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt @@ -48,7 +48,7 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri zIndex = 10.0 val titleStack = addArrangedSubview(StackView(Axis.HORIZONTAL, Distribution.CENTER)) - val title = titleStack.addArrangedSubview(Label(block.javaClass.simpleName)) + val title = titleStack.addArrangedSubview(Label(block.translateName())) if (block is ExecutableBlock) { val incomingTexture = if (block.executionFlow.prev == null) emptyConnection else executionConnection incomingExecution = titleStack.addArrangedSubview(TextureView(incomingTexture), index = 0) @@ -67,21 +67,16 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri outgoingExeuction!!.widthAnchor equalTo outgoingExeuction!!.heightAnchor outgoingExeuction!!.widthAnchor equalTo 7 } - - -// for (paramView in inputViews.values) { -// paramView.widthAnchor equalTo paramView.heightAnchor -// paramView.widthAnchor equalTo 7 -// } } for (i in 0 until max(block.inputs.size, block.outputs.size)) { val hStack = addArrangedSubview(StackView(Axis.HORIZONTAL, Distribution.CENTER)) block.inputs.getOrNull(i)?.let { input -> - val inputView = hStack.addArrangedSubview(TextureView(if (input.source == null) emptyConnection else parameterConnection)) + val inputTexture = if (input.source == null) emptyConnection else parameterConnection + val inputView = hStack.addArrangedSubview(TextureView(inputTexture)) inputViews[input] = inputView - val inputLabel = hStack.addArrangedSubview(Label(input.identifier.toString())) + val inputLabel = hStack.addArrangedSubview(Label(input.translateName())) solver.dsl { hStack.heightAnchor equalTo inputLabel.heightAnchor @@ -96,8 +91,9 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri } block.outputs.getOrNull(i)?.let { output -> - val outputLabel = hStack.addArrangedSubview(Label(output.identifier.toString(), textAlignment = Label.TextAlignment.RIGHT)) - val outputView = hStack.addArrangedSubview(TextureView(if (output.destinations.isEmpty()) emptyConnection else parameterConnection)) + val outputLabel = hStack.addArrangedSubview(Label(output.translateName(), textAlignment = Label.TextAlignment.RIGHT)) + val outputTexture = if (output.destinations.isEmpty()) emptyConnection else parameterConnection + val outputView = hStack.addArrangedSubview(TextureView(outputTexture)) outputViews[output] = outputView solver.dsl { hStack.heightAnchor equalTo outputLabel.heightAnchor @@ -108,35 +104,6 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri } } -// val pairs = block.inputs.zip(block.outputs) -// val remainingInputs = if (block.inputs.size > block.outputs.size) block.inputs.drop(block.outputs.size) else listOf() -// val remainingOutputs = if (block.outputs.size > block.inputs.size) block.outputs.drop(block.inputs.size) else listOf() -// for ((input, output) in pairs) { -// val hStack = addArrangedSubview(StackView(Axis.HORIZONTAL, Distribution.CENTER)) -// val inputView = hStack.addArrangedSubview(TextureView(if (input.source == null) emptyConnection else parameterConnection)) -// inputViews[input] = inputView -// val inputLabel = hStack.addArrangedSubview(Label(input.identifier.toString())) -// val spacingView = hStack.addArrangedSubview(View()) -// hStack.addArrangedSubview(Label(output.identifier.toString())) -//// outputViews[output] = hStack.addArrangedSubview(TextureView(if (output.destinations.isEmpty) emptyConnection else parameterConnection)) -// -// solver.dsl { -// hStack.heightAnchor equalTo inputLabel.heightAnchor -// -// inputView.widthAnchor equalTo inputView.heightAnchor -// inputView.widthAnchor equalTo 7 -// -// spacingView.widthAnchor equalTo 8 -// } -// } - -// for (input in remainingInputs) { -// addArrangedSubview(Label(input.identifier.toString())) -// } -// for (output in remainingOutputs) { -// addArrangedSubview(Label(output.identifier.toString(), textAlignment = Label.TextAlignment.RIGHT)) -// } - solver.dsl { for (view in arrangedSubviews.drop(1)) { widthAnchor.equalTo(view.widthAnchor, strength = STRONG) diff --git a/src/main/resources/assets/asmr/lang/en_us.json b/src/main/resources/assets/asmr/lang/en_us.json new file mode 100644 index 0000000..319f35b --- /dev/null +++ b/src/main/resources/assets/asmr/lang/en_us.json @@ -0,0 +1,11 @@ +{ + "programblock.asmr.start": "Start", + "programblock.asmr.constant": "Constant", + "programblock.param.asmr.constant.output": "Output", + "programblock.asmr.print": "Print", + "programblock.param.asmr.print.input": "Print Value", + "programblock.asmr.binary_operator": "Binary Math Operator", + "programblock.param.asmr.binary_operator.left_operand": "Left Operand", + "programblock.param.asmr.binary_operator.right_operand": "Right Operand", + "programblock.param.asmr.binary_operator.result": "Result" +} \ No newline at end of file