public ITilePromise GetTile(Vector3d tile, ITileMeta tileMeta, Action <ITilePromise> callback) { if (!tileCache.ContainsKey(tileMeta)) { tileCache[tileMeta] = new Dictionary <Vector3d, ITilePromise>(); } if (tileCache[tileMeta].ContainsKey(tile)) { callback(tileCache[tileMeta][tile]); return(tileCache[tileMeta][tile]); } foreach (var tileLoader in tileLoaders) { if (tileLoader.CanLoadTile(tile, tileMeta)) { var tilePromise = tileLoader.LoadTile(tile, tileMeta, (tp) => { if (tp.Data == null) { tileCache[tp.Meta].Remove(tp.Tile); } callback(tp); }); tileCache[tileMeta][tile] = tilePromise; return(tilePromise); } } Debug.LogWarning("Couldn't load tile " + tile + " with metatype " + tileMeta.GetType().ToString()); return(null); }
// ################################## #endregion #region Metas // ################################## public void PublishMeta(ITileMeta meta) { var newMetaType = meta.GetType(); if (publicMeta.All(m => m.GetType() != newMetaType)) { publicMeta.Add(meta); publicMetaArray = publicMeta.ToArray(); } }
public bool CanLoadTile(Vector3d tile, ITileMeta tileMeta) { return(tileMeta == this.tileMeta || tileMeta.Identifier == this.tileMeta.Identifier || tileMeta.GetType() == this.tileMeta.GetType()); }