17.5 C
Brasília
quinta-feira, junho 26, 2025

Aventuras no Map Zooming, Parte 3: Implementação


Hora de levar isso a sério! Última vez Contei sobre a atualização do meu motor e os novos “quads”, agora é colocá-los em uso.

Se você se lembra, na minha demonstração inicial de zoom do mapa Cogmind ao adicionar suporte Quad ao REX, tudo o que fiz foi mudar uma coisa no jogo: o tamanho da fonte do mapa.

O jogo não se importa com o lado do motor das coisas, então ele simplesmente funcionou, ou pelo menos não travou e pudemos ver facilmente como ele apareceria, apesar, é claro, de vários problemas de entrada e exibição secundária em algumas outras janelas. Apenas ajustando mais algumas variáveis, seria fácil resolver todos esses problemas para ter uma visualização de mapa consistentemente maior. As coisas ficam bastante mais complexo se quisermos oferecer suporte tanto à fonte common do mapa quanto aos quads, sem mencionar a capacidade de trocá-los dinamicamente enquanto o jogo está em execução.

Mas com os fundamentos do motor sólidos e comprovados, estamos prontos para enfrentar esses desafios.

Normalmente, com a implementação de recursos de IU, começo escrevendo uma lista abrangente de tudo o que precisa ser feito e quaisquer outros elementos que eu possa pensar que podem ser afetados e, portanto, precisam de teste e confirmação. Embora eu tenha elaborado pelo menos parte dessa lista como um bom desenvolvedor, este é um daqueles casos mais raros em que tentar escrever uma lista completa com antecedência provavelmente não é tão viável ou útil, pois é basicamente… a interface inteira 😛

Com uma mudança como essa, eu precisaria testar praticamente tudo, então, em vez de tentar ser completo, apenas anotei áreas do código que precisavam ser ajustadas conforme pensava nelas enquanto trabalhava na correção de recursos de alta prioridade, tentando o meu melhor para finalizar grupos inteiros de elementos de interface relacionados para acelerar o processo.

Comecei no lugar mais importante, restaurando a funcionalidade básica necessária para acelerar o resto da implementação, como consertar o panorama do mapa e as interações cursor-mapa. E alternância de zoom em tempo actual para comparar e confirmar facilmente que tudo funciona corretamente em ambos os estados.

E foi brand depois de colocar essas peças em operação que descobri que ainda não tinha terminado com o motor xD

Ao examinar os detalhes do que ainda precisava ser feito na área do mapa, percebi que, ao ampliar o zoom, provavelmente também desejaríamos aumentar o tamanho da fonte de muitos tipos de texto que aparecem no mapa, especialmente rótulos de objetos que já estão bem integrados aos sistemas de coordenadas e orientação do mapa.

cogmind_map_zoom_wip_map rótulos_pequenos

Sim, esses rótulos não ficam ótimos assim, usando o tamanho de texto regular (ignore o fato de que eles nem estão apontando para os objetos certos aqui :P).

Para manter a proporcionalidade do texto relacionado ao mapa quando ampliado, precisaríamos de… texto ampliado. Ah, não.

Voltar para REX

Da última vez, apresentei o tamanho de célula base do mecanismo que se encaixa em caracteres de texto individuais, glifos largos para tiles de mapa quadrados e o novo “quad”, ou quatro tiles de mapa para habilitar um efeito de zoom. Para ampliar o texto, precisaríamos de outro tipo de tamanho de glifo, um que, como a duplicação de tiles de mapa para quads (2×1 para 4×2), em vez disso, dobra o tamanho do texto/célula base (1×1 para 2×2!).

Para mim, um dos primeiros aborrecimentos foi como chamar esse novo tipo, e decidi que eles provavelmente seriam melhor nomeados de acordo com o número de células base que ocupam, o que significa que tive que entrar e renomear retroativamente todas as coisas quad para outubro Agora nossos glifos de texto ampliados podem assumir o nome “quad”.

