Exemplo n.º 1
0
        public override void Initialize()
        {
            // load all models
            lock (_syncRoot)
            {
                if (_initialized)
                {
                    return;
                }

                foreach (var voxelModel in VoxelModelStorage.Enumerate())
                {
                    var vmodel = new VisualVoxelModel(voxelModel, VoxelMeshFactory);
                    vmodel.BuildMesh(); //Build the mesh of all local models
                    _models.Add(voxelModel.Name, vmodel);
                }

                _initialized = true;
            }

            // if we have some requested models, remove those that was loaded
            List <string> loadedModels;

            lock (_syncRoot)
            {
                loadedModels = _pendingModels.Where(Contains).ToList();
                loadedModels.ForEach(m => _pendingModels.Remove(m));
            }

            // fire events
            foreach (var loadedModel in loadedModels)
            {
                var model = GetModel(loadedModel, false);
                OnVoxelModelAvailable(new VoxelModelReceivedEventArgs {
                    Model = model.VoxelModel
                });
            }

            HashSet <string> requestSet;

            lock (_syncRoot)
            {
                _pendingModels.ExceptWith(loadedModels);
                requestSet     = _pendingModels;
                _pendingModels = new HashSet <string>();
            }

            // request the rest models
            foreach (var absentModel in requestSet)
            {
                RequestModelAsync(absentModel);
            }
        }