クラフトゲーム開発(チェスト間のアイテムの運搬タスク)
前回にアイテム運搬の実装に着手したので、今回は動作するのを目指して実装していきます。今回も実装する仕様の確認から行っていますが、私がどうすべきか理解できてないので繰り返し書き出して確認した結果です。
ホームエリアと部屋の定義について
実装する前にホームエリアと部屋の関係を書き出して確認しました。
ホームエリアの中央に帰還ポイントがある。
- 探索エリアから帰還したときに自キャラが出現する位置。帰還ポイントから壁と門を障害物とみなして経路探索して移動できる範囲を「領地」と呼ぶ。
- 領地に接した門の内側から経路探索したときに周囲が壁か門のみの範囲を「部屋」と呼ぶ。
- 領地と部屋でない範囲を「原野」と呼ぶ。
↓ホームエリアの帰還ポイント、壁、門、部屋、原野の定義例
チェストは領地か部屋にしか置けないことにします。
運搬の処理の流れ
部屋の中でない領地にチェストが2つあって、そこのアイテムを運搬させるあたりを実装します。確認のために運搬の処理の流れを書き出してみます。
セーブデータの読み込み
- ホームエリアの建物の配置を読み込んだ後に領地と部屋の判定を行う。
- チェスト内のアイテム情報を読み込んで配置する。
- 地面の上にある(チェストに入ってない)アイテム情報を読み込んで配置する。
運搬タスクの生成
- 部屋ごとに運び出してよいアイテムのリストを更新する。
- 具体的にどのチェストから運び出すかも保持しておく。
- 部屋ごとに要求するアイテムをどこからどこに運ぶか割り当てる。
- 部屋の中のチェストに要求するアイテムがあれば、部屋内の運搬タスクを作る。
- なければ近い部屋から順に評価して、部屋から部屋への運搬タスクを作る。
チェストのアイテムが増減された場合、
- チェストが所属する部屋の「運び出してよいアイテムのリスト」を更新する。
- リストのアイテムの種類が増えた場合、そのアイテムを他の部屋が要求してないかを確認して運搬タスクを作る。
実装したこと
今回は領地にある2つのチェスト間での運搬タスクの生成なので、さっき書き出した内容の「運搬タスクの生成」を実装すればオッケーです。
↓運搬タスクを作るあたりのコード
↓実行して生成されたタスクのデバッグ出力
実際に NPC が運んでるわけではないですが、とりあえず適切な結果になって大変よいです。
まとめと今後の予定
今回は運搬タスク処理の流れを書き出して実装しました。大変よいです。
次回は、この運搬タスクを NPC が処理するあたりか、今回省略した経路探索のあたりに着手します。がんばります。