public void Report(Bitmap bitmap) { var state = _previousState; // Map取得 var map = GetMap(bitmap); switch (_previousState) { case WarState.Waiting: // 戦争待機中なら、戦争が開始したかどうかチェックする if (IsCostDisplayed(bitmap) && !map.IsEmpty()) { state = WarState.Waring; WarStarted?.Invoke(this, map); } break; case WarState.Waring: // 戦争中なら、戦争が終了したかどうかチェックする // 考慮事項:FO・死んだときやMAP名上にマウスカーソル if (IsWarResultDisplayed(bitmap) && !map.IsEmpty()) { state = WarState.Waiting; WarFinished?.Invoke(this, map); } // FOして別の戦場を入りなおしたとき、状態はAtWarのままのため、 // 一度Waitingに状態変更通知を投げて、即座に戦争状態に戻す if (!map.IsEmpty() && map != _previousValidMap) { WarCanceled?.Invoke(this, map); WarStarted?.Invoke(this, map); } break; default: throw new Exception("invalid state"); } // 状態更新 _previousState = state; if (!map.IsEmpty()) { _previousValidMap = map; } }
public void Reset() { _previousValidMap = Map.Empty; _previousState = WarState.Waiting; }