少し前に作ってうまくいかなかったタイマーを手直しして、1.1分で0.2秒くらいのずれで実現できた。なにより描画がスムースになったのがよかった。悪かったのは気を利かせたつもりの描画スレッドだった。minecraft_pi_rubyを見てみるとTCPソケットでマイクラと交信していたので、余計なスレッドをなくしたらあっさり動いてくれた。
時間精度の方はLindaのRuby実装であるRindaをタイマースレッドで動かすようにしたことで安定した。お試し以外でRindaを使ったのは初めてだったけど、とっても簡単にできた。もしCPUが混んでもいいように、tapleには表示すべき時刻を秒単位で書くようにしたけど、tapleはdefaultの60秒は残るので、ダメダメ、タイムアウトを変えないと。
マイクラの画面は以下のコードでフラットにしちゃってる。
mc.set_blocks(-100, 0, -100, 100, 63, 100, Block::AIR) mc.set_blocks(-100, -1, -100, 100, 1, 100, Block::GRASS) mc.set_blocks(-100, -63, -100, 100, -2, 100, Block::STONE)
これだとあまりに殺風景なので、適当なワールドを作って、ブロックデータを取り出し、それを毎回適用するようにしようと考えている。またタイマーのフォントも気に入らないので、できるだけ綺麗にしたいな。