using Godot; using System.Collections.Generic; public class MultiMeshHandler { private readonly Dictionary multiMeshes; public MultiMeshHandler(Dictionary multiMeshes) { this.multiMeshes = multiMeshes; } public void Build(List tiles) { foreach (MultiMeshInstance3D multiMeshInstance in multiMeshes.Values) { multiMeshInstance.Multimesh.InstanceCount = 0; } Dictionary> batches = new Dictionary>(); foreach (TileRenderData tile in tiles) { if (!batches.ContainsKey(tile.MeshKey)) { batches[tile.MeshKey] = new List(); } batches[tile.MeshKey].Add(tile.Transform); } foreach (KeyValuePair> kvp in batches) { MultiMesh multiMesh = multiMeshes[kvp.Key].Multimesh; List transforms = kvp.Value; multiMesh.InstanceCount = transforms.Count; for (int i = 0; i < transforms.Count; i++) { multiMesh.SetInstanceTransform(i, transforms[i]); } } } }