Criei um mapa aleatório de altura e agora quero criar rios. Eu criei um algoritmo baseado em * para fazer os rios fluírem dos picos para o mar e agora estou tentando descobrir um algoritmo elegante para renderizá-los.
É um mapgrid 2D, quadrado e quadrado. As células que o rio cola possui um valor inteiro simples com esta forma: rivernumber && pointOrder. Ou seja: 10, 11, 12, 13, 14, 15, 16 ... 1 + N para o primeiro rio, 20,21,22,23 ... 2 + N para o segundo, etc. Isso é criado no mapear o tempo de geração da grade e é executado apenas uma vez, quando o mundo é gerado.
Eu queria tratar cada rio como um vetor, mas há um problema: se o mesmo rio tiver galhos (porque coloquei algum ruído para gerar galhos), não posso simplesmente conectar os pontos em ordem.
A segunda alternativa é gerar um algoritmo complexo onde analisa cada ponto, verifica se o próximo não é um ramo, se assim for, aciona outro algoritmo que cuida do ramo e retorna ao rio principal, etc. Muito complexo e deselegante.
Talvez exista uma solução no algoritmo de geração mundial ou no algoritmo de renderização de rio que é comumente usada nesses casos e que eu não conheço.
Alguma dica? Obrigado!!