import { Layer, LayerGroup, LayerOptions, Marker,Map as LeafletMap} from "leaflet"; import { DEFAULT_EVENTS } from "./events/default-events"; import { PlayBackEvent } from "./events/EventInterface"; import { TrackableMarker } from "./TrackableMarker"; export class EventPlayerBase extends LayerGroup { protected markers: Map = new Map(); protected events:Map = new Map(); protected genericLayers:Map = new Map(); constructor(options?:LayerOptions) { super(null,options); this.registerEvents(DEFAULT_EVENTS); } createMarker(marker:TrackableMarker,name:string) : TrackableMarker{ if(this.markers.has(name)) return marker; marker.addTo(this); this.markers.set(name,marker); return marker; } createGenericLayer(layer:T,id:string) : T { if(this.genericLayers.has(id)) return layer; layer.addTo(this); this.genericLayers.set(id,layer); return layer; } removeGenericLayer(id:string) : void { const layer = this.genericLayers.get(id); if(!layer) return; this.removeLayer(layer); this.genericLayers.delete(id); } removeMarker(id:string) : void { const marker = this.markers.get(id); if(!marker) return; this.removeLayer(marker); this.markers.delete(id); } registerEvents(event:PlayBackEvent | PlayBackEvent[]) { if(event instanceof Array) { event.forEach(e => this.events.set(e.name,e)); } else { event = (event as PlayBackEvent); this.events.set(event.name,event); } } getMarkerById(id:string) : TrackableMarker | undefined { return this.markers.get(id); } getLayerById(id:string) : T | undefined { return this.genericLayers.get(id) as T; } getMap() : LeafletMap | undefined { return this._map; } }