導線と電池のプラス極・マイナス極だけでは寂しいですね。とりあえずスイッチを追加しましょうか。 まだ電気を流して回路を動かすことはできないので描画するだけです。
LibreOffice Draw で元データを作ります。
data_01.fodg
の 4 ページ目を追加。
sw
というテキストを持っている矩形を追加します。
後は今までやってきたことと大体同じですね。
Unit::Switch
クラスを追加。
module Unit # ... class Switch < SingleCell def initialize(pos) super # ON: true / OFF: false @state = false end def to_plain { pos: @pos.to_plain } end def self.from_plain(plain) Switch.new( Point.from_plain(plain["pos"]) ) end end
テキストが sw
になっている矩形を探して Switch オブジェクトにします。
class Circuit # ... def self.create(lines, rects) # ... switches = rects .select { |rect| rect.text == "sw" } .map { |rect| to_switch(rect) } # ...
描画。
class View # ... def draw_switch(switch) @drawer.draw_box_fill( switch.x + 0.1, switch.y + 0.1, switch.x + 0.9, switch.y + 0.9, C_BLACK ) @drawer.draw_box( switch.x + 0.1, switch.y + 0.1, switch.x + 0.9, switch.y + 0.9, C_INACTIVE ) @drawer.draw_box_fill( switch.x + 0.3, switch.y + 0.6, switch.x + 0.7, switch.y + 0.7, C_INACTIVE ) end
BROWSER=1 ./run.sh data_01.fodg 4
で実行するとこんな感じです。
ついでに色を調整しました。 まだ電気を流せていないので、導線とスイッチは暗い緑色にしています。
形がスイッチっぽく見えないかもしれませんが、
たとえばこういう形だと方向を気にしないといけなくて (縦か横かで表示を切り替えないといけない)めんどくさいんですよね。 配線の角の部分に置くのは禁止すべきか? とか考えないといけないし。
最低限 ON/OFF の状態が分かればいい訳ですし、 ひとまず縦でも横でも両方対応できる形にしました。 後で気が変わったらいくらでも凝ったものにすればいいと思います。