public MapRenderable2D(LogicalMap2D logicalMap, ITexture tileset, IGameFactory factory) { if (tileset == null) { throw new ArgumentNullException(nameof(tileset)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap)); var subImage = tileset.Regions[0]; TileSize = subImage.Size; _underlay = AttachChild(factory.CreateMapLayer( logicalMap, tileset, logicalMap.GetUnderlay, DrawLayer.Underlay, IconChangeType.Underlay)); _overlay = AttachChild(factory.CreateMapLayer(logicalMap, tileset, logicalMap.GetOverlay, DrawLayer.Overlay, IconChangeType.Overlay)); _info = AttachChild(new InfoOverlay(logicalMap)); var tileSize = tileset.Regions[0].Size; _annotations = AttachChild(new MapAnnotationLayer(logicalMap, tileSize)); On <ToggleUnderlayEvent>(e => _underlay.IsActive = !_underlay.IsActive); On <ToggleOverlayEvent>(e => _overlay.IsActive = !_overlay.IsActive); }