;(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

Final Fantasy XVI, para PS5, é adiado em seis meses por causa da pandemia

Final Fantasy XVI - Square Enix
Final Fantasy XVI Imagem: Square Enix

De START, em São Paulo

27/12/2021 10h49

Más notícias para os fãs de Final Fantasy. O mais novo jogo na cultuada franquia da Square Enix, Final Fantasy XVI, sofrerá um atraso de cerca de seis meses, por causa da pandemia de covid-19. O próximo grande anúncio referente ao game só deve acontecer no segundo trimestre de 2022.

O adiamaneto foi revelado pelo produtor de FF16, Naoki Yoshida, no Twitter, que pediu desculpas ao público.

"Quando nos falamos pela última vez, prometi que teria mais informações sobre Final Fantasy XVI em algum momento no final de 2021", explicou Yoshida.

"Porém, lamento informar que não terei como manter essa promessa devido a complicações da atual pandemia de covid-19 que levaram ao atraso do desenvolvimento do jogo em quase meio ano", continuou.

"Conforme a mais recente adição à série Final Fantasy está sendo desenvolvida para PlayStation 5, ela reuniu uma grande equipe de criadores talentosos ao redor do mundo".

"Porém, em um esforço para conter o impacto da covid-19, tivemos que descentralizar nossa força de trabalho, permitindo aos funcionários que lidassem com suas responsabilidades a partir de casa. Infelizmente, isso atrapalhou as comunicações com o escritório de Tóquio, o que, por sua vez, causou atrasos ou, em casos extremos, cancelamento de recursos que seriam entreguers por parceiros terceirizados", justificou.

Yoshida afirmou ainda que 2021 foi usado para atenuar essas dificuldades e que, portanto, espera que elas sejam bem menos significativas em 2022. E confirmou que já deverá ter algum material para mostrar ao público no período da primavera do hemisfério norte (ou seja, a partir do finzinho de março).

Final Fantasy XVI - Reprodução - Reprodução
Imagem: Reprodução

"Fico feliz de poder anunciar que o plano atual é conduzir nossa próxima grande revelação na primavera de 2022, conforme buscamos aumentar a empolgação rumo ao eventual lançamento do jogo", afirmou.

"Peço profundas desculpas a todos que estavam ansiosos para saber mais sobre Final Fantasy XVI, e obrigado pela sua paciência contínua enquanto focamos nossos esforços no desenvolvimento", concluiu.

SIGA O START NAS REDES SOCIAIS

Twitter: https://twitter.com/start_uol
Instagram: https://www.instagram.com/start_uol/
Facebook: https://www.facebook.com/startuol/
TikTok: https://www.tiktok.com/@start_uol?
Twitch: https://www.twitch.tv/startuol