package net.shadowfacts.asmr.ui import net.shadowfacts.asmr.program.ExecutableBlock 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 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) for ((block, view) in blocks) { (block as? ExecutableBlock)?.executionFlow?.next?.let { next -> blocks[next]?.let { nextView -> val outgoing = view.outgoingExeuction!! val incoming = nextView.incomingExecution!! val start = outgoing.convert(outgoing.bounds.center, to = this) val end = incoming.convert(outgoing.bounds.center, to = this) RenderHelper.drawLine(start, end, zIndex, 5f, Color(0x00ff00)) } } // for (input in block.inputs) { // if (input.source == null) continue // 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) // } } } }