//go:build wasm // +build wasm package main import ( _ "embed" "encoding/json" "path/filepath" "github.com/hajimehoshi/ebiten/v2/ebitenutil" "git.zb-server.de/ZB-Server/EscapeFromTeacher/pkg/game" ) //go:embed web/assets/assets.json var assetsJSON []byte func (g *Game) loadAssets() { // Assets Manifest aus eingebetteter Datei laden var m game.AssetManifest if err := json.Unmarshal(assetsJSON, &m); err != nil { log.Printf("⚠️ Fehler beim Parsen von assets.json: %v", err) g.world.Manifest = game.AssetManifest{Assets: make(map[string]game.AssetDefinition)} } else { g.world.Manifest = m fmt.Println("✅ Assets Manifest geladen (WASM):", len(m.Assets), "Einträge") } // Chunks laden (auch per go:embed in chunks_wasm.go) g.loadChunks() // Bilder vorladen - In WASM sind die Assets relativ zum HTML baseDir := "./assets" loadedImages := 0 failedImages := 0 for id, def := range g.world.Manifest.Assets { if def.Filename != "" { path := filepath.Join(baseDir, def.Filename) img, _, err := ebitenutil.NewImageFromFile(path) if err == nil { g.assetsImages[id] = img loadedImages++ } else { log.Printf("⚠️ Bild nicht geladen: %s (%s) - Fehler: %v", id, def.Filename, err) failedImages++ } } } fmt.Printf("🖼️ Bilder (WASM): %d geladen, %d fehlgeschlagen\n", loadedImages, failedImages) // Alle Sprites in eine Atlas-Textur packen → ein GPU-Draw-Call statt vieler g.assetsImages = buildAtlas(g.assetsImages, g.world.Manifest) }