MOE3: 行軍解決処理

MainPhase#resolve_orders メソッド

いよいよ、肝心要の行軍解決処理、MainPhase#resolve_orders に着手する。

撤退フェイズの RetreatPhase#resolve_orders、調整フェイズの AdjustPhase#resolve_orders は当分後回しで。

行軍解決処理の仕様

  • フェイズに登録された命令の成否判定のみを行う
  • あり得ない命令(海軍の内陸侵入やワープなど)の整合性検証は行わない
  • ユニットの配置変更処理は行わない

このメソッドは今からそれなりに複雑になることが分かっているので、責任範囲をなるべく限定する。

現時点では地域隣接情報を作っていないので、いずれにせよ不正移動命令や遠隔地への異次元支援を検出できないのだが、ここではあくまで命令単体では正常であることを前提として処理する。

もちろん、支援や輸送の空振りは普通にあることなので考慮する。

has_many 設定

まず、Phase から Unit を経由して Order に直接アクセスできるように has_many を設定しておく。

class Unit < ActiveRecord::Base
  #(略)

  has_many :orders

  #(略)
end
class Phase < ActiveRecord::Base
  belongs_to :turn

  has_many :units
  has_many :orders, through: :units
end

これで MainPhase#resolve_orders 内から orders メソッドで関係する全ての命令を取得できる。