// initialize jwplayer var playerInstance = jwplayer('player'); // player dom elements var playerContainerEl = document.querySelector('.player-container'); // returns video player position from top of document function getElementOffsetTop(el) { var boundingClientRect = el.getBoundingClientRect(); var bodyEl = document.body; var docEl = document.documentElement; var scrollTop = window.pageYOffset || docEl.scrollTop || bodyEl.scrollTop; var clientTop = docEl.clientTop || bodyEl.clientTop || 0; return Math.round(boundingClientRect.top + scrollTop - clientTop); } // returns the current y scroll position function getScrollTop() { var docEl = document.documentElement; return (window.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); } // configure jwplayer instance playerInstance.setup({ autostart: true, playlist: 'https://cdn.jwplayer.com/v2/playlists/mYdavspX', primary: 'html5', setFullscreen: true, width: '100%' }); // when jwplayer instance is ready playerInstance.on('ready', function() { var config = playerInstance.getConfig(); var utils = playerInstance.utils; // get height of player element var playerHeight = config.containerHeight; // flag determining whether close has been clicked var closed = true; // CHANGED // flag determing whether player is playing var playing = false; // ADDED // eventhandler for when close button is being pressed document.getElementsByClassName('icon-close')[0].addEventListener('click', () => { closed = true; onScrollViewHandler(); }); playerInstance.on('play', function() { closed = false; playing = true; // ADDED }).on('pause', function () { playing = false; // ADDED }).on('adPlay', function() { closed = false; // ADDED playing = true; // ADDED }).on('adPause', function() { playing = false; // ADDED }); // get player element position from top of document var playerOffsetTop = getElementOffsetTop(playerContainerEl); // set player container to match height of actual video element playerContainerEl.style.height = playerHeight + 'px'; // below we handle window scroll event without killing performance function onScrollViewHandler() { var minimized = getScrollTop() >= playerOffsetTop; if (closed && minimized) { minimized = false; jwplayer().pause(); playing = false; // ADDED } else if (!minimized && !playing) { closed = true; // ADDED } utils.toggleClass(playerContainerEl, 'player-minimize', minimized); // update the player's size so the controls are adjusted playerInstance.resize(); } // namespace for whether or not we are waiting for setTimeout() to finish var isScrollTimeout = false; // window onscroll event handler window.onscroll = function() { // skip if we're waiting on a scroll update timeout to finish if (isScrollTimeout) return; // flag that a new timeout will begin isScrollTimeout = true; // otherwise, call scroll event view handler onScrollViewHandler(); // set new timeout setTimeout(function() { // reset timeout flag to false (no longer waiting) isScrollTimeout = false; }, 80); }; });

One fo the biggest new features in Call of Duty: Modern Warfare is the Gunsmith, and from what we’ve had hands on time with, it’s a huge feature for Call of Duty going forward. 

The team at Infinity Ward has been working hard to ensure that players can build out their weapons and how their weapons operate in the Gunsmith within Call of Duty: Modern Warfare. 

Weapons in Call of Duty: Modern Warfare can have anywhere between 30 to 60 attachments. The lower end of that spectrum, 30, is for pistols and weapons that have limited options for what can be added onto them. The higher number of that spectrum, 60, is for weapons in the Assault Rifle, SMGs, and LMG classes. Each weapon has its unique set of attachments (of course some weapon attachments do overlap). 

The Gunsmith allows for customization of weapons beyond what many Call of Duty fans could have ever imagined. Players can pick the muzzle, the optics, the rear grip, the stock, the under grip, the barrel, and more in the Gunsmith for each weapons. Players can select up to 5 attachments per weapon. If you hit 5 attachments and try to add more, the selection screen asks you to replace a current attachment with the new selection. 

Gunsmith was truly built for players who are all about customizing and decking out their weapons for how they want it to feel, look, and operate in Call of Duty: Modern Warfare. This level of intense customization has not existed for weapons itself in Call of Duty, and Infinity Ward is dong a lot to ensure that players can have a good time creating the weapons selection that they build but also make their weapons useable in Call of Duty: Modern Warfare MP. 

The studio also confirmed that there will be paint jobs available for Guns, but that was not available in our build that we played. 

Gunsmith lets players edit and customize every single weapon in Call of Duty: Modern Warfare, from the secondary weapons to primary weapons. This unlock a new level of customization and upgrades that Call of Duty has frankly never seen before, and in many ways, it’s what Call of Duty needs. 

comments below