Add stack views, both char and long
This commit is contained in:
@@ -3,5 +3,5 @@ package befide.befunge.state
|
|||||||
data class Value(val value: Long) {
|
data class Value(val value: Long) {
|
||||||
constructor(value: Char) : this(value.toLong())
|
constructor(value: Char) : this(value.toLong())
|
||||||
|
|
||||||
val asChar: Char? = if (value in (32..126)) value.toChar() else null
|
val asChar: Char? = if (value in (32..127)) value.toChar() else null
|
||||||
}
|
}
|
||||||
@@ -38,9 +38,16 @@ class ActionView(val interp: Interpreter, val ioView: IOView) : View() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button("walk") {
|
||||||
|
setOnAction {
|
||||||
|
runTimeline.rate = 50.0
|
||||||
|
runTimeline.playFromStart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
button("crawl") {
|
button("crawl") {
|
||||||
setOnAction {
|
setOnAction {
|
||||||
runTimeline.rate = 2.0
|
runTimeline.rate = 4.0
|
||||||
runTimeline.playFromStart()
|
runTimeline.playFromStart()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,47 @@
|
|||||||
package befide.ide
|
package befide.ide
|
||||||
|
|
||||||
|
import befide.befunge.b93.padEnd
|
||||||
import befide.befunge.core.Interpreter
|
import befide.befunge.core.Interpreter
|
||||||
|
import befide.befunge.state.Value
|
||||||
|
import javafx.beans.property.SimpleStringProperty
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
|
import tornadofx.getValue
|
||||||
|
import tornadofx.setValue
|
||||||
|
|
||||||
class StackView(val interp: Interpreter) : View() {
|
class StackView(val interp: Interpreter) : View() {
|
||||||
override val root = textarea {
|
val charOutProperty = SimpleStringProperty()
|
||||||
prefWidth = 100.0
|
var charOut by charOutProperty
|
||||||
|
val longOutProperty = SimpleStringProperty()
|
||||||
|
var longOut by longOutProperty
|
||||||
|
|
||||||
|
|
||||||
|
override val root = hbox {
|
||||||
|
textarea(charOutProperty) {
|
||||||
|
maxWidth = 1.0
|
||||||
|
paddingHorizontal = 1
|
||||||
|
isEditable = false
|
||||||
|
}
|
||||||
|
textarea(longOutProperty) {
|
||||||
|
prefWidth = 90.0
|
||||||
|
isEditable = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private fun <T> getStackStr(mapping: (Value) -> T): String {
|
||||||
|
return interp.stack.takeLast(interp.funge.height)
|
||||||
|
.map (mapping)
|
||||||
|
.padEnd(interp.funge.height, "")
|
||||||
|
.reversed()
|
||||||
|
.joinToString("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
charOut = getStackStr { it.asChar ?: '*'}
|
||||||
|
longOut = getStackStr { it.value }
|
||||||
|
|
||||||
|
interp.stackChanged += {
|
||||||
|
charOut = getStackStr { it.asChar ?: '*'}
|
||||||
|
longOut = getStackStr { it.value }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user