rex_terminal_grid_demo_quad_e_oct

Um novo membro se junta à família de tipos de glifos REX!

Como eu havia criado um sistema generalizado para simplificar o manuseio de glifos largos e octs (anteriormente quadrantes), inserir esse novo tipo foi realmente muito fácil (ufa!).

rex_testing_console_quads_e_octs

O REX novamente exibindo a operação dos octs recentemente renomeados e dos novos quads (a principal nova área de interesse é a grande caixa de cor oliva).

Bem, a implementação inicial foi rápida, mas ao retornar ao Cogmind para aplicá-la aos rótulos de mapas, encontrei um problema…

cogmind_map_zoom_wip_rótulo_texto_cisalhamento_bug

Os quads de texto funcionaram bem na maioria dos lugares, mas às vezes isso acontecia. Talvez digamos que este Recalibrator está corrompido e deixemos assim? 😛

Demorou um pouco para descobrir isso, já que eu não conseguia dizer se period um problema do Cogmind ou do REX. Isso foi particularmente difícil de rastrear porque parecia um bug do motor, mas também tinha uma propriedade que sugeria que não poderia ser um bug do motor, mas seu outro comportamento apontava para a impossibilidade de ser um bug causado pelo próprio jogo… De qualquer forma, uma confluência realmente estranha de situações conseguiu esconder o verdadeiro motivo por uma boa hora. Tinha a ver com um tipo específico de transparência parcial dos novos quads/octs e, claro, period causado por apenas uma linha de código no motor.

Aplicações de texto Zoom

Oba, agora também podemos ter texto grande no mapa!

cogmind_map_zoom_wip_map rótulos_grandes

Revisitando a cena anterior, dessa vez com rótulos maiores.

Além dos rótulos, também habilitei os indicadores do modo no mapa para fazer uso do texto quad. Para facilitar isso (e por necessidade por razões arquitetônicas), também refatorei essa parte da IU–eles costumavam ser desenhados diretamente no mapa no closing do processo de renderização, mas agora são uma janela actual.

cogmind_map_zoom_item_texto_grande_rótulo_categoria_modo_indicador

Percorrer as categorias de rótulos de itens, com o indicador de modo visível na parte superior da visualização do mapa.

Alertas pop-up no mapa, como pouca matéria/núcleo/and so on., também receberam o tratamento de texto ampliado, principalmente porque, de outra forma, eles pareceriam bem pequenos em comparação a todo o resto e teriam ainda mais probabilidade de passar despercebidos.

Os anúncios de “ALERTA” também são maiores agora, quase grandes demais quando incluem strings mais longas, mas, novamente, mantê-los no tamanho regular de texto não parece preferrred para serem notados entre as células maiores do mapa. Posso ajustá-los mais tarde, quando a IU passar por mais mudanças no futuro, mas, por enquanto, eles são grandes.

Também decidi converter a animação de desligamento do programa para o texto ampliado e, diferentemente de outros usos descritos acima, esta é a única instância em que ela é usada independentemente do estado de zoom do mapa.

cogmind_close_animação_novo_tamanho_da_faixa_2

Animação de desligamento do programa Cogmind com barra central maior.

O MegaTODO

A UI é muito mais do que apenas um punhado de pop-ups temporários! Voltando àquela crescente lista de desafios… bem, tecnicamente a maioria não é especialmente desafiadora, foi apenas um caso de dedicar todas as horas necessárias para vasculhar a fonte em busca de qualquer coisa afetada pelo advento de novos tipos de glifos.

Havia muitos e muitos (e muitos) problemas de alinhamento devido a anos de suposições de coordenadas relativas por trás do fato de que os espaços de mapa eram sempre duas vezes mais largos que o texto, e tanto o texto quanto os espaços de mapa tinham a mesma altura. Agora, as células do mapa podiam ser quatro vezes mais largas que o texto e duas vezes mais altas!

A maioria das janelas pop-up relativas a algo no mapa precisavam que suas coordenadas dinâmicas levassem em consideração cálculos adicionais.

