;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL

Topo

Cinco jogos exclusivos da Epic Store para você ficar de olho

Divulgação
Imagem: Divulgação

Giuseppe Carrino

Do GameHall

18/04/2019 04h00

A Epic Games, produtora de "Fortnite", continua colecionando títulos exclusivos para sua loja digital de PC lançada em dezembro de 2018. Recentemente, jogos como "The Division II" e "Metro Exodus" deixaram de ser lançados no Steam e foram para a loja da Epic. Ao mesmo tempo, rumores apontam que "Red Dead Redemption 2" sairia para PC ainda este ano e somente na Epic Store, o que poderia mexer ainda mais com o mercado.

Parte dos atrativos para os desenvolvedores é que a Epic fica com uma fatia menor das vendas: 12% contra cerca de 30% praticado pelos concorrentes. Enquanto esperamos cenas dos próximos capítulos, vamos ficar de olho em alguns outros exclusivos da Epic Store que estão chegando em breve.

Super Meat Boy Forever

Super Meat Boy Forever - Reprodução - Reprodução
Imagem: Reprodução

Sequência do maravilhoso (e difícil) jogo de 2010, com lançamento previsto para o final de abril. A grande diferença na versão "Forever" é que as fases são construídas de forma dinâmica. Isso significa que sempre que você ar de fase, ela se reconstruirá em uma versão mais difícil dela própria. O nosso herói, juntamente com sua esposa, Bandage Girl, poderão atacar inimigos com socos e chutes, em vez de apenas pular.

O jogo será exclusivo da Epic Store em 2019, chegando ao Steam somente ano que vem.

Control

Control - Reprodução - Reprodução
Imagem: Reprodução

O novo game dos criadores de "Quantum Break" traz como protagonista a jovem Jesse Faden, que terá de usar seus poderes sobrenaturais, incluindo telecinesia, levitação e até mesmo possessão de corpos, para vencer os inimigos que cruzarem seu caminho.

O jogo terá e à tecnologia ray tracing por meio das placas RTX da Nvidia no PC, e terá exclusividade temporária da loja da Epic. Quem quiser jogar no Steam terá de esperar até agosto de 2020.

Borderlands 3

Borderlands 3 - Reprodução - Reprodução
Imagem: Reprodução

Uma das maiores exclusividades da Epic Store até o momento. O aguardado terceiro jogo da franquia da Gearbox gera muita expectativa, principalmente, porque o último capítulo da série já está velhinho ? chegou originalmente em 2012.

A ausência do jogo no Steam deixou muitos fãs inconformados e gerou protestos, com parte da comunidade dando notas baixas para os jogos anteriores da série na plataforma da Valve. Por outro lado, há quem prefira esperar o jogo chegar ao Steam, acreditando que ele já terá recebido muitas atualizações que tornarão a experiência melhor.

The Sinking City

The Sinking City - Reprodução - Reprodução
Imagem: Reprodução

Se ele entregar aquilo que promete, tem tudo para ser um dos destaques do ano. "The Sinking City" é inspirado nas obras do mestre de terror H.P. Lovecraft, e faz de você um investigador nos anos 1920 que precisa descobrir a verdade por trás dos eventos sobrenaturais que estão afetando uma cidade e seus habitantes.

Assim como outros exclusivos da Epic, ele também ficará longe do Steam, ao menos por um ano após seu lançamento, previsto para ocorrer em junho.

Phoenix Point

Phoenix Point - Reprodução - Reprodução
Imagem: Reprodução

Daqui alguns anos, a Terra será invadida por uma força alienígena e caberá a você liderar um exército para garantir a sobrevivência do que restou da raça humana. Um jogo de estratégia com jogabilidade baseada em turnos, com inimigos que aprendem a contra-atacar as táticas desenvolvidas pelo jogador, forçando-o a mudar de estratégia.

Chamado de "sucessor espiritual de X-Com" pelo seu designer e com lançamento marcado para setembro, "Phoenix Point" é mais um que ficará exclusivo na Epic Store no PC por um ano.