クラフトゲーム開発(NPC にアイテム運搬させる)
NPC にアイテムを運搬させるあたりを実装します。細かいことは全部後回しにして作業を進めます。
やること
- 運搬タスクを NPC に割り振る。
- NPC に運搬させる。
運搬タスクを NPC に割り振る
運搬タスクに限らず、タスクをどの NPC にどう割り振るかは別途考える必要があるのですが、とりあえず NPC を作って運搬タスクを割り振ります。
今回もコーディングがメイン作業なのでコードを貼りますが、Room クラスに TryAssignTask() メソッドを実装しました。Room クラスのメソッドにした理由は、NPC のタスクの優先度をプレイヤーが操作するときに「この NPC はこの鍛冶部屋の優先度は7,料理部屋の優先度は3」とか、指定を部屋単位を行わせるためです。
よいです。
NPC に運搬タスクを処理させる
そして、NPC は運搬タスクの処理として
- 運搬元のチェストまで移動する。
- 運搬先のチェストからアイテムを取り出して持つ。
- 運搬先のチェストまで移動する。
- 運搬先のチェストにアイテムを格納する。
という処理にします。この上記の処理を switch での状態遷移に手動でコーディングするとこうなります。
まだ経路探索や移動処理が未実装なので Worker は瞬間的に状態を遷移して移動するのですが「(0, 2) のチェストにある Wood を (6, 2) にあるチェストまで運ぶ」という運搬タスクの処理結果はこうなります。
↓運搬し終わって NPC(白い矩形)が (6, 2) の位置に表示されている様子
見てもわかりにくいですが、実装した処理が適切に動作して大変よいです。この実行結果になったときに2つのチェストを右クリックして確認すると、左のチェストから Wood がなくなって右のチェストに Wood があるのが確認できました。大変よいです。
まとめと今後の予定
小難しい処理である運搬タスクでアイテム移動させるあたりが動作しました。次回はNPC が経路探索して移動するようにして「あ、運んでる」というのが見てわかるのを目指します。がんばります。