/// <summary> /// Adds a new voxel model or updates it /// </summary> /// <param name="model"></param> public void SaveModel(VisualVoxelModel model) { model.VoxelModel.UpdateHash(); lock (_syncRoot) { if (_models.ContainsKey(model.VoxelModel.Name)) { _models.Remove(model.VoxelModel.Name); VoxelModelStorage.Delete(model.VoxelModel.Name); } _models.Add(model.VoxelModel.Name, model); VoxelModelStorage.Save(model.VoxelModel); } }
public void Rename(string oldName, string newName) { lock (_syncRoot) { VisualVoxelModel model; if (!_models.TryGetValue(oldName, out model)) { throw new InvalidOperationException("No such model to rename"); } model.VoxelModel.Name = newName; VoxelModelStorage.Delete(oldName); VoxelModelStorage.Save(model.VoxelModel); _models.Remove(oldName); _models.Add(newName, model); } }
/// <summary> /// Request a missing model from the server /// </summary> /// <param name="name"></param> public void DownloadModel(string name) { logger.Info("Downloading model: {0}", name); try { var req = WebRequest.Create(string.Format("http://utopiarealms.com/models/{0}/download", Uri.EscapeDataString(name))); var response = req.GetResponse(); using (var stream = response.GetResponseStream()) { var voxelModel = VoxelModel.LoadFromStream(stream); lock (_syncRoot) { if (_models.ContainsKey(voxelModel.Name)) { _models.Remove(voxelModel.Name); } var model = new VisualVoxelModel(voxelModel, VoxelMeshFactory); model.BuildMesh(); _models.Add(voxelModel.Name, model); _pendingModels.Remove(voxelModel.Name); } _receivedModels.Enqueue(voxelModel); VoxelModelStorage.Save(voxelModel); } response.Close(); } catch (Exception x) { logger.Error("Unable to download the model: {0}", x.Message); } }