仮UIとしての「道具」コマンドを作りましたので、もう少しそこを作っていきたいですね。道具コマンドで使われたアイテムは壊れて消えたり、交換で増えたりするでしょう。
アイテムの増減処理を先に作ってから、道具を使うフローの下準備を行います。
アイテムの増減
新規アイテムの取得
既存のCDBへの書き込みコモンを使えばよいのですが、その代入位置は状況次第です。
- アイテム所持数0なら、アイテムスロット1へ代入
- アイテム所持数1なら、アイテムスロット2へ代入
- アイテム所持数2なら、アイテムスロット3へ代入
……という具合。
要はCDBへ取得アイテムのIDを書き込む前に、「空いているスロット(CDB側のID)を探す」処理が必要となります。
アイテムを失った時は「上詰め」する
アイテムのロストなら、対象のスロットにアイテムID0(空欄)を書き込めばOKです。
しかし、たとえば所持アイテム3個の状態でスロット2番のアイテムを失ったとき、所持アイテムリストは次のようになります。
- てつの剣
- (空欄)
- てつの槍
- (空欄)
- (空欄)
見栄えがよろしくないですね。
バグのもとにもなりかねません。スロット2が空いたのなら、スロット3のアイテムが上に昇ってきてほしいのです。
プログラミングでいう「ソート(並び替え)」の処理が必要になってきます。
ソートは奥深いのですが、今必要な仕組みはシンプルな方ですね。
おなじ「アイテムを失う」でも、「アイテムIDを指定して、それがどのスロットに入っているのかを探す」タイプの処理もあるかもしれません。その場合も、指定のアイテムのスロット位置がわかれば、あとは同じ処理をするだけです。
アイテムの使用
隣接の同軍ユニットと所持アイテムを「交換」する
実際に交換ができるまでは進めませんが、その直前までの処理は用意しておきます。
道具コマンドの表示条件を満たす時、「交換」コマンドも同時に出現するとします(厳密な出現条件の設定は後回し)。
交換の対象選択は、過去つくった攻撃対象の決定待ちの処理とおなじ要領ですね(距離1のマスにパネルを表示)。せっかくなので、同じコモンの入力値の変更(モード切替)でどちらにでも対応できるようにしましょう。
映っていませんが、「┃┗対象決定待ち」コモンの返り値で、対象のユニット番号を返すようにします(返り値にユニット番号を代入)。
ユニットコモンの本体の方で、それを受けて実処理コモンを呼ぶように。
既存の「攻撃」処理も同様に書き換えられています(「┃┣指定位置からnマス距離にパネル」が、後々触れる処理の先取りをしていますが今は気にせずに)。
ここまで進んだら、あとは実際に「交換」を行うコモンへ情報を送ります。
が、交換の実処理づくりはかなり大変。ひとまずはここまでで止めておきましょう。
自作メニューづくりに入っていきますので、もう少し簡単なものを作って慣れておくとよいかと思います。
道具コマンドから行えること「使う/捨てる」
こちらは「操作ユニットひとりの道具を使う」だけの処理。2ユニット間の処理である「交換」よりは簡単そうですね。
使った際の効果はアイテムによってさまざまですから、やはり「使う」の効果発動直前までを今回の目標とします。
まずは自作の選択肢づくり。
移動/攻撃/道具などのコマンドリストを作った時と同じ要領です。
選択肢の描画時と、左クリック時の処理のみ掲載しましょう。
選択中のピクチャの状態表示は、今回は色調補正ではなく不透明度の変更でやってみています。
さて、使う道具を決定したら、そこでさらに選択肢「使う/捨てる」が出てきます。選択肢が入れ子になっているわけですね。
こちらも描画時と左クリック時のあたりを掲載。
予定通り「使う」の実処理はまだ扱いませんが、「捨てる」はアイテム消去ですから、既存の処理で作ることができますね。
「本当に捨ててもいいですか?」な確認が欲しいところですが、さらにもうひとつの選択肢を入れ子にするのはかなり複雑。
すべての局面で使いまわせるような、汎用のハイ/イイエ確認処理を作って呼び出すのがいいかもしれません。
出来上がりです。