{"action":"created","comment":{"url":"https://api.github.com/repos/triplea-game/triplea/pulls/comments/46082179","id":46082179,"diff_hunk":"@@ -0,0 +1,116 @@\n+package games.strategy.triplea.ai.proAI.data;\n+\n+import games.strategy.engine.data.PlayerID;\n+import games.strategy.engine.data.Territory;\n+import games.strategy.engine.data.Unit;\n+import games.strategy.triplea.ai.proAI.util.ProBattleUtils;\n+import games.strategy.triplea.ai.proAI.util.ProUtils;\n+import games.strategy.triplea.delegate.Matches;\n+import games.strategy.util.Match;\n+\n+import java.util.ArrayList;\n+import java.util.HashMap;\n+import java.util.HashSet;\n+import java.util.List;\n+import java.util.Map;\n+import java.util.Set;\n+\n+public class ProMoveOptions {\n+\n+  private final ProUtils utils;\n+  private final ProBattleUtils battleUtils;\n+  private final Map<Territory, ProTerritory> maxMoveMap;\n+  private final Map<Territory, List<ProTerritory>> moveMaps;\n+\n+  public ProMoveOptions(final ProUtils utils, final ProBattleUtils battleUtils) {\n+    this.utils = utils;\n+    this.battleUtils = battleUtils;\n+    maxMoveMap = new HashMap<Territory, ProTerritory>();\n+    moveMaps = new HashMap<Territory, List<ProTerritory>>();\n+  }\n+\n+  public ProMoveOptions(final ProUtils utils, final ProBattleUtils battleUtils,\n+      final List<Map<Territory, ProTerritory>> moveMapList, final PlayerID player, final boolean isAttacker) {\n+    this(utils, battleUtils);\n+    populateMaxMoveMap(moveMapList, player, isAttacker);\n+    populateMoveMaps(moveMapList);","path":"src/games/strategy/triplea/ai/proAI/data/ProMoveOptions.java","position":36,"original_position":36,"commit_id":"e68100d759313bea8076f41120abaa99d09c51cb","original_commit_id":"e68100d759313bea8076f41120abaa99d09c51cb","user":{"login":"ron-murhammer","id":1427689,"avatar_url":"https://avatars.githubusercontent.com/u/1427689?v=3","gravatar_id":"","url":"https://api.github.com/users/ron-murhammer","html_url":"https://github.com/ron-murhammer","followers_url":"https://api.github.com/users/ron-murhammer/followers","following_url":"https://api.github.com/users/ron-murhammer/following{/other_user}","gists_url":"https://api.github.com/users/ron-murhammer/gists{/gist_id}","starred_url":"https://api.github.com/users/ron-murhammer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ron-murhammer/subscriptions","organizations_url":"https://api.github.com/users/ron-murhammer/orgs","repos_url":"https://api.github.com/users/ron-murhammer/repos","events_url":"https://api.github.com/users/ron-murhammer/events{/privacy}","received_events_url":"https://api.github.com/users/ron-murhammer/received_events","type":"User","site_admin":false},"body":"Good point. I'll switch these around to create rather than populate for the next PR.","created_at":"2015-11-28T17:19:47Z","updated_at":"2015-11-28T17:19:47Z","html_url":"https://github.com/triplea-game/triplea/pull/283#discussion_r46082179","pull_request_url":"https://api.github.com/repos/triplea-game/triplea/pulls/283","_links":{"self":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/comments/46082179"},"html":{"href":"https://github.com/triplea-game/triplea/pull/283#discussion_r46082179"},"pull_request":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/283"}}},"pull_request":{"url":"https://api.github.com/repos/triplea-game/triplea/pulls/283","id":51755757,"html_url":"https://github.com/triplea-game/triplea/pull/283","diff_url":"https://github.com/triplea-game/triplea/pull/283.diff","patch_url":"https://github.com/triplea-game/triplea/pull/283.patch","issue_url":"https://api.github.com/repos/triplea-game/triplea/issues/283","number":283,"state":"open","locked":false,"title":"AI multi-nation attacks","user":{"login":"ron-murhammer","id":1427689,"avatar_url":"https://avatars.githubusercontent.com/u/1427689?v=3","gravatar_id":"","url":"https://api.github.com/users/ron-murhammer","html_url":"https://github.com/ron-murhammer","followers_url":"https://api.github.com/users/ron-murhammer/followers","following_url":"https://api.github.com/users/ron-murhammer/following{/other_user}","gists_url":"https://api.github.com/users/ron-murhammer/gists{/gist_id}","starred_url":"https://api.github.com/users/ron-murhammer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ron-murhammer/subscriptions","organizations_url":"https://api.github.com/users/ron-murhammer/orgs","repos_url":"https://api.github.com/users/ron-murhammer/repos","events_url":"https://api.github.com/users/ron-murhammer/events{/privacy}","received_events_url":"https://api.github.com/users/ron-murhammer/received_events","type":"User","site_admin":false},"body":"Added support for AI strafing to setup an allied nation to attack. AI uses it pretty conservatively and mostly just in really obvious situations where 2 allies have large stacks near an enemy capital but neither is strong enough alone to capture it.\r\n\r\nAlso began the refactoring by reorganizing classes/packages.\r\n\r\n<!-- Reviewable:start -->\r\n[<img src=\"https://reviewable.io/review_button.png\" height=40 alt=\"Review on Reviewable\"/>](https://reviewable.io/reviews/triplea-game/triplea/283)\r\n<!-- Reviewable:end -->\r\n","created_at":"2015-11-25T06:02:47Z","updated_at":"2015-11-28T17:19:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce64a87551bada01de321ab3b0fda283b98ecdde","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/triplea-game/triplea/pulls/283/commits","review_comments_url":"https://api.github.com/repos/triplea-game/triplea/pulls/283/comments","review_comment_url":"https://api.github.com/repos/triplea-game/triplea/pulls/comments{/number}","comments_url":"https://api.github.com/repos/triplea-game/triplea/issues/283/comments","statuses_url":"https://api.github.com/repos/triplea-game/triplea/statuses/e68100d759313bea8076f41120abaa99d09c51cb","head":{"label":"triplea-game:AI_Consider_Enemy_Turn_Order","ref":"AI_Consider_Enemy_Turn_Order","sha":"e68100d759313bea8076f41120abaa99d09c51cb","user":{"login":"triplea-game","id":13318615,"avatar_url":"https://avatars.githubusercontent.com/u/13318615?v=3","gravatar_id":"","url":"https://api.github.com/users/triplea-game","html_url":"https://github.com/triplea-game","followers_url":"https://api.github.com/users/triplea-game/followers","following_url":"https://api.github.com/users/triplea-game/following{/other_user}","gists_url":"https://api.github.com/users/triplea-game/gists{/gist_id}","starred_url":"https://api.github.com/users/triplea-game/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/triplea-game/subscriptions","organizations_url":"https://api.github.com/users/triplea-game/orgs","repos_url":"https://api.github.com/users/triplea-game/repos","events_url":"https://api.github.com/users/triplea-game/events{/privacy}","received_events_url":"https://api.github.com/users/triplea-game/received_events","type":"Organization","site_admin":false},"repo":{"id":39766308,"name":"triplea","full_name":"triplea-game/triplea","owner":{"login":"triplea-game","id":13318615,"avatar_url":"https://avatars.githubusercontent.com/u/13318615?v=3","gravatar_id":"","url":"https://api.github.com/users/triplea-game","html_url":"https://github.com/triplea-game","followers_url":"https://api.github.com/users/triplea-game/followers","following_url":"https://api.github.com/users/triplea-game/following{/other_user}","gists_url":"https://api.github.com/users/triplea-game/gists{/gist_id}","starred_url":"https://api.github.com/users/triplea-game/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/triplea-game/subscriptions","organizations_url":"https://api.github.com/users/triplea-game/orgs","repos_url":"https://api.github.com/users/triplea-game/repos","events_url":"https://api.github.com/users/triplea-game/events{/privacy}","received_events_url":"https://api.github.com/users/triplea-game/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/triplea-game/triplea","description":"TripleA is a turn based strategy game and board game engine, similar to Axis & Allies or Risk.","fork":false,"url":"https://api.github.com/repos/triplea-game/triplea","forks_url":"https://api.github.com/repos/triplea-game/triplea/forks","keys_url":"https://api.github.com/repos/triplea-game/triplea/keys{/key_id}","collaborators_url":"https://api.github.com/repos/triplea-game/triplea/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/triplea-game/triplea/teams","hooks_url":"https://api.github.com/repos/triplea-game/triplea/hooks","issue_events_url":"https://api.github.com/repos/triplea-game/triplea/issues/events{/number}","events_url":"https://api.github.com/repos/triplea-game/triplea/events","assignees_url":"https://api.github.com/repos/triplea-game/triplea/assignees{/user}","branches_url":"https://api.github.com/repos/triplea-game/triplea/branches{/branch}","tags_url":"https://api.github.com/repos/triplea-game/triplea/tags","blobs_url":"https://api.github.com/repos/triplea-game/triplea/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/triplea-game/triplea/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/triplea-game/triplea/git/refs{/sha}","trees_url":"https://api.github.com/repos/triplea-game/triplea/git/trees{/sha}","statuses_url":"https://api.github.com/repos/triplea-game/triplea/statuses/{sha}","languages_url":"https://api.github.com/repos/triplea-game/triplea/languages","stargazers_url":"https://api.github.com/repos/triplea-game/triplea/stargazers","contributors_url":"https://api.github.com/repos/triplea-game/triplea/contributors","subscribers_url":"https://api.github.com/repos/triplea-game/triplea/subscribers","subscription_url":"https://api.github.com/repos/triplea-game/triplea/subscription","commits_url":"https://api.github.com/repos/triplea-game/triplea/commits{/sha}","git_commits_url":"https://api.github.com/repos/triplea-game/triplea/git/commits{/sha}","comments_url":"https://api.github.com/repos/triplea-game/triplea/comments{/number}","issue_comment_url":"https://api.github.com/repos/triplea-game/triplea/issues/comments{/number}","contents_url":"https://api.github.com/repos/triplea-game/triplea/contents/{+path}","compare_url":"https://api.github.com/repos/triplea-game/triplea/compare/{base}...{head}","merges_url":"https://api.github.com/repos/triplea-game/triplea/merges","archive_url":"https://api.github.com/repos/triplea-game/triplea/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/triplea-game/triplea/downloads","issues_url":"https://api.github.com/repos/triplea-game/triplea/issues{/number}","pulls_url":"https://api.github.com/repos/triplea-game/triplea/pulls{/number}","milestones_url":"https://api.github.com/repos/triplea-game/triplea/milestones{/number}","notifications_url":"https://api.github.com/repos/triplea-game/triplea/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/triplea-game/triplea/labels{/name}","releases_url":"https://api.github.com/repos/triplea-game/triplea/releases{/id}","created_at":"2015-07-27T09:32:58Z","updated_at":"2015-11-13T17:59:56Z","pushed_at":"2015-11-28T06:43:20Z","git_url":"git://github.com/triplea-game/triplea.git","ssh_url":"git@github.com:triplea-game/triplea.git","clone_url":"https://github.com/triplea-game/triplea.git","svn_url":"https://github.com/triplea-game/triplea","homepage":null,"size":686338,"stargazers_count":10,"watchers_count":10,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":31,"forks":4,"open_issues":31,"watchers":10,"default_branch":"master"}},"base":{"label":"triplea-game:master","ref":"master","sha":"bd8cc09fae5cb8041c490babce955732682937bf","user":{"login":"triplea-game","id":13318615,"avatar_url":"https://avatars.githubusercontent.com/u/13318615?v=3","gravatar_id":"","url":"https://api.github.com/users/triplea-game","html_url":"https://github.com/triplea-game","followers_url":"https://api.github.com/users/triplea-game/followers","following_url":"https://api.github.com/users/triplea-game/following{/other_user}","gists_url":"https://api.github.com/users/triplea-game/gists{/gist_id}","starred_url":"https://api.github.com/users/triplea-game/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/triplea-game/subscriptions","organizations_url":"https://api.github.com/users/triplea-game/orgs","repos_url":"https://api.github.com/users/triplea-game/repos","events_url":"https://api.github.com/users/triplea-game/events{/privacy}","received_events_url":"https://api.github.com/users/triplea-game/received_events","type":"Organization","site_admin":false},"repo":{"id":39766308,"name":"triplea","full_name":"triplea-game/triplea","owner":{"login":"triplea-game","id":13318615,"avatar_url":"https://avatars.githubusercontent.com/u/13318615?v=3","gravatar_id":"","url":"https://api.github.com/users/triplea-game","html_url":"https://github.com/triplea-game","followers_url":"https://api.github.com/users/triplea-game/followers","following_url":"https://api.github.com/users/triplea-game/following{/other_user}","gists_url":"https://api.github.com/users/triplea-game/gists{/gist_id}","starred_url":"https://api.github.com/users/triplea-game/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/triplea-game/subscriptions","organizations_url":"https://api.github.com/users/triplea-game/orgs","repos_url":"https://api.github.com/users/triplea-game/repos","events_url":"https://api.github.com/users/triplea-game/events{/privacy}","received_events_url":"https://api.github.com/users/triplea-game/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/triplea-game/triplea","description":"TripleA is a turn based strategy game and board game engine, similar to Axis & Allies or Risk.","fork":false,"url":"https://api.github.com/repos/triplea-game/triplea","forks_url":"https://api.github.com/repos/triplea-game/triplea/forks","keys_url":"https://api.github.com/repos/triplea-game/triplea/keys{/key_id}","collaborators_url":"https://api.github.com/repos/triplea-game/triplea/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/triplea-game/triplea/teams","hooks_url":"https://api.github.com/repos/triplea-game/triplea/hooks","issue_events_url":"https://api.github.com/repos/triplea-game/triplea/issues/events{/number}","events_url":"https://api.github.com/repos/triplea-game/triplea/events","assignees_url":"https://api.github.com/repos/triplea-game/triplea/assignees{/user}","branches_url":"https://api.github.com/repos/triplea-game/triplea/branches{/branch}","tags_url":"https://api.github.com/repos/triplea-game/triplea/tags","blobs_url":"https://api.github.com/repos/triplea-game/triplea/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/triplea-game/triplea/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/triplea-game/triplea/git/refs{/sha}","trees_url":"https://api.github.com/repos/triplea-game/triplea/git/trees{/sha}","statuses_url":"https://api.github.com/repos/triplea-game/triplea/statuses/{sha}","languages_url":"https://api.github.com/repos/triplea-game/triplea/languages","stargazers_url":"https://api.github.com/repos/triplea-game/triplea/stargazers","contributors_url":"https://api.github.com/repos/triplea-game/triplea/contributors","subscribers_url":"https://api.github.com/repos/triplea-game/triplea/subscribers","subscription_url":"https://api.github.com/repos/triplea-game/triplea/subscription","commits_url":"https://api.github.com/repos/triplea-game/triplea/commits{/sha}","git_commits_url":"https://api.github.com/repos/triplea-game/triplea/git/commits{/sha}","comments_url":"https://api.github.com/repos/triplea-game/triplea/comments{/number}","issue_comment_url":"https://api.github.com/repos/triplea-game/triplea/issues/comments{/number}","contents_url":"https://api.github.com/repos/triplea-game/triplea/contents/{+path}","compare_url":"https://api.github.com/repos/triplea-game/triplea/compare/{base}...{head}","merges_url":"https://api.github.com/repos/triplea-game/triplea/merges","archive_url":"https://api.github.com/repos/triplea-game/triplea/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/triplea-game/triplea/downloads","issues_url":"https://api.github.com/repos/triplea-game/triplea/issues{/number}","pulls_url":"https://api.github.com/repos/triplea-game/triplea/pulls{/number}","milestones_url":"https://api.github.com/repos/triplea-game/triplea/milestones{/number}","notifications_url":"https://api.github.com/repos/triplea-game/triplea/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/triplea-game/triplea/labels{/name}","releases_url":"https://api.github.com/repos/triplea-game/triplea/releases{/id}","created_at":"2015-07-27T09:32:58Z","updated_at":"2015-11-13T17:59:56Z","pushed_at":"2015-11-28T06:43:20Z","git_url":"git://github.com/triplea-game/triplea.git","ssh_url":"git@github.com:triplea-game/triplea.git","clone_url":"https://github.com/triplea-game/triplea.git","svn_url":"https://github.com/triplea-game/triplea","homepage":null,"size":686338,"stargazers_count":10,"watchers_count":10,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":31,"forks":4,"open_issues":31,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/283"},"html":{"href":"https://github.com/triplea-game/triplea/pull/283"},"issue":{"href":"https://api.github.com/repos/triplea-game/triplea/issues/283"},"comments":{"href":"https://api.github.com/repos/triplea-game/triplea/issues/283/comments"},"review_comments":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/283/comments"},"review_comment":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/triplea-game/triplea/pulls/283/commits"},"statuses":{"href":"https://api.github.com/repos/triplea-game/triplea/statuses/e68100d759313bea8076f41120abaa99d09c51cb"}}}}