public RemoveDesignationResult RemoveVoxelDesignation(VoxelHandle Voxel, DesignationType Type) { var key = VoxelHelpers.GetVoxelQuickCompare(Voxel); if (!VoxelDesignations.ContainsKey(key)) { return(RemoveDesignationResult.DidntExist); } var list = VoxelDesignations[key]; var r = list.RemoveAll(d => TypeSet(d.Type, Type)) == 0 ? RemoveDesignationResult.DidntExist : RemoveDesignationResult.Removed; if (list.Count == 0) { VoxelDesignations.Remove(key); } Voxel.Invalidate(); return(r); }
public AddDesignationResult AddVoxelDesignation(VoxelHandle Voxel, DesignationType Type, Object Tag, Task Task) { lock (designationLock) { var key = VoxelHelpers.GetVoxelQuickCompare(Voxel); List <VoxelDesignation> list = null; if (VoxelDesignations.ContainsKey(key)) { list = VoxelDesignations[key]; } else { list = new List <VoxelDesignation>(); VoxelDesignations.Add(key, list); } var existingEntry = list.FirstOrDefault(d => d.Type == Type); if (existingEntry != null) { existingEntry.Tag = Tag; return(AddDesignationResult.AlreadyExisted); } else { list.Add(new VoxelDesignation { Voxel = Voxel, Type = Type, Tag = Tag, Task = Task }); Voxel.Invalidate(); return(AddDesignationResult.Added); } } }