// 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); };});

The first downloadable content pack for Call of Duty: Infinite Warfare, Sabotage, is available now on Xbox One and PC*.

DLC1: Sabotage out now. It includes the next terrifying Zombies installment: Rave in the Redwoods plus four unique multiplayer environments including ‘Dominion,’ a re-imagining of the Call of Duty®: Modern Warfare® 2 classic, ‘Afghan.’

Sabotage features four new multiplayer maps, including a remake of Call of Duty: Modern Warfare 2’s Afghan, and the next episode of the Zombies in Spaceland story, Rave in the Redwoods.

Multiplayer Maps:

  • Noir: A dark, grimy city map inspired by futuristic Brooklyn at night, Noir is a classic three-lane map set against a backdrop of a dystopian future, filled with cafes and parks surrounding a brutal downtown warzone.
  • Renaissance: Set in Northern Italy, Renaissance pits players against each other on the narrow streets of Venice surrounded by classic architecture and buildings that promote continuous action through the canals and neighborhoods of this iconic city.
  • Neon: A virtual training center designed for urban warfare, Neon is a unique, digitized battle arena where cars and other structures spawn out of thin air and enemies dissolve into hundreds of pixels when defeated. Middle lane sightlines will cater to long-range players while the outsides of the map allow for quick counter-attacks in close-quarter action.
  • Dominion: A re-imagining of the classic Afghan map from Modern Warfare 2, now set on Mars, Dominion retains all the memorable landmarks and gameplay of the original, anchored by the crashed ship in the center, with a few enhancements designed to take advantage of the new movement system.

Zombies:

  • Rave in the Redwoods: the next thrilling chapter of the Call of Duty: Infinite Warfare zombies experience, continues the macabre narrative while transporting players into a new decade: the 1990s. Willard Wyler, the enigmatic movie director villain, returns and has trapped the protagonists inside another one of his twisted horror films. The four playable characters from the original story also return, but with fresh, over-the-top roles, as they learn more about Wyler’s evil plot while fighting all-new varieties of the undead in an abandoned, lakeside summer camp where zombie ravers have taken over and turned the grounds into a techno-fueled illusion. Rave in the Redwoods is a tense, spooky thrill ride with shocking twists, surprises, and a slew of new Easter eggs for players to discover.


Call of Duty: Infinite Warfare Sabotage DLC Pack 1 is available now on PlayStation 4, Xbox One, and PC*.

Sabotage DLC can be purchased separately for $14.99 or is included with the Call of Duty: Infinite Warfare Season Pass.

*PC only: DLC Packs can not be bought separately. Only available with Season Pass. 

comments below