From 2e03a031b0cc6c22a7935f2985bfc55f700ca313 Mon Sep 17 00:00:00 2001 From: allem Date: Tue, 27 Nov 2018 17:50:24 -0500 Subject: [PATCH] make mutablefunge abstract, add notify method --- .../befide/befunge/b93/state/Funge93.kt | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/befunge/src/main/kotlin/befide/befunge/b93/state/Funge93.kt b/befunge/src/main/kotlin/befide/befunge/b93/state/Funge93.kt index f44cc73..aa2ec98 100644 --- a/befunge/src/main/kotlin/befide/befunge/b93/state/Funge93.kt +++ b/befunge/src/main/kotlin/befide/befunge/b93/state/Funge93.kt @@ -1,33 +1,28 @@ package befide.befunge.b93.state -import befide.befunge.core.events.FungeChange import befide.befunge.core.state.MutableFunge -import befide.befunge.core.util.Event class Funge93 - : MutableFunge { - override val size = Vec2(80, 25) + : MutableFunge() { + companion object { + val DEFAULT_DATA = Data93.SPACE + const val DEFAULT_CHAR = '\u2022' // bullet + } - override val onChange = Event>() + override val size = Vec2(80, 25) override fun next(pos: Vec2, delta: Vec2): Vec2 = (pos + delta) mod size - override fun defaultData(): LongData = LongData.SPACE - override fun defaultChar(): Char = '\u2022' // bullet + val contents = hashMapOf() - val contents = hashMapOf() - - override fun get(pos: Vec2): LongData = contents[pos] ?: defaultData() - override fun set(pos: Vec2, data: LongData) { - if (pos.x !in 0 until size.x || pos.y !in 0 until size.y) - return - - val from = this[pos] - contents[pos] = data - onChange(FungeChange(this, pos, from, data)) + override fun get(pos: Vec2): Data93 = contents[pos] ?: DEFAULT_DATA + override fun set(pos: Vec2, data: Data93) { + if (pos in Vec2.ZERO until size) notify(pos) { + contents[pos] = data + } } - override var data: Map + override var data: Map get() { return contents.toMap() } @@ -40,13 +35,13 @@ class Funge93 override var src: String get() { val lines = mutableListOf() - for ((y, row) in contents.entries.groupBy { it.key.y }.toSortedMap()) { + for ((y, row) in data.entries.groupBy { it.key.y }.toSortedMap()) { lines += List(y - lines.size) { "" } val chars = mutableListOf() for ((v, ch) in row.sortedBy { it.key.x }) { chars += List(v.x - chars.size) { ' ' } - chars += ch.char ?: defaultChar() + chars += ch.char ?: DEFAULT_CHAR } lines += chars.joinToString("") } @@ -55,7 +50,7 @@ class Funge93 set(src) { data = src.lines().mapIndexed { y, line -> line.mapIndexed { x, ch -> - Pair(Vec2(x, y), LongData(ch)) + Pair(Vec2(x, y), Data93(ch)) } }.flatten().toMap() }