45 lines
1.1 KiB
Kotlin
45 lines
1.1 KiB
Kotlin
|
package net.shadowfacts.asmr.ui
|
||
|
|
||
|
import net.shadowfacts.asmr.program.Program
|
||
|
import net.shadowfacts.asmr.program.ProgramBlock
|
||
|
import net.shadowfacts.cacao.geometry.Point
|
||
|
import net.shadowfacts.cacao.util.Color
|
||
|
import net.shadowfacts.cacao.util.RenderHelper
|
||
|
import net.shadowfacts.cacao.view.View
|
||
|
|
||
|
/**
|
||
|
* @author shadowfacts
|
||
|
*/
|
||
|
class ProgramCanvasView(val program: Program): View() {
|
||
|
|
||
|
lateinit var blocks: Map<ProgramBlock, ProgramBlockView>
|
||
|
|
||
|
override fun wasAdded() {
|
||
|
super.wasAdded()
|
||
|
|
||
|
zIndex = 5.0
|
||
|
|
||
|
blocks = program.blocks.associateWith { ProgramBlockView(it) }
|
||
|
blocks.values.forEach {
|
||
|
addSubview(it)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
override fun drawContent(mouse: Point, delta: Float) {
|
||
|
super.drawContent(mouse, delta)
|
||
|
|
||
|
blocks.keys.forEach { block ->
|
||
|
block.inputs
|
||
|
.filter { it.source != null }
|
||
|
.forEach { input ->
|
||
|
val start = block.position
|
||
|
val source = input.source!!
|
||
|
val sourcePosition = source.block.position
|
||
|
val end = Point(sourcePosition.x + blocks[source.block]!!.bounds.width, sourcePosition.y)
|
||
|
|
||
|
RenderHelper.drawLine(start, end, zIndex, 5f, Color.WHITE)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|