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

'The Last of Us': afinal, por que Ellie é importante? Episódio responde

"The Last of Us": Bella Ramsey e Anna Torv no segundo episódio - Liane Hentscher/HBO
'The Last of Us': Bella Ramsey e Anna Torv no segundo episódio Imagem: Liane Hentscher/HBO

De Splash, em São Paulo

23/01/2023 04h00

Hora de conhecer o mundo além das zonas de quarentena. O segundo episódio de "The Last of Us" explica a importância de Ellie (Bella Ramsey), mostra com mais detalhes como são os infectados no mundo da série e detalha por que é tão desafiador encontrar uma cura.

Quer entender o que aconteceu? Splash te conta.

aviso de spoiler - Arte UOL - Arte UOL
Alerta de Spoiler Splash
Imagem: Arte UOL

O segundo episódio da série, intitulado "Infected", começa com um flashback para o momento em que a infecção começou a surgir, em 2003. A cena se a em Jacarta, na Indonésia, e autoridades militares recrutam a professora de micologia Ibu Ratna para analisar o que aconteceu com uma mulher infectada.

Na ocasião, as pessoas ainda não sabem direito o que está acontecendo e, ao avaliar que se trata de algo ocasionado por um fungo, a professora é categórica: não há a possibilidade de fabricação de uma vacina e a única coisa capaz de conter a infecção seria uma bomba.

A cena serve tanto para contextualizar melhor o surgimento da infecção como para esclarecer algo que será abordado em seguida no capítulo: a importância de Ellie.

No primeiro episódio, Joel (Pedro Pascal) e Tess (Anna Torv) descobrem que Ellie já foi mordida, mas não se transformou. Aqui, eles ainda estão desconfiados, mas logo a garota prova que está dizendo a verdade.

É nesse momento que Tess pressiona Ellie para entender por que, exatamente, ela é tão importante. A menina revela que sua imunidade pode ser a chave para uma cura, que está sendo desenvolvida em uma base dos Vaga-Lumes para onde ela precisa ir.

Relutante, Joel não acredita muito na ideia de uma cura, principalmente depois de 20 anos. Mas ele acaba sendo convencido por Tess de que continuar na missão com Ellie é a única forma de eles conseguirem, de fato, as baterias que desejam — e que não há outra alternativa a não ser acreditar.

Dessa forma, Ellie tem sua primeira grande aventura no mundo aberto, para fora dos muros e dos portões da zona de quarentena. A garota começa a entender como os infectados se conectam e que há tipos diferentes deles, com maior ou menor periculosidade.

Enquanto o trio começa a trilhar o destino, encontramos algumas cenas e agens muito semelhantes às do jogo, como a agem pelo hotel e pelo museu. Além disso, temos um vislumbre do encantamento de Ellie com elementos que eram rotineiros da vida anterior em sociedade.

O posterior encontro deles com infectados, e o aparecimento do primeiro Estalador (um tipo de infectado que já perdeu boa parte de suas características humanas) reinstituem um senso de realidade.

A urgência se impõe sobre eles ainda mais diante do sacrifício de Tess.

A perda de sua amiga e companheira de viagens dá mais um choque de realidade em Joel, que acaba aceitando, mesmo a contragosto, que precisará seguir viagem com Ellie, seguindo as próprias recomendações de Tess de procurar abrigo com Bill e Frank — personagens que serão conhecidos no próximo episódio.

Desta forma, o segundo episódio estabelece com ainda mais clareza a importância da missão de Joel e Ellie, e deixa claro também que a dureza da realidade vai se impor sobre eles cada vez mais.

O terceiro episódio vai ao ar no próximo domingo, na HBO e na HBO Max.