Wróć do wszystkich projektów

MapGenerator

Języki: Java, Vue, TypeScript

MapGenerator to pełnofunkcjonalny generator świata proceduralnego, który transformuje jedno ziarno w w pełni zrealizowaną mapę fantasy. Spring Boot backend produkuje deterministyczny teren przy użyciu FastNoiseLite i przesyła go do klienta Vue 3 + TypeScript, który renderuje cały świat na kanwie HTML5 Canvas.

Celem projektu jest połączenie powtarzalności generacji opartej na ziarnie z bogatością wizualną ręcznie tworzonej mapy — stylizowana woda, miękkie cienie topografii i proceduralne rozmieszczone miasta — przy jednoczesnym utrzymaniu gładkiej renderyzacji na kliencie.

Kluczowe funkcje

  • Interaktywny widok: Panning i zoom w stylu Google Maps wewnątrz stałego widoku 800x600, wspierany przez wirtualną kanwę, dzięki czemu każdą ramkę rysowana jest tylko widoczna część.
  • Animacja stylizowanej wody: Proceduralne wzory fal zainspirowane grami takimi jak Don't Starve, z dynamiczną przezroczystością i subtelnym falowaniem linii brzegu.
  • Tekstury proceduralne terenu: Ziarno, pęczki, grzbiery i falowania są generowane po stronie klienta w czasie rzeczywistym, dzięki czemu teren pozostaje ostry na każdym poziomie powiększenia.
  • Topografia i cienie: Cieniowanie gradientu wysokości zapewnia wrażenie 3D bez opuszczania potoku renderowania 2D.
  • Miasta proceduralne: Każda osada jest renderowana z unikalnie wygenerowanymi domami i wieżowcami, dzięki czemu żadne dwa miasta nie wyglądają tak samo.

Architektura

System jest podzielony na deterministyczny backend generacji i frontend skoncentrowany na prezentacji, połączony poprzez streaming API.

      
[ Seed ] --> [ Spring Boot + FastNoiseLite ] --> [ Streaming API ]
                                                       ↓
                                           [ Vue 3 / TS / Canvas ]
                                                       ↓
                                          [ Virtual Canvas Renderer ]
      
    
  • Backend: Spring Boot, Spring Data JPA, Hibernate, PostgreSQL i FastNoiseLite do generacji terenu opartej na szumie.
  • Frontend: Vue 3 Composition API, TypeScript, Vite i Axios, renderowanie bezpośrednio do HTML5 Canvas.
  • Infrastruktura: Docker i Docker Compose do lokalnej konfiguracji całego stosu za jedno polecenie.

Wydajność

Renderer używa hybrydowego podejścia wirtualnej kanwy: statyczny teren jest wstępnie renderowany w warstwy poza ekranem, a tylko elementy animowane (woda, cienie, szczegóły budynków) są przerysowywane każdą ramkę. To utrzymuje gładkość doświadczenia nawet na dużych światach, przy jednoczesnym zachowaniu wyglądu proceduralnego na każdym poziomie powiększenia.

Użyte technologie

JavaSpring BootPostgreSQLFastNoiseLiteVue 3TypeScriptViteHTML5 CanvasDocker