{"action":"opened","number":4125,"pull_request":{"url":"https://api.github.com/repos/acemod/ACE3/pulls/4125","id":77709642,"html_url":"https://github.com/acemod/ACE3/pull/4125","diff_url":"https://github.com/acemod/ACE3/pull/4125.diff","patch_url":"https://github.com/acemod/ACE3/pull/4125.patch","issue_url":"https://api.github.com/repos/acemod/ACE3/issues/4125","number":4125,"state":"open","locked":false,"title":"Per-Ammo fired events","user":{"login":"esteldunedain","id":7674951,"avatar_url":"https://avatars.githubusercontent.com/u/7674951?v=3","gravatar_id":"","url":"https://api.github.com/users/esteldunedain","html_url":"https://github.com/esteldunedain","followers_url":"https://api.github.com/users/esteldunedain/followers","following_url":"https://api.github.com/users/esteldunedain/following{/other_user}","gists_url":"https://api.github.com/users/esteldunedain/gists{/gist_id}","starred_url":"https://api.github.com/users/esteldunedain/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/esteldunedain/subscriptions","organizations_url":"https://api.github.com/users/esteldunedain/orgs","repos_url":"https://api.github.com/users/esteldunedain/repos","events_url":"https://api.github.com/users/esteldunedain/events{/privacy}","received_events_url":"https://api.github.com/users/esteldunedain/received_events","type":"User","site_admin":false},"body":"**When merged this pull request will:**\r\n- Add framework to support per-ammo fired events, inspired on ACE 2 registerSimulation.\r\n- Leverage this framework in a lot of modules (WIP)\r\n\r\n## Rationale\r\nIn various cases we need to run special code when certain types of projectiles are fired, like the huntir, different types of grenades, missiles, heavy caliber bullets, cannon shells, explosives, etc. The way we are currently doing that is by stacking handlers to the fired EH and checking if every single projectile fired matches each criteria. The pattern is O(N) with the number of custom scripts. \r\n\r\nThis is currently not that bad because we don't have a huge N and the unified fired event handler is filters out AI from most of the checks. We've also being clever enough to attach each FEH to the minimum amount of classess we need, etc. But still, this pattern clearly doesn't scale very well if we want to keep adding a bunch of custom stuff.\r\n\r\nACE 2 had a framework for this called `ACE_Simulation`. That was a config entry on each ammo type which indicated which code should be called when the bullet was fired. ACE 2 had a much larger number of processes, so that made sense.  But it had the problem of only allowing a single process to be simulated per ammo type.\r\n\r\nThis PR proposes a similar framework for ACE3, but with the added flexibility of allowing any number of simulations to be carried out for each ammo. Also the criteria to determine is a process should be called is now defined via a script (instead of a fixed config entry), allowing for greater flexibility. Obviously the code is only run on mission start and then the events that should be called for each ammo are cached for later usage from the UFEH. This potentially comes at the expense of slightly increased memory usage and mission start times.\r\n\r\nAs I said, I think we don't really need this ATM. However it should provide some gain already (untested yet) and can serve as a preparation for the future.","created_at":"2016-07-16T13:33:38Z","updated_at":"2016-07-16T13:33:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/acemod/ACE3/pulls/4125/commits","review_comments_url":"https://api.github.com/repos/acemod/ACE3/pulls/4125/comments","review_comment_url":"https://api.github.com/repos/acemod/ACE3/pulls/comments{/number}","comments_url":"https://api.github.com/repos/acemod/ACE3/issues/4125/comments","statuses_url":"https://api.github.com/repos/acemod/ACE3/statuses/a4d1b6e54f3a5173da6dc410b05554b190f8dab2","head":{"label":"acemod:ammoFiredEvents","ref":"ammoFiredEvents","sha":"a4d1b6e54f3a5173da6dc410b05554b190f8dab2","user":{"login":"acemod","id":11369030,"avatar_url":"https://avatars.githubusercontent.com/u/11369030?v=3","gravatar_id":"","url":"https://api.github.com/users/acemod","html_url":"https://github.com/acemod","followers_url":"https://api.github.com/users/acemod/followers","following_url":"https://api.github.com/users/acemod/following{/other_user}","gists_url":"https://api.github.com/users/acemod/gists{/gist_id}","starred_url":"https://api.github.com/users/acemod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acemod/subscriptions","organizations_url":"https://api.github.com/users/acemod/orgs","repos_url":"https://api.github.com/users/acemod/repos","events_url":"https://api.github.com/users/acemod/events{/privacy}","received_events_url":"https://api.github.com/users/acemod/received_events","type":"Organization","site_admin":false},"repo":{"id":29069174,"name":"ACE3","full_name":"acemod/ACE3","owner":{"login":"acemod","id":11369030,"avatar_url":"https://avatars.githubusercontent.com/u/11369030?v=3","gravatar_id":"","url":"https://api.github.com/users/acemod","html_url":"https://github.com/acemod","followers_url":"https://api.github.com/users/acemod/followers","following_url":"https://api.github.com/users/acemod/following{/other_user}","gists_url":"https://api.github.com/users/acemod/gists{/gist_id}","starred_url":"https://api.github.com/users/acemod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acemod/subscriptions","organizations_url":"https://api.github.com/users/acemod/orgs","repos_url":"https://api.github.com/users/acemod/repos","events_url":"https://api.github.com/users/acemod/events{/privacy}","received_events_url":"https://api.github.com/users/acemod/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/acemod/ACE3","description":"Open-source realism mod for Arma 3","fork":false,"url":"https://api.github.com/repos/acemod/ACE3","forks_url":"https://api.github.com/repos/acemod/ACE3/forks","keys_url":"https://api.github.com/repos/acemod/ACE3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/acemod/ACE3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/acemod/ACE3/teams","hooks_url":"https://api.github.com/repos/acemod/ACE3/hooks","issue_events_url":"https://api.github.com/repos/acemod/ACE3/issues/events{/number}","events_url":"https://api.github.com/repos/acemod/ACE3/events","assignees_url":"https://api.github.com/repos/acemod/ACE3/assignees{/user}","branches_url":"https://api.github.com/repos/acemod/ACE3/branches{/branch}","tags_url":"https://api.github.com/repos/acemod/ACE3/tags","blobs_url":"https://api.github.com/repos/acemod/ACE3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/acemod/ACE3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/acemod/ACE3/git/refs{/sha}","trees_url":"https://api.github.com/repos/acemod/ACE3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/acemod/ACE3/statuses/{sha}","languages_url":"https://api.github.com/repos/acemod/ACE3/languages","stargazers_url":"https://api.github.com/repos/acemod/ACE3/stargazers","contributors_url":"https://api.github.com/repos/acemod/ACE3/contributors","subscribers_url":"https://api.github.com/repos/acemod/ACE3/subscribers","subscription_url":"https://api.github.com/repos/acemod/ACE3/subscription","commits_url":"https://api.github.com/repos/acemod/ACE3/commits{/sha}","git_commits_url":"https://api.github.com/repos/acemod/ACE3/git/commits{/sha}","comments_url":"https://api.github.com/repos/acemod/ACE3/comments{/number}","issue_comment_url":"https://api.github.com/repos/acemod/ACE3/issues/comments{/number}","contents_url":"https://api.github.com/repos/acemod/ACE3/contents/{+path}","compare_url":"https://api.github.com/repos/acemod/ACE3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/acemod/ACE3/merges","archive_url":"https://api.github.com/repos/acemod/ACE3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/acemod/ACE3/downloads","issues_url":"https://api.github.com/repos/acemod/ACE3/issues{/number}","pulls_url":"https://api.github.com/repos/acemod/ACE3/pulls{/number}","milestones_url":"https://api.github.com/repos/acemod/ACE3/milestones{/number}","notifications_url":"https://api.github.com/repos/acemod/ACE3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/acemod/ACE3/labels{/name}","releases_url":"https://api.github.com/repos/acemod/ACE3/releases{/id}","deployments_url":"https://api.github.com/repos/acemod/ACE3/deployments","created_at":"2015-01-10T19:59:12Z","updated_at":"2016-07-16T12:54:02Z","pushed_at":"2016-07-16T13:33:38Z","git_url":"git://github.com/acemod/ACE3.git","ssh_url":"git@github.com:acemod/ACE3.git","clone_url":"https://github.com/acemod/ACE3.git","svn_url":"https://github.com/acemod/ACE3","homepage":"http://ace3mod.com/","size":486000,"stargazers_count":415,"watchers_count":415,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":336,"mirror_url":null,"open_issues_count":199,"forks":336,"open_issues":199,"watchers":415,"default_branch":"master"}},"base":{"label":"acemod:master","ref":"master","sha":"fed71b00e8910bed29343c622fb8a4ee6bc2ec80","user":{"login":"acemod","id":11369030,"avatar_url":"https://avatars.githubusercontent.com/u/11369030?v=3","gravatar_id":"","url":"https://api.github.com/users/acemod","html_url":"https://github.com/acemod","followers_url":"https://api.github.com/users/acemod/followers","following_url":"https://api.github.com/users/acemod/following{/other_user}","gists_url":"https://api.github.com/users/acemod/gists{/gist_id}","starred_url":"https://api.github.com/users/acemod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acemod/subscriptions","organizations_url":"https://api.github.com/users/acemod/orgs","repos_url":"https://api.github.com/users/acemod/repos","events_url":"https://api.github.com/users/acemod/events{/privacy}","received_events_url":"https://api.github.com/users/acemod/received_events","type":"Organization","site_admin":false},"repo":{"id":29069174,"name":"ACE3","full_name":"acemod/ACE3","owner":{"login":"acemod","id":11369030,"avatar_url":"https://avatars.githubusercontent.com/u/11369030?v=3","gravatar_id":"","url":"https://api.github.com/users/acemod","html_url":"https://github.com/acemod","followers_url":"https://api.github.com/users/acemod/followers","following_url":"https://api.github.com/users/acemod/following{/other_user}","gists_url":"https://api.github.com/users/acemod/gists{/gist_id}","starred_url":"https://api.github.com/users/acemod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acemod/subscriptions","organizations_url":"https://api.github.com/users/acemod/orgs","repos_url":"https://api.github.com/users/acemod/repos","events_url":"https://api.github.com/users/acemod/events{/privacy}","received_events_url":"https://api.github.com/users/acemod/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/acemod/ACE3","description":"Open-source realism mod for Arma 3","fork":false,"url":"https://api.github.com/repos/acemod/ACE3","forks_url":"https://api.github.com/repos/acemod/ACE3/forks","keys_url":"https://api.github.com/repos/acemod/ACE3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/acemod/ACE3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/acemod/ACE3/teams","hooks_url":"https://api.github.com/repos/acemod/ACE3/hooks","issue_events_url":"https://api.github.com/repos/acemod/ACE3/issues/events{/number}","events_url":"https://api.github.com/repos/acemod/ACE3/events","assignees_url":"https://api.github.com/repos/acemod/ACE3/assignees{/user}","branches_url":"https://api.github.com/repos/acemod/ACE3/branches{/branch}","tags_url":"https://api.github.com/repos/acemod/ACE3/tags","blobs_url":"https://api.github.com/repos/acemod/ACE3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/acemod/ACE3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/acemod/ACE3/git/refs{/sha}","trees_url":"https://api.github.com/repos/acemod/ACE3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/acemod/ACE3/statuses/{sha}","languages_url":"https://api.github.com/repos/acemod/ACE3/languages","stargazers_url":"https://api.github.com/repos/acemod/ACE3/stargazers","contributors_url":"https://api.github.com/repos/acemod/ACE3/contributors","subscribers_url":"https://api.github.com/repos/acemod/ACE3/subscribers","subscription_url":"https://api.github.com/repos/acemod/ACE3/subscription","commits_url":"https://api.github.com/repos/acemod/ACE3/commits{/sha}","git_commits_url":"https://api.github.com/repos/acemod/ACE3/git/commits{/sha}","comments_url":"https://api.github.com/repos/acemod/ACE3/comments{/number}","issue_comment_url":"https://api.github.com/repos/acemod/ACE3/issues/comments{/number}","contents_url":"https://api.github.com/repos/acemod/ACE3/contents/{+path}","compare_url":"https://api.github.com/repos/acemod/ACE3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/acemod/ACE3/merges","archive_url":"https://api.github.com/repos/acemod/ACE3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/acemod/ACE3/downloads","issues_url":"https://api.github.com/repos/acemod/ACE3/issues{/number}","pulls_url":"https://api.github.com/repos/acemod/ACE3/pulls{/number}","milestones_url":"https://api.github.com/repos/acemod/ACE3/milestones{/number}","notifications_url":"https://api.github.com/repos/acemod/ACE3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/acemod/ACE3/labels{/name}","releases_url":"https://api.github.com/repos/acemod/ACE3/releases{/id}","deployments_url":"https://api.github.com/repos/acemod/ACE3/deployments","created_at":"2015-01-10T19:59:12Z","updated_at":"2016-07-16T12:54:02Z","pushed_at":"2016-07-16T13:33:38Z","git_url":"git://github.com/acemod/ACE3.git","ssh_url":"git@github.com:acemod/ACE3.git","clone_url":"https://github.com/acemod/ACE3.git","svn_url":"https://github.com/acemod/ACE3","homepage":"http://ace3mod.com/","size":486000,"stargazers_count":415,"watchers_count":415,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":336,"mirror_url":null,"open_issues_count":199,"forks":336,"open_issues":199,"watchers":415,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/acemod/ACE3/pulls/4125"},"html":{"href":"https://github.com/acemod/ACE3/pull/4125"},"issue":{"href":"https://api.github.com/repos/acemod/ACE3/issues/4125"},"comments":{"href":"https://api.github.com/repos/acemod/ACE3/issues/4125/comments"},"review_comments":{"href":"https://api.github.com/repos/acemod/ACE3/pulls/4125/comments"},"review_comment":{"href":"https://api.github.com/repos/acemod/ACE3/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/acemod/ACE3/pulls/4125/commits"},"statuses":{"href":"https://api.github.com/repos/acemod/ACE3/statuses/a4d1b6e54f3a5173da6dc410b05554b190f8dab2"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":4,"additions":158,"deletions":66,"changed_files":10}}
{"actor":{"display_login":"esteldunedain"}}