cogmind_cursor_hover_detecção_de_depuração_visualização

A antiga visualização de depuração do REX para examinar a profundidade z da interface do usuário e o foco do cursor foi muito útil para resolver alguns dos problemas mais misteriosos.

cogmind_debugging_console_index_estrutura_saída

Eu também finalmente construí um exportador para a estrutura de índice de janela do Cogmind para ajudar a rastrear alguns problemas relacionados à entrada do cursor. Na verdade, ele também me ajudou a encontrar e resolver um bug não relatado e difícil de notar na UI do Cogmind que estava lá desde a primeira versão!

Uma parte do trabalho de adaptação exigiu, na verdade, reescritas arquitetônicas maiores, como o projeto de dividir a interface do mapa em um trio de courses.

A primeira nova classe period puramente para manter dados de interface que devem ser preservados durante eventos de zoom. Sempre que um zoom ocorre, toda a interface do mapa é realmente destruída e recriada do zero (muito mais simples do que tentar converter tudo), mas fazer isso também perderia algumas informações importantes necessárias para facilitar vários recursos de QoL, como histórico de segmentação e registros de alarme de recursos. Então, dados dessa natureza foram movidos para uma classe externa para preservá-los independentemente de qualquer zoom.

A segunda classe é mais interessante, uma espécie de contêiner para outras janelas, aquelas que ficam posicionadas sobre o próprio mapa.

Várias janelas, como linhas de diálogo no mapa, registros de combate e pop-ups de conquistas, podem precisar ser colocadas em qualquer linha da IU dentro da área do mapa, e elas serem organizadas sob essa janela em si nunca foi um problema antes. Mas o que acontece quando o mapa é ampliado de forma que um único “oct” ocupa dois linhas? O sistema de coordenadas de grade da janela do mapa agora não tem mais nenhum valor correspondente a cada linha ímpar da interface principal, o que significa que suas janelas filhas não podem ser colocadas nessas linhas.

Então, todas essas janelas relacionadas ao mapa, nas quais o alinhamento vertical é importante no nível da sublinha, precisavam de uma nova janela pai, uma espécie de janela de mapa alternativa falsa que sempre tem um sistema de coordenadas mais preciso, independentemente do estado de zoom do mapa visível.

Nenhuma dessas janelas informativas é interativa, também, então essa janela de “mapa mais fino” não precisa capturar a entrada do mouse e só precisa ocupar um ponto 1×1 no canto superior esquerdo do mapa. É um bom exemplo de uma janela de controle “não oculta, mas transparente e, portanto, invisível”, permitindo que ela atualize normalmente e seus filhos possam aparecer visíveis e usar seus pais como uma referência de coordenadas (colocar subjanelas fora de um pai é bom).

O motivo pelo qual ele precisa ter um estado não oculto é porque esse é um pré-requisito para realmente se atualizar e atualizar os filhos, mas é ao mesmo tempo transparente porque a janela não quer exibir nada próprio.

Aventuras no Map Zooming, Parte 3: Implementação

Outro recurso útil de depuração, a capacidade de mostrar todas as janelas que existem sob um determinado native do cursor e sua profundidade z. Com o cursor no canto superior esquerdo do mapa, ele mostra que há duas courses de mapa sobrepostas naquele native, o contêiner de janela de célula única CMapFine e a classe CMap common. Os outros valores podem mostrar coisas como coordenadas, índices, cores atuais, valores de blocos e quaisquer animações ativas naquele ponto.

Então, para encurtar a história, esse processo não foi apenas sobre alterar as configurações de fonte e recalcular as coordenadas.

Neste ponto, todo o trabalho mais pesado foi feito, mas ainda havia muito trabalho residual antes que o zoom do mapa pudesse ser chamado de recurso completo. Compartilharei mais sobre isso na próxima vez.

Esta é a terceira parte de uma aventura de cinco partes sobre o processo de juntar tudo isso:

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles