public void Rebuild(GraphicsDevice gd, bool force = false) { switch (MeshType) { case MeshType.Smooth: Meshes = new List <HexMapMesh> { new HexMapMeshSmooth(gd, Hexes, Texture) }; break; case MeshType.Flat: if (force) { Meshes = new List <HexMapMesh>(); for (var xp = 0; xp < Width; xp += PatchSize) { for (var yp = 0; yp < Height; yp += PatchSize) { var patchHexes = new List <Hexagon>(); for (var x = xp; x < xp + PatchSize; x++) { for (var y = yp; y < yp + PatchSize; y++) { var hex = GetHex(x, y); if (hex != null) { patchHexes.Add(hex); } } } Meshes.Add(new HexMapMeshFlat(gd, patchHexes, Texture)); } } } else { foreach (var dirtyPatch in DirtyPatches) { var mesh = Meshes.FirstOrDefault(m => m.PatchID == dirtyPatch); if (mesh == null) { continue; } Meshes.Remove(mesh); Meshes.Add(new HexMapMeshFlat(gd, mesh.Hexes, Texture)); } } break; default: throw new ArgumentOutOfRangeException(); } DirtyPatches.Clear(); }
public MeshDescription GetMeshDescription(string name) { if (name == null) { name = string.Empty; } // Search for mesh description by name. var meshDescription = Meshes.FirstOrDefault(m => m.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (meshDescription != null) { return(meshDescription); } // Search for mesh description without a name. Use as fallback. meshDescription = Meshes.FirstOrDefault(m => string.IsNullOrEmpty(m.Name)); return(meshDescription); }
internal bool TryGetAsset(string name, out Object asset) { asset = Meshes.FirstOrDefault(m => m.SourceFilename == name); if (asset != null) { return(true); } else { asset = Textures.FirstOrDefault(t => t.SourceFilenames.Contains(name)); if (asset != null) { return(true); } else { asset = Scripts.FirstOrDefault(s => s.SourceFilename == name); if (asset != null) { return(true); } else { asset = Shaders.FirstOrDefault(s => s.SourceFilename == name); if (asset != null) { return(true); } } } } return(false); }