ニートが学ぶUniRx さらなる改造

はいどーもこんばんは、少しはUniRxに慣れてきたニートです。
本日は前回の記事で作ったものを少しだけ改造してみたいと思います。

どんな改造をするか

改造項目を箇条書きにしてみます。

・Toggleで「+ボタン」と「-ボタン」(以下カウンタボタン)の使用可能を変更する
・Stopボタンを押したとき、カウンタの操作が不能になる
・カウンタの操作が不能になったとき、カウンタボタンのinteractableをfalseにする
・Rteryボタンを押すと初期化される(カウンタボタンも操作可能になる)

こんな感じですね。

ストップボタンをストリームにする

まずは停止機能を作ってみます。
というわけで、ストップボタンをストリームにしました。

こんな感じですね。
あとは+ボタンと-ボタンのストリームにTakeUntilを使用し、ストップボタンのストリームが流れるまで有効ということにします。

こんな感じですね。

トグルをストリームにする
トグルがの値の変化を監視するため、トグルもストリームにします。
で、値が変わったときに、その値をボタンのinteractableに伝えます。
ついでにストップボタンが押されたらストリームを停止するようにします。

こんな感じですね。

リトライボタン

最後にリトライボタンです。
これはかなり悩みました。
ストップボタンを押すとストリームが停止してしまうので、再度Subsribeしなければなりません。
ですが再度Subsribeすると、無限にSubsribeできてしまう気がします。
悩みつつ書いたコードが以下のものです(全体です)。

見ての通り、subscribeActionというデリゲートを用意しています。
リトライボタンが押されたとき、こいつを実行するようにしています。
また、ゲーム開始時は必ずSubsribeしたいので、最初に実行させています。

なんか汚い

上記のコード、どう見てもなんか汚いですよね。
具体的に言うならsubscribeActionあたりが臭います。
というわけで早速修正を試みたのですが……二時間くらいいじりにいじっても、上記の条件を満たすコードを綺麗に書くことができなかったので切り上げました。
Countプロパティを作れば何とか行けそうだったのですが……。

終わりに

まだまだUniRxの真髄は得られないようです。
もっと勉強したり、他の人のコードを読んだりしないとなあと思いました。

ほなそんな感じでまた。

おまけで残骸コードも載せときます(これは動作が変なままです)。

フォローする